Next: Functions and Variables for Differential Equations, Previous: Differential Equations, Up: Differential Equations [Contents][Index]
この節は、
一次と二次方程式のいくつかの特定のタイプの解析解を得るためのMaximaで利用可能な関数を
記述します。
微分方程式系の数値解を得るには、
付加パッケージdynamics
を参照してください。
位相空間でのグラフィカルな表現に関して、
付加パッケージplotdf
を参照してください。
Previous: Introduction to Differential Equations, Up: Differential Equations [Contents][Index]
二階微分方程式の境界値問題を解きます。
ここで: solutionは、ode2
が見つけるような方程式の一般解です;
xval1は、独立変数の最初の点の値を、形式x = x1
で指定し、
yval1は、その点の従属変数の値を、形式y = y1
で与えます。
式xval2とyval2は、
それらの変数の二番目の点での値を、同じ形式を使って与えます。
用法の例についてはode2
を参照してください。
関数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
を返します。
一階微分方程式の初期値問題を解きます。
ここで、solutionは、ode2
が見つけるような、方程式の一般解であり、
xvalは、独立変数の初期値を、形式x = x0
で与え、
yvalは、従属変数の初期値を、形式y = y0
で与えます。
用法の例についてはode2
を参照してください。
二階微分方程式の初期値を解きます。
ここで、 solutionは、ode2
が見つけるような、
方程式の一般解のであり、
xvalは、独立変数の初期値を、形式x = x0
で与え、
yvalは、従属変数の初期値を、形式y = y0
で与え、
dvalは、従属変数の独立変数に関する一階導関数の初期値を、
形式diff(y,x) = dy0
で、与えます。
(diff
はクォートされる必要はありません。)
用法の例については、ode2
を参照してください。
関数ode2
は、一階または二階常微分方程式(ODE)を解きます。
3つの引数を取ります:
eqnで与えられるODE、従属変数dvar、独立変数ivar。
成功した時、従属変数に関する陽解または陰解を返します。
一階方程式の場合、%c
が積分定数を表し、
二階方程式の場合、%k1
と%k2
が定数を表します。
従属変数の独立変数への依存性は、
desolve
の場合のように、陽に書かれる必要はありませんが、
独立変数はいつも三番目の引数として与えられなければいけません。
たとえどんな理由でも、もしode2
が解を得られなかったら、
おそらく、エラーメッセージを表示した後、false
を返します。
一階方程式用に実装された方法は、試される順番に、線形、分離、厳密―おそらく因子の積分を要求します―、斉次、ベルヌーイの等式、一般化斉次法、です。
解ける二階方程式のタイプは、定係数、厳密、定数係数に変換可能な非定数係数線形斉次、
オイラーまたは等次元方程式、パラメータ変動法で解ける方程式、
独立変数または従属変数を含まなくて、順に解かれる2つの一階線形方程式に換算できる方程式、
です。
ODEを解く間、いくつかの変数が純粋に参考目的で設定されます:
method
は、使われた解法(例えば、linear
)を示し、
intfactor
は、任意の使われた積分因子を示し、
odeindex
は、ベルヌーイ法または一般化斉次法のインデックスを示し、
yp
は、パラメータ変動手法の特殊解を示します。
初期値問題(IVP)を解くためには、
一階と二階方程式のためには関数ic1
とic2
が利用可能であり、
二階境界値問題(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