2

I have a differential equation:

$$\frac{dx}{dt}=\operatorname{sech}(x-1)$$

I want to add noise to it and try to solve it numerically, but it seems that I am programming something wrong, because there is no noise. I am trying to do this by adding a random number.

ClearAll["Global`*"]

pars = {α = 1, β = 1/20, γ = 1, h = 1, ω = 2 Pi 1/2, μ = 1, xs = -1, xe = 1}

f = Sech[x[t] - xe]

sys = NDSolve[{x'[t] == ArcTan[1 D[f, x[t]]] + RandomReal[{-1/10, 1/10}], x[0] == xs}, {x}, {t, 0, 500}]

Plot[{Evaluate[x[t] /. sys], xe}, {t, 0, 10}, PlotRange -> All, PlotPoints -> 40]

J. M.'s missing motivation
  • 124,525
  • 11
  • 401
  • 574
dtn
  • 2,394
  • 2
  • 8
  • 18

1 Answers1

4

One way to make random noise over the range t = 0 to 10:

ttab=Table[i/10,{i,0,100}];

Noisetab=Table[Random[Real, {-1/10, 1/10}], {101}]

Noise=Interpolation[Table[{ttab[[i]],Noisetab[[i]]},{i,101}]]

Plot the noise.

Plot[Noise[t],{t,0,10}]

enter image description here

You can then add Noise[t] to your differential equation. If you want more or fewer points in your noise or a different range, you can make adjustments.

Editing your NDSolve statement and plotting:

sys = NDSolve[{Derivative[1][x][t] == ArcTan[1*D[f, x[t]]] + Noise[t], x[0] == xs}, {x}, {t, 0, 10}]

Plot[{Evaluate[x[t] /. sys], xe}, {t, 0, 10}, PlotRange -> All, PlotPoints -> 40]

enter image description here

Bill Watts
  • 8,217
  • 1
  • 11
  • 28
  • Nice answer. Thank you! – dtn Jan 26 '21 at 08:45
  • I did it a little differently: x'[t] == ArcTan[1 D[f, x[t]]] + k Sin[RandomReal[{-100, 100}] t] Sin[ RandomReal[{-100, 100}] t] Sin[RandomReal[{-100, 100}] t] – dtn Jan 26 '21 at 09:51
  • 1
    That works too. I am sure there are many ways to randomize functions of time that are suitable. – Bill Watts Jan 26 '21 at 18:58