pdsolve - 偏微分方程式 (PDEs) および連立偏微分方程式の解を求める
使い方
pdsolve(PDE, f, HINT = hint, INTEGRATE, build)
pdsolve(PDE_system, funcs, HINT, other_options)
pdsolve(PDE_or_PDE_system, conds, type=numeric, other_options)
パラメータ
PDE - 偏微分方程式
f - 不定関数または名前 ; 多くの微分された関数が存在する場合に必要となります
hint - ( オプション ) HINT = hint の右辺であり、hint は `+`, `*` の一つか、キーワード strip および TWS の一つ、構文 TWS(math_function_name) 、あるいは未知関数に関わる任意の代数式のいずれかとなります。
INTEGRATE - ( オプション ) PDE が変数分離法によって解かれた場合にわかる ODEs の集合の自動積分を示します
build - ( オプション ) 見つけた解の一般性が何であろうと、不定関数のための簡潔な式を構成しようと試みます
PDE_system - 連立偏微分方程式 ; 不等式を含むことができます
funcs - ( オプション ) 不定関数または名前を含んだ集合かリスト
other_options - 連立 PDE を正確に解く場合、casesplit コマンドで応じる全てのオプションは pdsolve によって受け入れられます
PDE_or_PDE_system - 偏微分方程式または連立偏微分方程式 ; 不等式を含むことができます
conds - 初期条件または境界条件
type=numeric - 方程式 ; 数値解を要求することを示します ; キーワード numeric は全ての方程式の代わりにしようすることができます
|
* オプションは一つ、または順不同に接続して与えることができます
|
|
説明
|
|
•
|
最初の二つの呼び出し手順、すなわち、与えられた PDE、あるいは連立 PDEs 、ことによると ODEs 、代数的規則、そして不等式に関して、pdsolve 関数の主な目的は解析解を見つけることにあります。これらは、微分の階数、あるいは pdsolve が解こうと試みることができる PDEs または連立 PDE の従変数および独立変数の個数に全く制限されません。
|
•
|
残る二つの呼び出し手順に関して、pdsolve は入力した PDE または 連立 PDE の数値解を見つけます。pdsolve のこのような使用方法や、数値的に解けるような PDE の型、そして任意の numeric-specifif についての詳細は pdsolve/numeric をご参照ください。
|
•
|
このページの以下では、単独の PDE を完全に解く解法に関して議論します。連立 PDE を完全に解く解法のヘルプは pdsolve/system をご参照ください。
|
単独の PDE を解く
•
|
pdsolve コマンドは、標準的な計算法で解ける PDE の族の数を見つけます。与えられた PDE が認識されていない族のものであった場合、pdsolve は発見的なアルゴリズム、すなわち PDE の指定された構造に基づいて変数分離を行う方法を使用します。
|
•
|
pdsolve を使用する戦略としては、与えられた PDE の最も一般的な解を見つけるため、あるいは最悪な場合、完全な変数分離を見つけるために使用します。したがって、うまくいった場合のコマンドは以下のうちの一つを返すことになります :
|
|
- 疑似の一般解 ( 任意の関数を含むが、十分な数を含むわけではなく、あるいは一般解を構成することができるほどの変数をもたないような解 )
|
|
- 分離した全ての変数を含む分離された ODEs の集合、あるいは ( オプションの INTEGRATE が指定された場合 ) この集合を積分して得られた完全な解
|
•
|
不完全な変数分離となった場合、関数は再び自身を呼び出し ( より小さい問題を含みます ) 、ことによると解の異なった計算法を使用することになります。もし、より小さい問題を解けなかった場合は、不完全な ( 警告メッセージを含んだ ) 変数分離を返します。
|
•
|
デフォルトの pdsolve の結果は、三つの形式の一つで返されます。
|
|
a) PDE の一般解を得た場合、関数は不定関数のために簡潔な結果を返します。
|
>
|
PDE := x*diff(f(x,y),y)-y*diff(f(x,y),x) = 0;
|
| (1.1) |
>
|
pdsolve(PDE); # _F1 is an arbitrary function
|
| (1.2) |
|
b) 解を得たが、最も一般的な解ではなかった場合、pdsolve は内部の PDESolStruc 関数を用いて結果を表現し、最初の引数としての不定関数のために見つけた関数形式を含む &where を使用して出力します。二番目の引数は、任意の関数または pdsolve によって導入された変数の変更と同様に、変数を切り離している間に見つかった任意の ODEs からなるリストを含むことになります。PDESolStruc は、ユーザが得られた特殊解を見ることができます。この場合、不定関数、特殊解のための明らかな結果は、build を含んだ pdsolve を呼び出すか、PDEtools[build] のコマンドを使用したこの PDE の解の構造の形式で得ることができます。詳細は例をご参照ください。
|
|
c) pdsolve がうまくいかない場合、NULL を返します。
|
•
|
使用者は環境変数 _EnvBuildPdsolve に 1 または 2 を割り当てることで結果の表現の方法のデフォルトを変更することができます。デフォルトで、_EnvBuildPdsolve には 1 が割り当てられています。_EnvBuildPdsolve に 2 を割り当てた場合、pdsolve は得られた結果の一般性の如何によらず、常に簡潔な解を構築することを試みます。
|
|
引数に関して
|
|
•
|
与えられた PDE が一つ以上の関数の導関数を含んでいた場合、不定関数またはそれらの名前であると考えられるべき関数を、特別な引数として与えられなければなりません。
|
•
|
その他の三つのオプションは以下のものとなります。
|
|
1. 使用者は、得られた解の一般性の如何に関わらず、pdsolve のための build に、簡潔な結果を直接構築するための関数を引き起こすような特別な引数を渡すことができます。
|
|
2. 使用者は INTEGRATE を使用することで、pdsolve が変数分離するときに見つける連立 ODEs の自動積分を要求することができます。
|
|
3. 使用者は、解法または不定関数の形式を表示するために HINT を与えることができます。このとき、hint は pdsolve で解を探す始点としてとられます。このオプションは、pdsolve によって得られた結果が最も一般的な解でなかった場合に著しく役立ち、与えられた PDE の解の有力な候補の詳細な研究を可能にします。
|
•
|
以下の引数は HINT オプションと共に使用することができます。
|
|
このオプションは、sum による変数分離の試みを pdsolve に強制します。
|
|
このオプションは、product による変数分離の試みを pdsolve に強制します。
|
|
このオプションは、xi を独立変数の線形結合とした tanh(xi) のべき級数としての進行波解のみを計算するよう pdsolve に強制します。
|
|
HINT = 'TWS(math_function_name)'
|
|
このオプションは、xi を独立変数といくつかの数学関数の名前に従った math_function_name の線形結合とした math_function_name(xi) のべき級数としての進行波解のみを計算するよう pdsolve に強制します。数学関数の名前は、exp, ln, sin, cos, tan 、これらの逆関数 csc, sec, cot 、対応する六つの双曲線関数 、十二個の Jacobi の楕円関数 、WeierstrassP 関数と identity 関数 x -> x であり、これらが存在している場合には純粋な多項式解を計算するために役立ちます。
|
|
このオプションは、PDE または変数を分離させるために用いる代数式と同等な不定関数による簡単化の試みを pdsolve に強制します。これは pdsolve に関数 hint を与えることが可能であり、例えば、( f(x,y,z) を不定関数として ) HINT=f1(x)/f2(y)^f2(z) のようなものがあります。使用者は不定関数の関数形式のみ示すことができます。このオプションは、例えば HINT=...f1(x,y)...f2(y,z)... のような一つ以上の一変数以上の不定関数の導入を許可しています。
|
|
HINT = strip ( 一階 PDEs に対してのみ )
|
|
このオプションは、特性揮散 (characteristic strip) に関連した解を発見するための試みを pdsolve に強制します。この場合、pdsolve は与えられた PDE と決定された一般解に関連する微分不変量を求めることを試みます。特性揮散が変数としての不定関数の偏導関数による構成空間に必要とされない場合、通常は可能となります。そうでなければ、積分された特性揮散はパラメータ _s の項に関して返されることになります。
|
|
|
仕様
|
|
•
|
pdsolve のルーチンは、常に不定関数のための解を表す新しい関数を導入します。例えば :
|
f(x,y,z)= _F1(x) + _F2(y) + _F3(z)
|
pdsolve によって導入された全ての関数は、_F と任意の数字およびそれらの引数の微分可能な関数から始まっています。
|
•
|
切り離された変数が _c[1], _c[2],..., として大域的に表されている間、任意の定数が導入されます。
|
|
|
|
例
|
|
以下の例は、単独の PDE を解く場合の pdsolve を使用する例証となっています。例えば、連立 PDE を解くことに関連しています。詳細は pdsolve/system をご参照ください。
1. 一階 PDE の一般解 :
>
|
PDE := x*diff(f(x,y),y)-diff(f(x,y),x)=f(x,y)^2*g(x)/h(y);
|
| (2.1) |
| (2.2) |
上記の積分記号については intat をご参照ください。結果は pdetest を使用することで確認することができます。
| (2.3) |
2. 球座標上の Laplace 方程式 :
>
|
PDE := Diff(r^2*diff(F(r,theta,phi),r),r)
+ 1/sin(theta)*Diff(sin(theta)*diff(F(r,theta,phi),theta),theta)
+ 1/sin(theta)^2*diff(F(r,theta,phi),phi,phi) = 0;
|
| (2.4) |
PDESolStruc を用いて表された (&where による表示 ) 解の構造は以下のようになります。
| (2.5) |
F(r,,) のための簡潔な表現の構築には、 PDEtools[build](ans) を用いた試みか、あるいはオプションの引数 build を pdsolve に渡します。また、仮定を使用することが適切な場合もしばしばあり、例えば、0 から pi までの範囲の球体の座標を表す theta を指定することがあります。
>
|
simplify( pdsolve(PDE, build), size) assuming 0 <= theta, theta <= Pi;
|
| (2.6) |
上記では、simplify,size を使用しています。; 解を構築する場合や、いくつかの定因子が任意定数 _C1, _C2, ... の再定義によって再吸収することを明らかにすることを助ける場合などで、これらが役立つ場面が多くあります。
3. Hamilton-Jacobi 型 PDE ( 詳細は Landau, L.D. and Lifshitz, E.M. Translated by Sykes, J.B. and Bell, J.S. Mechanics. Oxford: Pergamon Press, 1969. をご参照ください )
>
|
PDE := -diff(S(t,xi,eta,phi),t) =
1/2*diff(S(t,xi,eta,phi),xi)^2*(xi^2-1)/sigma^2/m/(xi^2-eta^2)
+ 1/2*diff(S(t,xi,eta,phi),eta)^2*(1-eta^2)/m/sigma^2/(xi^2-eta^2)
+ 1/2*diff(S(t,xi,eta,phi),phi)^2/m/sigma^2/(xi^2-1)/(1-eta^2)
+ (a(xi)+b(eta))/(xi^2-eta^2);
|
| (2.7) |
以下は sum による変数分離によって得られた完全な解の構造です。
| (2.8) |
これらの PDE の解の構造は pdetest を使用することで確認することができます。
| (2.9) |
S(t, , , ) の簡潔な表現を構築するためには、build(ans) を試みてください。
4. 二階 PDE と HINT オプション :
>
|
PDE := S(x,y)*diff(S(x,y),y,x) + diff(S(x,y),x)*diff(S(x,y),y) = 1;
|
| (2.10) |
product による変数分離によって得られた詳細な結果
>
|
struc := pdsolve(PDE,HINT=f(x)*g(y));
|
| (2.11) |
S(x,y) の簡潔な表現を得るためには、pdsolve のオプション引数 build を使用するか、あるいは上記の解に PDEtools[build] のコマンドを適用してください。
>
|
PDEtools[build](struc);
|
| (2.12) |
一般解を得るために HINT オプションを使用しすることで、上記の解からいくつかの簡潔な表現についての案を得ます。
>
|
pdsolve(PDE,HINT=P(x,y)^(1/2));
|
| (2.13) |
一般解は、微分の階数 N と PDE の独立変数の個数 K について、N による K-1 変数の任意の関数 _F によって表されます。
5. 非線形一階 PDE を、特性揮散法を使用することで解きます。:
>
|
PDE := diff(f(x,y,z),x) + diff(f(x,y,z),y)^2 = f(x,y,z)+z;
|
| (2.14) |
>
|
pdsolve(PDE,HINT=strip);
|
| (2.15) |
|
|
参照
|
|
dchange, dsolve, intat, pdetest, PDEtools, PDEtools[build], PDEtools[casesplit], pdsolve/numeric, pdsolve/system, splitstrip, strip, TWSolutions
|
|
参考文献
|
|
|
E.S. Cheb-Terrab and K. von Bulow. "A Computational Approach for the Analytical Solving of Partial Differential Equations". Computer Physics Communications 90 (1995): 102-116.
|
|
|