WOLFRAM言語チュートリアル

記号パラメータと非厳密な数値

実際に生じる微分方程式には,下の2つのタイプがある.

  • 唯一の変数が独立・従属変数である方程式.従って,DSolveの第1引数に現れる変数がすべて第2,第3引数にも現れる.
    • 質量あるいはバネ定数等,他の記号的数量を含む方程式.この場合の解は,独立変数,従属変数,付加的な記号的パラメータに依存する.
    最初のタイプの例である.
    In[1]:=
    Click for copyable input
    Out[1]=
    2つ目のタイプの例である.この方程式には記号パラメータ がある.
    In[2]:=
    Click for copyable input
    Out[2]=

    DSolveは上記のどちらのタイプの方程式も扱うことができる.2つ目のタイプの方程式では,可能なパラメータ値すべてについての解が使えるようにしておくと非常に便利である.

    パラメータ の異なる値に対する上の解のプロットである.
    In[3]:=
    Click for copyable input
    Out[3]=

    記号パラメータがあると,かなり複雑な出力になる可能性がある.

    次の例の出力は複雑である([K59]の401ページ,方程式2.14).
    In[4]:=
    Click for copyable input
    In[5]:=
    Click for copyable input
    Out[5]=

    しかし,パラメータが特殊値のときは,解は格段に簡単になる.

    の値が下のような場合は,解はさらに簡単になる.
    In[6]:=
    Click for copyable input
    Out[6]=

    解がパラメータの大部分の値については有効であるが,すべての値については有効でないという場合がある.

    この例の入力は では有効ではないので,解にも同じ制約がある.
    In[7]:=
    Click for copyable input
    Out[7]=
    ここで と設定すると制約はなくなる.
    In[8]:=
    Click for copyable input
    Out[8]=

    つまり,記号パラメータを持つ微分方程式が解けるということは,DSolveのような記号ソルバのパワフルで不可欠な機能なのである.しかし,下記の点には注意しなければならない.

  • 解が複雑になることがある.そのような計算には,かなりの時間とメモリが必要となることが多い.
  • パラメータが例外的な値のときは,答が有効ではない場合がある.
    • パラメータが特殊値のときは,解の検証を記号的に行うと簡単であるが,一般的には数値検証法の方がよい.

    Wolfram言語の数には,無限精度,機械精度,任意精度の3種類がある.無限精度数は「厳密数」といわれ,残りの2つは不完全な情報を表すため「非厳密数」と呼ばれる.

    以下は3種類の数を示す例である.
    In[9]:=
    Click for copyable input
    In[10]:=
    Click for copyable input
    Out[10]=
    In[12]:=
    Click for copyable input
    Out[12]=
    In[13]:=
    Click for copyable input
    Out[13]=
    In[14]:=
    Click for copyable input
    Out[14]=

    DSolveは記号ソルバなので,使用されるアルゴリズムは主に入力が厳密であるという前提に基づいている.しかし,DSolveは非厳密な数値を含む方程式も通常通りに扱う.

    以下の方程式には,それぞれ非厳密数3.,3.`40が含まれている.
    In[15]:=
    Click for copyable input
    Out[15]=
    In[16]:=
    Click for copyable input
    Out[16]=

    非厳密な入力が生じるのは,例えば,方程式の係数が前の計算から導かれており,近似的にのみ分かっている場合等である.そのような場合,方程式を厳密形式に変換することは,計算を著しく遅くするので,実践的ではない.

    すべての方程式に厳密数の係数が含まれている線形常微分方程式系である. の値がかなり小さくても,計算が終了するには長い時間がかかる.
    In[17]:=
    Click for copyable input
    Out[17]=
    In[18]:=
    Click for copyable input
    Out[18]=
    解を検証する.解は複雑なので,数値検証法が使われる.
    In[19]:=
    Click for copyable input
    Out[19]=
    関数 に単独の非厳密な値が導入されると,解はより速く返される.
    In[20]:=
    Click for copyable input
    Out[20]=
    In[21]:=
    Click for copyable input
    Out[21]=
    In[22]:=
    Click for copyable input
    Out[22]=

    このように,DSolveのような記号関数の中でも,非厳密数を使い続けたほうがよい場合がよくある.しかし,そのような場合に得られる解にはある程度の数値誤差が含まれるため,注意深くチェックしなければならない.問題が大きすぎない(方程式が5つ未満である等)場合は,関数Rationalizeを使って入力を厳密形に変換しなければならない.

    以下の方程式には非厳密数が含まれている.
    In[23]:=
    Click for copyable input
    Out[23]=
    ここで,方程式を解く前に厳密形式に変換する.
    In[24]:=
    Click for copyable input
    Out[24]=