dsolve - 連立常微分方程式 ( ODEs ) の完全解を求める
使い方
dsolve(ODE_sys, optional_1, optional_2,...)
パラメータ
ODE_sys - 連立常微分方程式 ; 不等式を含むことが可能です
optional_i - ( オプション ) 任意のオーダーで与えることができ、以下の説明に従います
funcs - 不定の関数、またはそれらの名前の集合かリスト - ランク付けが可能です
explicit - 連立非線形方程式の場合に現れる集合の合成に対する要求
useInt - 解に用いるイナート積分に対する要求
singsol=false - 方程式系が非線形である場合、特異解の計算は避けてください
mindim=N - 解空間の次元が N より小さい場合、解の計算は避けてください
parameters=P - P は名前の集合かリスト、または順序が他の変数よりも低い解の変数の関数
rif - 連立非線形常微分方程式の微分消去ステップに関しては、DEtools[Rif] パッケージを使用してください
|
説明
|
|
•
|
代数則と不等式を含む常微分方程式を与えると、dsolve は次の場合において完全解を返します。1) 方程式系を分離させることに成功した場合。2) 単独の常微分方程式を解くための dsolve のルーチンが、方程式系を分離する過程で生じたそれぞれの常微分方程式を解くことに成功した場合。ただし、方程式系の複雑性によりステップ 2) が完全にうまくいくとは限りません。しかしながら、方程式系が定常的であるときは、常にステップ 1) が系統的であり、未知変数とそれらの導関数に関する有理方程式系は分離可能です ( コンピュータの利用可能なメモリの量までとなります ) 。
|
|
未知変数の有理連立常微分方程式 : 解法の過程
|
|
|
自然な微分代数消去の本質は、この最初のステップがいつも次のような ( ことによると多くの ) 常微分方程式、または代数方程式を生成することです。
|
|
- それぞれの常微分方程式と代数方程式の非特異解の組は、もとの連立常微分方程式の一般解と特異解の集合に等しくなります。
|
|
- もとの常微分方程式が準定義されなければ、ステップ 1 で生じる常微分方程式の一つは、唯一の未知変数によって定まります。
|
|
2. 唯一の未知変数で定まった常微分方程式が解ければ、その未知変数を他の常微分方程式に代入することで取り除くことができます。自然な微分消去の過程は、当然、この一つの未知変数を取り除いた後に、別の唯一の変数から定まる常微分方程式が得られることになります。
|
|
ステップ 2 は、ステップ 1 で得られた全ての常微分方程式を解くまで繰り返します。この結果、もとの連立常微分方程式の解を得ることができます。
|
|
|
出力
|
|
•
|
連立線形常微分方程式で成功した場合、dsolve は独立変数で表された全ての未知変数を含む一つの解の集合 (sets) を返します。
|
•
|
連立非線形常微分方程式の場合、dsolve はデフォルトでは、( もしあるならば ) 特異解を含む解の列を返します。これらの特異解は、( 積分定数 _Cn が現れる ) 解空間の次元が一般解の次元より低いという事実によって特定することができます。
|
•
|
非線形の場合、それぞれの解は方程式系の各々の ( ことによると多くの ) 未知変数を見つけるための解を含んだ集合の要素のリスト (list) として返されます。最初の集合は独立変数に関する一つの未知変数の解を含むリストの中に現れます。次の集合は最初に解かれた未知変数と独立変数に関する他の未知変数で表されます。詳細は例をご参照ください。このように、解を可能な限り簡潔な形で表すことで、解法の簡単な解析を可能にします。ただし、解法のオーダーに依存しているため、解の形式は全く異なっている場合があることに注意してください。
|
•
|
dsolve が二番目のステップ、または最初のステップでさえうまくいっているならば、得られる解の形は各々の集合が独立変数を右辺に含んでいるような解の形で、全ての未知変数を含んでいる集合の列、または簡潔な解の形として影響を受けます。このような簡潔な解の形を得るためには、dsolve にキーワードを加えてください。ただし、この形で表された解はどのようにして方程式系を分離、または解いたのかは示せず、上記にあるような通常の解の形よりはるかに大きく現れることに注意してください。簡潔な解の形は、より高度な簡略化と積分の過程が関わるため、より多くの時間が顕著にかかることがあります。
|
•
|
dsolve が部分的にうまくいっているならば、それぞれの " 解のリスト " の要素は集合かリストのどちらかとなります。この集合は、リストに未解決の微分方程式が含まれている間は、解を含んでいます。より簡単に解ける可能性があるため、これらの部分的な解を持つことには価値があります。例えば、未解決の方程式の数がより少ないかもしれないし、微分のオーダーがより低いかもしれません。これらに関しましては、例をご参照ください。
|
|
|
未知変数とランク
|
|
•
|
デフォルトでは、連立常微分方程式のみが与えられた場合、dsolve は未知変数の方程式系に関する全ての未知変数を提示することを考えます。これらは解の変数と呼ばれます。このデフォルトは、解の変数を未知関数の名前 ( 例えば {f, g, ...}) 、または未知関数 ( 例えば {f(x), g(x), ...}) の集合 (set) かリスト (list) として指定した dsolve によって、変更することができます。
|
•
|
解の変数が集合 (set) としての未知変数とそれらの導関数で表された有理連立常微分方程式に対し、方程式系を分離するための dsolve によるオーダーの選択は、 PDEtools[casesplit] の三角化のコマンドを実行することで選ぶことができます。解の変数が [f, g, h] のようなリスト (list) として与えられた場合、分離のオーダーは、h のみからなる常微分方程式、他の常微分方程式の中で {g, h} のみからなるもの、さらに別の常微分方程式の中で {f, g, h} のみからなるものから得ることができます。このような三角化がうまくいかない場合、dsolve は h のみの常微分方程式を最初に解き、次に {g,h} (h のみの常微分方程式が未解決でも、h は既知であるとして ) からなる方程式を解き、最後に {f, g, h} ( 同様に {h, g} は既知であるとして ) からなる方程式を解きます。
|
•
|
未知変数の " 解のオーダー " の概念は、微分代数の " ランク " の概念 ( ランクに関しては rifsimp[ranking] をご参照ください。) と同様のものとなります。事実上、dsolve による " 解のオーダー " への指摘は、diffalg や DEtools[Rif] などのパッケージの一つを使用したときの " ランク " と同様に、より詳述することができます。例えば、未知変数が [{f, g}, h, {j, k}] として与えられた場合、f は g より ( または反対に ) 優先されて h は三番目にランク付けされるか、そして j が k より優先されるかを dsolve は決定します。この柔軟性は、連立非線形常微分方程式を解く上で非常に役立つことになります。それは、解のオーダーが微小に変化するところでは微分の形をしているが、そうでないところでは (dsolve において ) 非可解であるような問題の解法などに見られます。
|
•
|
解の変数を示すか上記のような解のオーダーの選択に加え、オプションとして parameters=P を一つ使用することができます。この P は、低い演繹的な解の変数の集合かリストとなり、この意味はこれらがいつも上記で説明された解の変数のリストの最後に表れるということになります。P がリストとして与えられた場合、特定のオーダーを選ぶためのルールは、ちょうど上記の解の変数で説明されたものとなります。
|
|
|
未知変数の非有理連立常微分方程式
|
|
•
|
非有理な未知変数に依存している方程式系を解くために用いるスキームは、以下に従ってまとめられています。
|
|
1) 方程式系の全体は、それぞれの準方程式系の中では結合されていて、その他の準方程式系では独立してしているような常微分方程式の準方程式系に分けられます ( 詳細は PDEtools[splitsys] をご参照ください ) 。
|
|
2) それぞれの準方程式系は、他の準方程式系の常微分方程式を用いずとも解けるような準々方程式系を探すことによって解析されます。このステップは、準方程式系の全体が解決するか、どのような準方程式系も存在しなくなるまで繰り返されます。この場合、dsolve はステップ 3) へ進みます。
|
|
3) このステップは、ステップ 2 で扱われた準方程式系を減少させるための、三つの微分代数アルゴリズムからなります。
|
•
|
上記のスキームが成功した場合、互いに分離し、独立した常微分方程式の答えを得ることができます。これは、dsolve がどの関数から実行すべきかを決定する場合などに役立ちます。例えば、最初は f で次に g と決めることができます。これは、二番目の要素 ( 不定の関数 ) として、集合の変わりに ( [f, g] のような ) リストを与えることによって行うことができます。これは、最初の f か g が同等である場合のみ実行されます。
|
•
|
分離された常微分方程式の一つが dsolve によって解けなかった場合、このコマンドは前のものが既に解かれたものとして次の常微分方程式に進みます。そして、解には一つ、または多くの未解決の常微分方程式を含むことになります。
|
•
|
非有理連立常微分方程式の出力に関しては、上記の有理連立常微分方程式と同様のものとなります。
|
|
|
その他のオプション
|
|
•
|
デフォルトでは、連立常微分方程式が非線形である場合の dsolve の出力には、別々の解のリストか集合に方程式系の特異解も含むことになります。このことは、 PDEtools[casesplit] の中で方程式系を分離する場合とそれらを解く場合のどちらにおいても、特異な場合を計算することになります。これらの計算は一般解の計算よりも多くの時間を費やすことになりますが、多くは特異な計算は避けることができます。これは、オプションがこの振る舞いを抑える可能性があることに理由付けられます。オプションに singsol=false を与えることで、これらの特異解は計算せず、全く時間を費やすことはありません。
|
•
|
連立常微分方程式が解けた場合、( 与えた積分定数による ) 解空間の次元は、方程式系の " 見かけの微分の階数 " だけでなく、様々な要素に依存しています。これらのいくつかでは、検討する解が次元の最小値を持っていることがあります。この場合、 N ( 正の整数 ) より小さい次元の解を捨てるため、オプションとして mindim=N を使用します。連立非線形常微分方程式に対するこのオプションは、低次元の場合を計算して解くために全く時間を費やさないので、計算の過程を高速にしてくれるかもしれません。解を一つしか返さないような線形常微分方程式では、もしこの一つの解の次元よりも大きな N を指定してしまうと、dsolve は NULL を返します。
|
•
|
デフォルトでは、dsolve は、連立常微分方程式には DEtools[Rifsimp] パッケージを使用し、非線形方程式系には diffalg パッケージを使用して、全ての微分消去の過程を計算します。このデフォルトは、オプションとして rif または RIF を与えることで換えることができます。独立した連立偏微分方程式の場合、計算には Rif パッケージを使用します。dsolve の出力についての、さらに深い数学的な決まりに関しては、solve, dsolve そして int の使い方に関するページをご参照ください。
|
|
|
|
例
|
|
>
|
PDEtools[declare]( (x,y,z,f,g)(t), prime=t );
|
線形常微分方程式 :
>
|
sys1 := [diff(x(t),t) = y(t), diff(y(t),t) = -x(t)];
|
| (2.2) |
| (2.3) |
上記の線形方程式系に対し、解は独立変数によって表された全ての未知変数を含む一つの集合として返されます。
これらの連立常微分方程式の解が正しい解であるかは、odetest を用いて確認することができます。解が正しいとき、方程式系のそれぞれの常微分方程式に対し 0 を返します。
| (2.4) |
非線型方程式系 :
>
|
sys2 := [diff(f(t),t) = cos(f(t)), diff(g(t),t) = -f(t)^(1/2), diff(h(t),t,t) = g(t)/f(t)];
|
| (2.5) |
| (2.6) |
上記の解のように、g(t) が {t, f(t)} の項で表され、h(t) が {t, g(t), f(t)} で表されているとき、f は t の関数として解かれます。この例では、それぞれの集合が、それぞれの未知変数 {f, g, h} による一つの解のみから得られています。その他の場合、多くの解がそれぞれの集合に現れます。上記の解の一つを選び、odetest を用いれば正しい解であることが確認できます。
| (2.7) |
得られた {f, g, h} を含む解の集合 ( この例で得られた解の集合は一つとなりますが、通常は多くを得ることになります。 ) は、明らかに t の関数として表され、そのうちの一つは以下のようにさらにオプションを加えることで 明らかなもの になります。
>
|
sol22 := dsolve(sys2, explicit);
|
| (2.8) |
いくつか多項式からなる連立非線形方程式について、それらの ( デフォルトで ) 暗黙な解、もしくは簡単な形式で表した解の例 :
>
|
sys3 := {diff(x(t),t)=-x(t)*(x(t)+y(t)),diff(y(t),t)=y(t)*(x(t)+y(t))};
|
| (2.9) |
| (2.10) |
>
|
dsolve(sys3, explicit);
|
| (2.11) |
上記に見れる特異解 ( 一つの積分定数のみからなるもの。 ) の計算は、オプションとして singsol=false を用いることで避けることが可能です。
>
|
dsolve(sys3,singsol=false);
|
| (2.12) |
リスト ( list ) として与える解の変数のオーダーを変えることで、常に出力が異なることに注意してください。
| (2.13) |
| (2.14) |
形式的な解では、解の変数のオーダー [x, y] を指定すると解の三角化は y に対して行われ、 x に対する解は y の関数を用いて表されます。次の例の解は、その反対のものとなります。
>
|
sys4 := {diff(x(t),t)^2+diff(y(t),t)^2=x(t)^2+y(t)^2,diff(y(t),t)/y(t)=diff(x(t),t)/x(t)};
|
| (2.15) |
| (2.16) |
ここに、次元が 2 ({_C1, _C2} に依存している ) である一般解と次元の低い特異解の二つの解から得られる方程式系があります。これらの解はそれぞれ、二つの関数 x か y のうちの一つに対して、異なった値を指定することができます。この例の自明な解は、4 つの簡潔な解の集合として表されます。
>
|
dsolve(sys4, explicit);
|
| (2.17) |
>
|
map(odetest, [%], sys4);
|
| (2.18) |
Kamke's textbook - 22 番 - の例は、二つの特異解と dsolve が部分的にのみ成功している場合で得られた一般解からなります。:
>
|
sys5 := {diff(x(t),t) = 1/2*x(t)^2-1/24*y(t), diff(y(t),t) = 2*x(t)*y(t)-3*z(t), diff(z(t),t) = 3*x(t)*z(t)-1/6*y(t)^2};
|
| (2.19) |
| (2.20) |
上記の例には三つのリストがあり、そのうちの一つは異なった解から得られたものとなります。
|
- 単独の任意定数 _C1 からなる最初のリストは、一次元 ( 1-D ) の特異解となります。このリストは三つの集合からなり、それぞれの集合は独立変数 t の関数として表された未知変数 ( ここでは {x, y, z} のことを指します。 ) の値を一つ含んでいます。
|
|
- 二番目のリストは 、{_C1, _C2} に依存した 2-D の特異解となります。{t, y} で表された x と {t, y, x} の項で解かれた z の二つの値を含んだ集合となる t の項で、y が 解けていることがわかります。
|
|
- 三番目のリストは、連立常微分方程式の 3-D の一般解となります。y は完全に解けたというわけではありませんが、_g(_f) の一階常微分方程式 ( 詳しくは ODESolStruc をご参照ください。 ) として得られます。これは、常微分方程式が完全に解けていないという事実にも関わらず、y(t) を既知と仮定し、{t, y} の関数と {t, y, x} の関数として表現された z を用いて表された x を得ることができます。
|
|
部分的に成功している出力の値は、二つの解 (1 次元と 2 次元の特異解 ) の結合と単独の一階常微分方程式の解から得られる一般解から決定されます。もし、常微分方程式のままであるような解が得られたならば、完全な積分形式の一般解を得るために buildsol を使用することができます。
|
•
|
上記のような、さらなるオプションを加えた dsolve を使った例では、全ての未知変数を含む解の集合の列が含まれているリストは得られますが、上記のように部分的に成功しているリストは残ります。
|
|
|
参照
|
|
casesplit, dchange, dsolve, DEtools, DEtools,rifsimp, diffalg, dsolve, int, odetest, pdetest, PDEtools, PDEtools[declare], PDEtools[dpolyform], PDEtools[splitsys], pdsolve,system, Rif, solve
|
|
参考文献
|
|
|
Cheb-Terrab, E. S. "A Computational Approach for the Exact Solving of Systems of Partial Differential Equations." submitted to Computer Physics Communications, (2001).
|
|
|