Mathematica 9 is now available

Mathematica で微分方程式を解く方法を教えてください.

注:このページは,微分学・微分方程式の解法・数値精度の入門用ではありません.このようなトピックにご関心のある方は,それぞれの分野の参考文献をご覧ください.各分野の書籍に関しては,Mathematica ブックストアをご覧ください.

Mathematica の重要な利点の1つに,微分方程式の族の多くを数値的にも記号的にも簡単に解くことができるというものがあります.

多くの場合,まず記号的ソルバのDSolveを使ってみるとよいでしょう.Mathematica 関数は常に向上しているので,DSolveで高階微分方程式あるいは非線形微分方程式の厳密解さえも見付けられることがよくあります.




記号的解法



DSolveではどのような問題が解けるのですか.

DSolveでは,任意の階数の定数係数線形常微分方程式を解くことができます.また,2階までの非定数係数線形常微分方程式の多くを解くこともできます.DSolveには,Erich Kamkeの「Differentialgleichungen. Lösungsmethoden und Lösungen I: Gewöhnliche Differentialgleichungen」など,標準的な参考書で解が与えられている非線形常微分方程式の大部分に対する一般的な手順も含まれています.DSolveでは,線形および弱非線形偏微分方程式の一般解を求めることもできます.真非線形偏微分方程式には,通常一般解はありません.


常微分方程式

微分方程式(系)は,入力するだけで解くことができます.Mathematica では,多くの数値的な微分方程式ソルバとは異なり,高階方程式を手計算で1階方程式に変換する必要がありません.以下にいくつか例を示します.詳細は,DSolveのドキュメントの特に「他の例」をご覧ください.


  • 初期条件を持たない常微分方程式
  • 初期条件を持たない常微分方程式の場合は,通常方程式を入力してDSolve文を評価するだけです.

    [Graphics:Images/index_gr_3.gif]
    [Graphics:Images/index_gr_4.gif]

    DSolveは,高階微分方程式にも使えます.

    [Graphics:Images/index_gr_5.gif]
    [Graphics:Images/index_gr_6.gif]
    [Graphics:Images/index_gr_7.gif]
    [Graphics:Images/index_gr_8.gif]
    [Graphics:Images/index_gr_9.gif]
    [Graphics:Images/index_gr_10.gif]
    [Graphics:Images/index_gr_11.gif]
    [Graphics:Images/index_gr_12.gif]

    DSolveは非線形定数の1階微分方程式にも使えます.

    [Graphics:Images/index_gr_13.gif]
    [Graphics:Images/index_gr_14.gif]

    ここで,横道にそれますがMathematica に以下の微分方程式を与えてみましょう.

    [Graphics:Images/index_gr_15.gif]
    [Graphics:Images/fit3_gr_1.gif]

  • 初期条件を持つ常微分方程式
  • 初期条件を持つ常微分方程式も,初期条件を持たない常微分方程式と非常によく似た方法で扱われます.ただ,初期条件を方程式のリストの一部として入力するだけです.

    DSolve[{Derivative[1][y][x] - x*y[x] == 0, y[0] == 0.1}, 
      y[x], x]
    {{y[x] -> 0.1*E^(0.5*x^2)}}

  • 常微分方程式系
  • 常微分方程式系の解法は,1つの常微分方程式の解法と同様です.方程式のリストを入力して,それに対してDSolveを実行するだけです.

    [Graphics:Images/index_gr_17.gif]
    [Graphics:Images/index_gr_18.gif]

偏微分方程式

偏微分方程式の理論は,常微分方程式ほど完全に発達していません.コーシー・コワレフスカヤの定理(Cauchy-Kovalevskaya Theorem)に相当するものがないのです.これは,Mathematica では微分方程式のサブセットだけを記号的に解くことができるということを意味します.具体的に言うと,DSolveで線形および弱非線形偏微分方程式の一般解を求めることができます.非線形偏微分方程式の大部分には,一般解がありません.その場合,Calculus`DSolveIntegrals`標準パッケージのツールを使って完全積分,あるいは微分不変式を求めてみるとよいでしょう.

DSolveは,以下の例の波動方程式のような偏微分方程式の一般解を求めることができます.ここでも,方程式を入力してDSolveを呼び出すだけです.

[Graphics:Images/index_gr_19.gif]
[Graphics:Images/index_gr_20.gif]
トップへ戻る

数値的解法

Mathematica では,1階常微分方程式,偏微分方程式,微分方程式系,高階微分方程式のどれにでも常にNDSolveコマンドが使えます.また,そのデフォルトのAutomaticは,硬さに応じてGearAdamsのどちらかを自動的に選択します.硬くない方程式にはRungeKuttaが使われる可能性もあります.問題によってはRungeKutta法の方が他の方法よりも早く解が見付けられることがあります.

高階微分方程式

NDSolveには入力として,1つあるいは複数の微分方程式,十分な初期条件のセット,解く範囲が必要です.Plotコマンドの中のショートカット/.は関数[Graphics:Images/index_gr_21.gif]の解を挿入します.

[Graphics:Images/index_gr_22.gif]

[Graphics:Images/index_gr_23.gif]


境界値問題

NDSolveでは多数の境界値問題を解くことができます.境界条件を追加の方程式として加えるだけです.

[Graphics:Images/index_gr_24.gif]

[Graphics:Images/index_gr_25.gif]


微分方程式系

以下の例では,Mathematica を使ってローレンツ(Lorenz)アトラクタの方程式を1ステップで解いています.他のパッケージを使うと,ユーザがかなりの準備をしなければならないでしょう.

[Graphics:Images/index_gr_26.gif]

解のグラフです.

[Graphics:Images/index_gr_27.gif]

[Graphics:Images/index_gr_28.gif]

[Graphics:Images/index_gr_29.gif]

偏微分方程式

ここでは,左端[Graphics:Images/index_gr_30.gif]が固定温度0度,右端([Graphics:Images/index_gr_32.gif])が固定温度1度,初期の熱プロファイルがxについての4次方程式である熱方程式をNDSolveで解きます.

[Graphics:Images/index_gr_34.gif]

[Graphics:Images/index_gr_35.gif]

より興味深い例として,時間依存境界条件が加わった場合があります.例えば,以下のように入力すると,左端の温度が正弦波的に変化する解のプロットが作成されます.

[Graphics:Images/index_gr_36.gif]

[Graphics:Images/index_gr_37.gif]


偏微分方程式系

NDSolveは,偏微分方程式系を扱うこともできます.[Graphics:Images/index_gr_38.gif]という表記は,「関数[Graphics:Images/index_gr_39.gif][Graphics:Images/index_gr_40.gif]NDSolveの結果と置き換える」ということを意味しています.

[Graphics:Images/index_gr_41.gif]
[Graphics:Images/index_gr_42.gif]
[Graphics:Images/index_gr_43.gif]
[Graphics:Images/index_gr_44.gif]

[Graphics:Images/index_gr_45.gif]

[Graphics:Images/index_gr_46.gif]
トップに戻る

結果の検証


Mathematica で最も簡単に解を検証する方法は,解を元の方程式に代入することです.この方法は記号解にも数値解にも使えます.

[Graphics:Images/index_gr_47.gif]
 [Graphics:Images/index_gr_48.gif]

/.symsol[Graphics:Images/index_gr_49.gif]DSolveによって求められた解に置き換えられます.

[Graphics:Images/index_gr_50.gif]
[Graphics:Images/index_gr_51.gif]

解は微分方程式を満足します.

[Graphics:Images/index_gr_52.gif]
[Graphics:Images/index_gr_53.gif]

[Graphics:Images/index_gr_54.gif]

NDSolveによって求められた解は,おおよそ方程式を満足します.最初にかなり大きな違いがあるのは,数値的微分の作為的なものです.次のセクションで,より正確な解を求める方法を説明します.

トップに戻る



高精度の設定

常微分方程式の非常に正確な解を得る方法の1つとして,WorkingPrecisionオプションの値を十分高くするというものがあります.WorkingPrecision$MachinePrecisionよりも大きい場合は,AccuracyGoalPrecisionGoalの値はデフォルトでWorkingPrecisionの値より10小さいものになります.

上の計算の結果と精度を高くして実行した場合の結果とを比べてみましょう.

[Graphics:Images/index_gr_55.gif]
[Graphics:Images/index_gr_56.gif]

以下のプロットは,数値解とWorkingPrecisionがデフォルトの微分方程式との差(黒),および,数値解とWorkingPrecisionが22に設定された微分方程式との差()の対数を示しています.

[Graphics:Images/index_gr_57.gif]

[Graphics:Images/index_gr_58.gif]

数値誤差は精度を高くした場合に顕著に小さくなることが分かります.かなり高い初期値は作為的なものです.

トップに戻る



他の参照項目

Calculus`DSolveIntegrals`

非線形偏微分方程式のほとんどには,一般解がありません.非線形偏微分方程式には,Calculus`DSolveIntegrals`標準アドオンパッケージのツールを使って,完全積分あるいは微分不変式を求めてみるとよいでしょう.

積分変換

Mathematica には積分変換を計算するための関数が数多く含まれています.フーリエ変換とラプラス変換は,微分方程式の解析的な解を求めるための特にパワフルなツールです.詳細はMathematica ブックのFourierLaplaceのセクションをご覧ください.

Lie Symmetries

ドイツのUlm大学のGerd Baumannが,Lie対称とLie-Baecklund対称を扱う多くのパッケージを発表しています.Lie対称法は線形微分方程式系および,特に非線形微分方程式系の解を構築するために使用することができます.

トップに戻る