How to | NDSolveの結果をチェックする方法

ほとんどの微分方程式について,NDSolveで求めた結果は正確である.しかし,その結果は数値標本と誤差推定に基づいているため,重大な誤差が起ることが時にはある.解の質を確認したい場合は,解に対して基本的なチェックをいくつか行うとよい.

デフォルトのMachinePrecisionよりも高いWorkingPrecisionで計算した解と比べることは,結果をチェックする上で役に立つことが多い.

異なる解が異なる点における解のデータを保存するため,これらの点での差に繋がるという場合がある.この差が解の数値誤差より大きいものにならないようにするために,InterpolationOrder->Allを使う.

NDSolveをデフォルトのMachinePrecisionで使って,解を計算する:

In[1]:=
Click for copyable input

WorkingPrecision->22NDSolveを使って,解を計算する:

In[2]:=
Click for copyable input

誤差はかなり小さいことが多いので,これらの誤差を対数尺度上で見ると便利である.RealExponentは,実質的にはLog10[Abs[x]]と等しいが,ゼロにおいて特異点を持たないので,ある点においてゼロであるかもしれない差を見る場合にはよい選択である:

In[3]:=
Click for copyable input
Out[3]=

微分方程式の残差は左辺と右辺の差である:

In[4]:=
Click for copyable input

NDSolveで使われる数値メソッドはどの点においても残差が小さくなるように設計されている.残差の対数をプロットすることができる:

In[5]:=
Click for copyable input
Out[5]=

これで分かるように,数値誤差はより高いWorkingPrecisionを使っている場合に著しく小さくなる.もちろんそのトレードオフは,より長い計算時間である.

ほとんどの場合,残差を小さくすると正確な数値解が得られるが,常にこれが真であるわけではない.その簡単な例としてDuffingの方程式がある:

In[6]:=
Click for copyable input
In[7]:=
Click for copyable input
In[8]:=
Click for copyable input
Out[8]=
New to Mathematica? Find your learning path »
Have a question? Ask support »