MathematicaのNDSolveにおける初期ノイズの処理について
Mathematicaで偏微分方程式のシミュレーションをする際の初期ノイズの与え方についての質問があり投稿致しました.
下記の元コードを用いてNDSolveによりシミュレーションを行っているところです.
その中で,初期値として,図1のような1+0.1*noiseの範囲で細かく与えたノイズが,
NDSolveの中にいれてシミュレーションを行うと,t=0で図2のように粗いノイズとして結果が出力されてしまいます.
図1のような細かさのあるノイズの初期値をそのまま用いて偏微分方程式を解きたい場合,どのように解決できますでしょうか?(どのような初期ノイズの与え方をすれば,シミュレーション時に頂点数(?)を減らされずに済みますでしょうか?)
恐らくNDSolveに何かしらのオプションを設定すれば解決するのではないか,というところまで当たりを付けることができたのですが,MaxStepSize等では改善できず試行錯誤して2カ月程経ても解決策が見つからなかったため投稿致しました.
どうぞご助言よろしくお願い致します.
出力結果-------------------------------
図1
図2
元コード-------------------------------
xmax = 1000;
tmax = 300;
\[Sigma] = 1;
l1 = 2;
l2 = 0;
noise = Interpolation[
Normal[RandomFunction[WhiteNoiseProcess[\[Sigma]], {0, xmax}]][[2]]]
tnoise = Interpolation[
Normal[RandomFunction[WhiteNoiseProcess[\[Sigma]], {0, tmax}]][[2]]]
Plot[1 + 0.1*noise[x], {x, 0, xmax},
PlotLegends -> Placed[{positionnoise}, {Top, Center} ],
PlotRange -> {0, 2}, PlotRangePadding -> None, Frame -> True,
BaseStyle -> {FontWeight -> "Bold", FontSize -> 20,
FontColor -> "Black"},
PlotStyle -> {Thickness[0.01], RGBColor[1, 0, 0]},
AxesStyle -> Directive[Black, AbsoluteThickness[0.5]],
FrameStyle -> AbsoluteThickness[0.5],
FrameTicksStyle ->
Directive[AbsoluteThickness[0.5], FontFamily -> "Times New Roman",
FontColor -> "Black"],
FrameLabel -> {Style["Position", FontSize -> 20,
FontFamily -> "Times New Roman", FontColor -> "Black"],
Style["Density", FontSize -> 20, FontFamily -> "Times New Roman",
FontColor -> "Black"]} , Mesh -> All]
zz = NDSolve[{D[u[t, x], t] == -4*D[u[t, x], x] +
NeumannValue[0, x >= xmax], u[0, x] == 1 + 0.1*noise[x],
DirichletCondition[u[t, x] == 1 + 0.3*tnoise[t], x <= 0]} ,
u, {t, 0, tmax}, {x, 0, xmax}, MaxSteps -> Infinity];
ta = 0
png1 = Plot[u[ta, x] /. zz, {x, 0, xmax},
PlotLegends -> Placed[{ta}, {Top, Center} ], PlotRange -> {l2, l1},
PlotRangePadding -> None, Frame -> True,
BaseStyle -> {FontWeight -> "Bold", FontSize -> 20,
FontColor -> "Black"},
PlotStyle -> {Thickness[0.01], RGBColor[1, 0, 0]},
AxesStyle -> Directive[Black, AbsoluteThickness[0.5]],
FrameStyle -> AbsoluteThickness[0.5],
FrameTicksStyle ->
Directive[AbsoluteThickness[0.5], FontFamily -> "Times New Roman",
FontColor -> "Black"],
FrameLabel -> {Style["Position", FontSize -> 20,
FontFamily -> "Times New Roman", FontColor -> "Black"],
Style["Density", FontSize -> 20, FontFamily -> "Times New Roman",
FontColor -> "Black"]} , Mesh -> All]