dsolve - dsolve と Lie symmetry 法
使い方
dsolve(ODE,Lie)
dsolve(ODE, y(x), way=xxx, HINT=[expr1, expr2], int_scheme)
パラメータ
ODE - 常微分方程式
Lie - Lie symmetry 法を最初に用いるときの要求
y(x) - 従変数 ( 自明でない場合に必要となります。 )
way=xxx - ( オプション ) symgen のアルゴリズムを一つだけ使用 : 対称生成子を探す場合は 2, 3, 4, 5, 6, abaco1, abaco2, all, exp_sym, formal, mu, patterns, pdsolve のいずれかを使用
HINT = [e1,e2] - ( オプション ) e1 と e2 は無限小対称生成子の関数形式が可能であることを示す
HINT = [[e1,e2], [e3,e4],...] - ( オプション ) 上記のリスト形式
int_scheme - ( オプション ) fat, can, can2, gon, gon2, dif のうちのいずれか一つ
|
* オプションのパラメータは、単独のもの、接続されているもの、さらに任意のオーダーで与えることが可能です。
|
|
説明
|
|
•
|
与えられた常微分方程式に symmetry 法を使用する場合、最初に dsolve が試みることは与えられた常微分方程式と不変リー群との対応の対称生成子を決定することであり、これは積分、または微分方程式のオーダーを減らすため用いられます。一階常微分方程式の場合、既知の対称性から、このルーチンは ( もし存在するならば ) 特異解の不変式を決定することができます。この方法は、標準的な分類法の大部分 ( より遅い速度となりますが、 ) を補っていますが、その有用性の大部分は非分類な常微分方程式を解くことに関わるものです。すなわち、dsolve のどのような解法のパターンにも合わないような常微分方程式を解く場合において効果的です。
|
•
|
無限小を決定する場合、dsolve は DEtools[symgen] を読み込みます。これらの無限小は常微分方程式を積分する場合に用います。 dsolve には積分による解法が七つあり、それらのほとんどは " Differential Equations: Their solution using symmetries " の H.Stephani による説明、さらに "Symmetries and Differential Equations" の G.W. Bluman and S.Kumei による説明の通りです。 dsolve 自身のデフォルトが積分による解法に関わることがありますが、以下に示すようなオプションを与えることで、与えられた解法の使用を強制することが可能となります。積分による解法として利用かのなものは :
|
|
1) 積分因子を作ります ('fat', 一階常微分方程式に対してのみ使用可能となります。) 。
|
|
2) 不変群の正準座標を用いて、常微分方程式のオーダーを減少させます ('can') 。
|
|
3) 二組の (2-D 準代数 ) 無限小を同時に用いて、二階常微分方程式を減少させます ('can2') 。
|
|
4) 第一積分空間の対称生成子の正規形を用いて、構成的に二階常微分方程式を減少させます ('gon') 。
|
|
5) 二組の (2-D 準代数 ) 無限小と第一積分空間の対称生成子の正規形を用いて、二階常微分方程式を減少させます ('gon2') 。
|
|
6) 構成的な不変微分を用います ('dif') 。もしくは、
|
|
7) 2-D 準代数形のペアがない場合、三組の無限小を用いて、二階常微分方程式を減少させます。
|
•
|
積分による 1) と 2) の解法は一階常微分方程式に用いることができ、2) から 7) の解法は二階常微分方程式に用いることができ、さらに 2) の解法は高階常微分方程式にも用いることができます。4), 5), 6) の解法は点と力学的な対称性の両方において働きます。この方法は、それらが未知関数の導関数に関わるときの対称性を用いることで、積分すること可能になります。
|
•
|
dsolve/Lie 与えられた常微分方程式の導関数を隔離する最初の試みとして、無限小を用いた symgen の内部のアルゴリズムの ( 与えられた常微分方程式の定義によって ) 制限された部分集合を用いた計算をします。最終的に、前述の積分による解法を適用した後に、他の閉形式の解法を得ることになります。
|
•
|
使用者は、symmetry 法のために dsolve のデフォルトを変更することが可能です。主なオプションは以下のようになります。
|
|
- symmetry 法と無限小を決定する全ての symgen のアルゴリズムのみのために使用する場合、呼び出す際のオプションに 'Lie' を与えてください。
|
|
- symmetry 法を使用したくない場合、オプションに 'class' を与えてください。
|
|
- 無限小を決定する全ての symgen のアルゴリズムに対する要求は、オプションとして 'way=all' となる方程式を与えてください ( 'Lie' と同様になります。詳細は symgen をご参照ください。 ) 。
|
|
- 無限小を決定する symgen のアルゴリズムの一つだけを使用したい場合、'way=xxx' となる方程式を与えてください。ただし、xxx は 2, 3, 4, 5, 6, abaco1, abaco2, all, exp_sym, formal, mu, patterns, pdsolve のいずれかとなります。同じ常微分方程式に異なる symmetry のアルゴリズムを用いる場合の注意として、積分のステップがより簡単になる場合があります。もし Riccati 型の常微分方程式を解くだけならば、オプションの 'way=6' を使用することができます。詳細は symgen をご参照ください。注意として、正式 ( formal ) なアルゴリズムは、全ての点の対称性でそれらが存在しているならば全ての点で計算を実行してしまうので、特別なものとなっています。
|
|
- 与えられた常微分方程式を積分で解く解法の多くは、実行するために、無限小を得た後に任意のオーダーで、以下のオプションを与えることになります。: fat, can, can2, gon, gon2, dif 。これらのオプションは積分による解法にとって最適なものを選ぶ必要があります。
|
|
- 無限小の可能である関数形式を示すには、オプションの HINT=[e1,e2] を使用します。このオプションは解法がうまくいかないときや、与えられた常微分方程式の代数的な規則と対称生成子との関係を研究する際に、貴重なものとなります。
|
•
|
HINT=[e1,e2] オプションは以下に従って使用することがでkます。
|
|
HINT=[e1,e2], 無限小を e1 と e2 として用いるべき解法を示すことができます。e1 と e2 から二つの関数の最大値を得ることができます。
|
|
HINT=[e1,`+`], e1 は最初の無限小 xi を得るための推測となります。`+` は解法に用いる二つの一変数関数としての無限小 eta に関するオーダーを決定します。これらは独立変数と従属変数に依存しています。
|
|
HINT=[e1,`*`], 前述のような場合で働きますが、これらの積で表される二つの関数によって取り替えられることがあります。
|
|
HINT=[[e1,e2], [e3,e4],...], から [e1,e2], [e3,e4], ... まで。これは、上記の任意の形式で使うことができます。
|
•
|
最終的に、三つのグローバル変数が解法の過程を管理しています。これらは内部のルーチンで自動的に設定されますが、ユーザは自由にそれらの値を割り当てることができます。これらは {`ODEtools/dgun`, `ODEtools/ngun`, `ODEtools/sgun`} の三つからなり、設定するためには多項式の最大次数 ( dgum ) 、無限小の準備、もとの常微分方程式の準問題の最大値 ( ngum ) の写像、さらに準問題の最大サイズ ( sgum ) が必要となります。
|
|
注意 : way=formal を含む dsolve を使用する場合、これらの三つ {`ODEtools/dgun`, `ODEtools/ngun`, `ODEtools/sgun`} の変数の値は対称性の計算には影響を与えません。
|
•
|
デフォルトでは、変数 `ODEtools/dgun` は symgen を呼び出す際に与えられた常微分方程式によって、集合として自動的に得られます。ところが、`ODEtools/ngun` と `ODEtools/sgun` は、1 が割り当てられています。`ODEtools/dgun` の値の増加は、多項式係数の常微分方程式の場合で特に助けとなります。もし `ODEtools/ngun` か `ODEtools/sgun` の変数の値を操作した場合、アルゴリズムの性能を下げることになるかもしれません。しかしながら、一つのユニットの増加は、幾何学的な解法の過程を遅くすることが可能となります。
|
|
E.S. Cheb-Terrab, L.G.S. Duarte and L.A.C.P. da Mota, "Computer Algebra Solving of First Order ODEs Using Symmetry Methods", Computer Physics Communications, 101 (1997): 254.
|
|
E.S. Cheb-Terrab, L.G.S. Duarte and L.A.C.P. da Mota, "Computer Algebra Solving of Second Order ODEs Using Symmetry Methods", Computer Physics Communications, 108 (1997): 90.
|
|
|
例
|
|
三つの一階常微分方程式
Riccati 型の常微分方程式 :
>
|
ode[1] := diff(y(x),x)=(y(x)-x*ln(x))^2/(x^2) + ln(x);
|
| (2.1) |
上記の方程式 ode[1] の積分に正準座標を用いた場合 :
| (2.2) |
一般的な常微分方程式の族は以下のように方程式 ode[1] の対称性をもつことが知られています。詳細は DEtools[equinv] をご参照ください。
>
|
ode[2] := diff(y(x),x)=F((y(x)-x*ln(x))/x) + ln(x);
|
| (2.3) |
| (2.4) |
この解は _F := u -> u^2 とした際に、ode[1] の解が増加します。
>
|
ode[3] := diff(y(x),x)=(x+cos(exp(-x)*(1+x)+exp(y(x))))/(exp(x+y(x)));
|
| (2.5) |
ode[3] に対する無限小は、HINT オプションを用いることで得ることができます。
| (2.6) |
>
|
symgen(ode[3],HINT=[f(x),x*g(y)]); # using the HINT option
|
| (2.7) |
この場合、'f(x)' は exp(x) として、g(y) は exp(-y) として 決定されます。この HINT オプションは、dsolve によって直接与えることができます。symgen と得られた無限小を用いることで以下のようになります。:
>
|
dsolve(ode[3],HINT=[f(x),x*g(y)]); # using the HINT option
|
| (2.8) |
三つの二階常微分方程式
>
|
ode[4] := diff(y(x),x,x) =
1/x^2*(diff(y(x),x)^2*x^2-2*y(x)*diff(y(x),x)*x+y(x)^2);
|
| (2.9) |
| (2.10) |
>
|
ode[5] := diff(y(x),x,x)*diff(y(x),x)*y(x)*x^6 - 2*diff(y(x),x)^3*x^6
+ 2*diff(y(x),x)^2*y(x)*x^5+y(x)^5;
|
| (2.11) |
方程式 ode[5] に用いる三組の無限小は以下となります。 :
>
|
sym[2] := symgen(ode[5]);
|
| (2.12) |
第一積分空間の正規形を用いることで解を得ることができます ( オプションは gon2 を使用します。 ) 。用いた無限小の生成子は以下のようになります。
>
|
ans[gon2] := dsolve(ode[5],gon2);
|
| (2.13) |
正式なアプローチと二つの対称性を同時に用いた有理常微分方程式の解 :
>
|
ode[6] := diff(y(x),x,x)+(y(x)-9/x)*diff(y(x),x)-y(x)^3-3*y(x)^2/x+21*y(x)/x^2=0;
|
| (2.14) |
>
|
ans[6] := dsolve(ode[6], way=formal, can2, implicit);
|
| (2.15) |
上記では、way=formal を用いずに同じ解を得ることができましたが、その他 ( この場合では失敗するような ) の解法では最初の試みと解法の過程に更なる時間を費やすことになります。
高階常微分方程式
非線形五階常微分方程式の例 ( Kamke's book の 17 番をご参照ください。 ) を正準座標を用いてオーダーを減少させて解きます。
>
|
ode[7] := 9*diff(y(x),x,x)^2*diff(y(x),x,x,x,x,x)
-45*diff(y(x),x,x)*diff(y(x),x,x,x)*diff(y(x),x,x,x,x)+40*diff(y(x),x,x,x);
|
| (2.16) |
>
|
ans[7] := dsolve(ode[7],Lie);
|
| (2.17) |
暗黙、もしくは自明な解は、 odetest を使用することで確認することができます。
>
|
map(odetest,[ans[7]],ode[7]);
|
| (2.18) |
|
|
参照
|
|
DEtools[buildsym], DEtools[canoni], DEtools[equinv], DEtools[odeadvisor], DEtools[symgen], DEtools[transinv], diff, odetest, dsolve, dsolve,ICs, dsolve,inttrans, dsolve,numeric, dsolve,series, dsolve,system
|
|