| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
| 45.1 Introduction to contrib_ode | ||
| 45.2 Functions and Variables for contrib_ode | ||
| 45.3 Possible improvements to contrib_ode | ||
| 45.4 Test cases for contrib_ode | ||
| 45.5 References for contrib_ode |
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
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)を実行したら
長いデバッグトレースとメッセージが表示されます。
Categories: Differential equations ·Share packages ·Package contrib_ode
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
独立変数 xと従属変数 yに関する ODE eqnの解のリストを返します。
Categories: Package contrib_ode
odelinは独立変数 xと従属変数 yに関する一階および二階線形斉次
ODEを解きます。
ODEの基本的な解一式を返します。
二階 ODEに対して odelinは、与えられた特殊関数を使って解を探索する
Bronsteinと Lafailleによる方法を使います。
(%i1) load('contrib_ode);
(%i2) odelin(x*(x+1)*'diff(y,x,2)+(x+5)*'diff(y,x,1)+(-4)*y,y,x);
...trying factor method
...solving 7 equations in 4 variables
...trying the Bessel solver
...solving 1 equations in 2 variables
...trying the F01 solver
...solving 1 equations in 3 variables
...trying the spherodial wave solver
...solving 1 equations in 4 variables
...trying the square root Bessel solver
...solving 1 equations in 2 variables
...trying the 2F1 solver
...solving 9 equations in 5 variables
gauss_a(- 6, - 2, - 3, - x) gauss_b(- 6, - 2, - 3, - x)
(%o2) {---------------------------, ---------------------------}
4 4
x x
|
Categories: Package contrib_ode
可能な解 solnを代入した後、 ODE eqnの値を返します。 もし solnが eqnの解なら値はゼロと同値です。
(%i1) load('contrib_ode)$
(%i2) eqn:'diff(y,x,2)+(a*x+b)*y;
2
d y
(%o2) --- + (a x + b) y
2
dx
(%i3) ans:[y = bessel_y(1/3,2*(a*x+b)^(3/2)/(3*a))*%k2*sqrt(a*x+b)
+bessel_j(1/3,2*(a*x+b)^(3/2)/(3*a))*%k1*sqrt(a*x+b)];
3/2
1 2 (a x + b)
(%o3) [y = bessel_y(-, --------------) %k2 sqrt(a x + b)
3 3 a
3/2
1 2 (a x + b)
+ bessel_j(-, --------------) %k1 sqrt(a x + b)]
3 3 a
(%i4) ode_check(eqn,ans[1]);
(%o4) 0
|
Categories: Package contrib_ode
変数 methodは成功した解法に設定されます。
Categories: Package contrib_ode
%cは一階 ODEの積分定数です。
Categories: Package contrib_ode
%k1は二階 ODEの最初の積分定数です。
Categories: Package contrib_ode
%k2は二階 ODEの二番目の積分定数です。
Categories: Package contrib_ode
gauss_a(a,b,c,x)と gauss_b(a,b,c,x)は 2F1幾何関数です。
それらは超幾何微分方程式
x(1-x) diff(y,x,2) + [c-(a+b+1)x] diff(y,x) - aby = 0
の任意の2つの独立解を表します (A&S 15.5.1)。
これらの関数は
odelinと contrib_odeが返す ODEの解の中でだけ使われます。
これらの関数の定義と使用は Maimaの将来のリリースで変わるかもしれません。
gauss_b, dgauss_a, gauss_bも参照してください。
Categories: Package contrib_ode
gauss_aを参照してください。
Categories: Package contrib_ode
gauss_a(a, b, c, x)の xに関する導関数。
Categories: Package contrib_ode
gauss_b(a, b, c, x)の xに関する導関数。
Categories: Package contrib_ode
Abramowitz and Stegun, Handbook of Mathematical Functions, Section 13.1.2の中で定義される Kummerの M関数
この関数は
odelinと contrib_odeが返す ODEの解の中でだけ使われます。
この関数の定義と使用は Maimaの将来のリリースで変わるかもしれません。
kummer_u, dkummer_m, dkummer_uも参照してください。
Categories: Package contrib_ode
Abramowitz and Stegun, Handbook of Mathematical Functions, Section 13.1.3の中で定義される Kummerの U関数
kummer_mを参照してください。
Categories: Package contrib_ode
kummer_m(a, b, x)の xに関する導関数。
Categories: Package contrib_ode
kummer_u(a, b, x)の xに関する導関数。
Categories: Package contrib_ode
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
これらのルーチンは開発進行中です。まだ以下をする必要があります:
ode1_factorを多重根で機能するように拡張すること。
ode1_factorをより高次因子を解こうとするように拡張すること。
現在、線形因子を解こうとするだけです。
ode1_lagrangeを複素根より実根を優先するように直すこと。
ode1_lieに関する仕事。
2,3の相当な問題があります:
いくつかの部分が未実装です;
いくつかのテストケースが無限ループのようです;
他のテストケースではクラッシュします;
さらに他では非常に複雑な「解」を返します。
本当にリリースの準備ができていたか疑っています。
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
ルーチンは 文献 Murphy, Kamke, Zwillinger他からのおおよそ千のテストケース上でテストされています。 これらはテストサブディレクトリに含まれています。
ode1_clairaultは特異解を含み、
Murphyと Kamkeの中の Clairault方程式の知られている解すべてを見つけます。
ode1_lieの「解」のいくつかは過度に複雑でチェックが不可能です。
| [ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
| [ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は市川 雄二によって2014年4月月20日にtexi2html 1.82を用いて生成されました。