Next: Functions and Variables for contrib_ode, Previous: contrib_ode, Up: contrib_ode [Contents][Index]
Maximaの常微分方程式(ODE)ソルバode2は
一階と二階の初等線形ODEを解きます。
関数contrib_odeは
線形と非線形一階ODEと線形斉次二階ODEに関する追加の方法で
ode2を拡張します。
コードは、まだ開発中で、コールの順序は将来のリリースで変わるかもしれません。
一旦コードが安定化したら、投稿ディレクトリから移して、Maximaに統合されるかもしれません。
このパッケージは、
使用前に
コマンドload("contrib_ode")でロードしなければいけません。
contrib_odeのコール取り決めは
ode2と同一です。
3つの引数を取ります:
ODE (右辺が0なら左辺だけでもいいです)、
従属変数、独立変数。
成功した時、解のリストを返します。
解の形式は
ode2と異なります。
非線形方程式は複数解を持つので、
contrib_odeは解のリストを返します。
解それぞれは複数の形式を持ちます:
%tを使ったパラメトリック解、または、
%uに関する別のODEへの変換
%cは
一階方程式の積分定数を表すのに使われます。
%k1と%k2は
二階方程式の定数を表すのに使われます。
もしcontrib_odeが
いかなる理由でも解を得られないなら、
たぶんエラーメッセージを印字した後、
falseを返します。
一階非線形ODEは複数解を持ち得るので、 解のリストを返す必要があります。 例えば:
(%i1) load("contrib_ode")$
(%i2) eqn:x*'diff(y,x)^2-(1+x*y)*'diff(y,x)+y=0;
dy 2 dy
(%o2) x (--) - (x y + 1) -- + y = 0
dx dx
(%i3) contrib_ode(eqn,y,x);
x
(%o3) [y = log(x) + %c, y = %c %e ]
(%i4) method;
(%o4) factor
以下の例の二番目の解のように、 非線形ODEは積分定数を持たない特異解を持ち得ます:
(%i1) load("contrib_ode")$
(%i2) eqn:'diff(y,x)^2+x*'diff(y,x)-y=0;
dy 2 dy
(%o2) (--) + x -- - y = 0
dx dx
(%i3) contrib_ode(eqn,y,x);
2
2 x
(%o3) [y = %c x + %c , y = - --]
4
(%i4) method;
(%o4) clairault
以下のODEは
ダミー変数%tを使った
2つのパラメトリック解を持ちます。
この場合、パラメトリック解を操作して、陽解を与えることができます。
(%i1) load("contrib_ode")$
(%i2) eqn:'diff(y,x)=(x+y)^2;
dy 2
(%o2) -- = (y + x)
dx
(%i3) contrib_ode(eqn,y,x);
(%o3) [[x = %c - atan(sqrt(%t)), y = - x - sqrt(%t)],
[x = atan(sqrt(%t)) + %c, y = sqrt(%t) - x]]
(%i4) method;
(%o4) lagrange
以下の例(Kamke 1.112)は、陰解を例示します。
(%i1) load("contrib_ode")$
(%i2) assume(x>0,y>0);
(%o2) [x > 0, y > 0]
(%i3) eqn:x*'diff(y,x)-x*sqrt(y^2+x^2)-y;
dy 2 2
(%o3) x -- - x sqrt(y + x ) - y
dx
(%i4) contrib_ode(eqn,y,x);
y
(%o4) [x - asinh(-) = %c]
x
(%i5) method;
(%o5) lie
以下のRiccati方程式は
変数%uに関する線形二階ODEに変換されます。
Maximaは
新しいODEを解くことができません。
だから、未評価で返されます。
(%i1) load("contrib_ode")$
(%i2) eqn:x^2*'diff(y,x)=a+b*x^n+c*x^2*y^2;
2 dy 2 2 n
(%o2) x -- = c x y + b x + a
dx
(%i3) contrib_ode(eqn,y,x);
d%u
--- 2
dx 2 n - 2 a d %u
(%o3) [[y = - ----, %u c (b x + --) + ---- c = 0]]
%u c 2 2
x dx
(%i4) method;
(%o4) riccati
一階ODEに対して、contrib_odeはode2をコールします。
その後、以下の方法を試します:
因数分解、Clairault, Lagrange, Riccati,
Abel, Lie対称性を使った方法
もしAbel方法が失敗したら、
Lie方法はAbel方程式には試みられませんが、
もしRiccati方法が未解決二階ODEを返したら、
Lie方法が試みられます。
二階ODEに対して、contrib_odeはode2をコールし、その後odelinをコールします。
もしコマンド
put('contrib_ode,true,'verbose)が実行されたら、
長いデバッグトレースとメッセージが表示されます。
Next: Functions and Variables for contrib_ode, Previous: contrib_ode, Up: contrib_ode [Contents][Index]