Next: , Previous:   [Contents][Index]

21 Differential Equations


21.1 Introduction to Differential Equations

この節は、 一次と二次方程式のいくつかの特定のタイプの解析解を得るためのMaximaで利用可能な関数を 記述します。 微分方程式系の数値解を得るには、 付加パッケージdynamicsを参照してください。 位相空間でのグラフィカルな表現に関して、 付加パッケージplotdfを参照してください。


21.2 Functions and Variables for Differential Equations

関数: bc2 (solution, xval1, yval1, xval2, yval2)

二階微分方程式の境界値問題を解きます。 ここで: solutionは、ode2が見つけるような方程式の一般解です; xval1は、独立変数の最初の点の値を、形式x = x1で指定し、 yval1は、その点の従属変数の値を、形式y = y1で与えます。 式xval2yval2は、 それらの変数の二番目の点での値を、同じ形式を使って与えます。

用法の例についてはode2を参照してください。

関数: desolve (eqn, x)
関数: desolve ([eqn_1, ..., eqn_n], [x_1, ..., x_n])

関数desolveは、ラプラス変換を使って線形常微分方程式系を解きます。 ここで、eqn群は、従属変数x_1, ..., x_nに関する微分方程式です。 x_1, ..., x_nの独立変数、例えばx、への関数依存性は、 変数や導関数の中で陽に示されなければいけません。 例えば、これは、2つの方程式を定義する正しい方法ではありません:

eqn_1: 'diff(f,x,2) = sin(x) + 'diff(g,x);
eqn_2: 'diff(f,x) + x^2 - f = 2*'diff(g,x,2);

正しい方法は以下の通りです:

eqn_1: 'diff(f(x),x,2) = sin(x) + 'diff(g(x),x);
eqn_2: 'diff(f(x),x) + x^2 - f(x) = 2*'diff(g(x),x,2);

関数desolveのコールは、

desolve([eqn_1, eqn_2], [f(x),g(x)]);

です。

もしx=0の初期条件が既知なら、 それらは、atvalueを使って、desolveコールの前に供給することができます。

(%i1) 'diff(f(x),x)='diff(g(x),x)+sin(x);
                 d           d
(%o1)            -- (f(x)) = -- (g(x)) + sin(x)
                 dx          dx
(%i2) 'diff(g(x),x,2)='diff(f(x),x)-cos(x);
                  2
                 d            d
(%o2)            --- (g(x)) = -- (f(x)) - cos(x)
                   2          dx
                 dx
(%i3) atvalue('diff(g(x),x),x=0,a);
(%o3)                           a
(%i4) atvalue(f(x),x=0,1);
(%o4)                           1
(%i5) desolve([%o1,%o2],[f(x),g(x)]);
                  x
(%o5) [f(x) = a %e  - a + 1, g(x) = 

                                                x
                                   cos(x) + a %e  - a + g(0) - 1]
(%i6) [%o1,%o2],%o5,diff;
             x       x      x                x
(%o6)   [a %e  = a %e , a %e  - cos(x) = a %e  - cos(x)]

もしdesolveが解を得られないなら、 falseを返します。

関数: ic1 (solution, xval, yval)

一階微分方程式の初期値問題を解きます。 ここで、solutionは、ode2が見つけるような、方程式の一般解であり、 xvalは、独立変数の初期値を、形式x = x0で与え、 yvalは、従属変数の初期値を、形式y = y0で与えます。

用法の例についてはode2を参照してください。

関数: ic2 (solution, xval, yval, dval)

二階微分方程式の初期値を解きます。 ここで、 solutionは、ode2が見つけるような、 方程式の一般解のであり、 xvalは、独立変数の初期値を、形式x = x0で与え、 yvalは、従属変数の初期値を、形式y = y0で与え、 dvalは、従属変数の独立変数に関する一階導関数の初期値を、 形式diff(y,x) = dy0で、与えます。 (diffはクォートされる必要はありません。)

用法の例については、ode2を参照してください。

関数: ode2 (eqn, dvar, ivar)

関数ode2は、一階または二階常微分方程式(ODE)を解きます。 3つの引数を取ります: eqnで与えられるODE、従属変数dvar、独立変数ivar。 成功した時、従属変数に関する陽解または陰解を返します。 一階方程式の場合、%cが積分定数を表し、 二階方程式の場合、%k1%k2が定数を表します。 従属変数の独立変数への依存性は、 desolveの場合のように、陽に書かれる必要はありませんが、 独立変数はいつも三番目の引数として与えられなければいけません。

たとえどんな理由でも、もしode2が解を得られなかったら、 おそらく、エラーメッセージを表示した後、falseを返します。 一階方程式用に実装された方法は、試される順番に、線形、分離、厳密―おそらく因子の積分を要求します―、斉次、ベルヌーイの等式、一般化斉次法、です。 解ける二階方程式のタイプは、定係数、厳密、定数係数に変換可能な非定数係数線形斉次、 オイラーまたは等次元方程式、パラメータ変動法で解ける方程式、 独立変数または従属変数を含まなくて、順に解かれる2つの一階線形方程式に換算できる方程式、 です。

ODEを解く間、いくつかの変数が純粋に参考目的で設定されます: methodは、使われた解法(例えば、linear)を示し、 intfactorは、任意の使われた積分因子を示し、 odeindexは、ベルヌーイ法または一般化斉次法のインデックスを示し、 ypは、パラメータ変動手法の特殊解を示します。

初期値問題(IVP)を解くためには、 一階と二階方程式のためには関数ic1ic2が利用可能であり、 二階境界値問題(BVP)を解くためには、 bc2を使うことができます。

例:

(%i1) x^2*'diff(y,x) + 3*y*x = sin(x)/x;
                      2 dy           sin(x)
(%o1)                x  -- + 3 x y = ------
                        dx             x
(%i2) ode2(%,y,x);
                             %c - cos(x)
(%o2)                    y = -----------
                                  3
                                 x
(%i3) ic1(%o2,x=%pi,y=0);
                              cos(x) + 1
(%o3)                   y = - ----------
                                   3
                                  x
(%i4) 'diff(y,x,2) + y*'diff(y,x)^3 = 0;
                         2
                        d y      dy 3
(%o4)                   --- + y (--)  = 0
                          2      dx
                        dx
(%i5) ode2(%,y,x);
                      3
                     y  + 6 %k1 y
(%o5)                ------------ = x + %k2
                          6
(%i6) ratsimp(ic2(%o5,x=0,y=0,'diff(y,x)=2));
                             3
                          2 y  - 3 y
(%o6)                   - ---------- = x
                              6
(%i7) bc2(%o5,x=0,y=1,x=1,y=3);
                         3
                        y  - 10 y       3
(%o7)                   --------- = x - -
                            6           2


Next: , Previous:   [Contents][Index]