PDEtools[FunctionFieldSolutions] - 連立(微分)方程式系の関数体の解を計算
|
使い方
|
|
FunctionFieldSolutions(PDESYS, DepVars, options=value)
|
|
パラメータ
|
|
PDESYS
|
-
|
方程式、またはその集合かリスト。PDE(偏微分方程式)、ODE(常微分方程式)、非微分方程式、不等式を含むことができます。
|
DepVars
|
-
|
(オプション)必要な場合も。関数またはその集合。問題の従属変数。
|
ivars = ...
|
-
|
(オプション)名前かその集合。通常、未知数の依存関係 DepVars にない追加の独立変数。
|
mathfunctiondegree = ...
|
-
|
(オプション)非負整数、または左辺が未知数(DepVars)のひとつで右辺が非負整数あるような方程式の集合。解に含まれる数学関数に関する次数の上限を指定。
|
numberofsolutions = ...
|
-
|
(オプション)非負整数、またはキーワード all。所望の多項式解の数を指定。デフォルトは all (ただし上限が degree)。
|
orderofderivatives = ...
|
-
|
(オプション)非負整数、または左辺が未知数(DepVars)のひとつで右辺が非負整数あるような方程式の集合。解に含まれる導関数の階数の上限を指定。
|
polynomialdegree = ...
|
-
|
(オプション)非負整数、または左辺が未知数(DepVars)のひとつで右辺が非負整数あるような方程式の集合。解に含まれる有理式の次数の上限を指定。
|
polynomialdependency = ...
|
-
|
(オプション)非負整数、その範囲、名前、名前の集合のうちの何れか、または前記の物の何れかを含む集合またはリスト。解の依存関係。
|
simplifier = ...
|
-
|
(オプション)デフォルトの代わりに使用すべきシンプリファイア simplify/size
|
|
|
|
|
説明
|
|
•
|
DepVars に対する方程式系(非等式や非微分方程式を含んでもよい)である PDESYS が与えられたとき、FunctionFieldSolutions は、PDESYS とその導関数の数学関数についての多項式となり、その係数が独立変数についての多項式となるような解を計算します。独立変数は通常 DepVars が依存している変数ですが、その他 ivars = ... でオプションとして指定されたものがあればそれも含みます。
|
•
|
DepVars が与えられていない場合、FunctionFieldSolutions は、PDESYS の微分された未知関数全てを未知数として扱います。一方、DepVars を指定した場合、別の方法で未知数を制限できる他、 PDESYS で微分された形で現れない未知数をも指定することができます。
|
•
|
FunctionFieldSolutions は、PDESYS に入っている数学関数とその導関数に対する解の次数の上限を計算する際、PolynomialSolutions で使用されている発見的手法を改良したものを用います。解に現れる PDESYS の数学関数の導関数の微分階数は、PDESYS の方程式の最大微分階数に等しくなります。これら数学関数とその導関数の係数もまた独立変数に関する多項式であり、その次数は UpperBounds となります。
|
•
|
オプションのキーワードを記憶しておかなくても良いように、キーワードのスペルの入力を誤った場合、または、キーワードの一部しか入力しなかった場合でも、正しいキーワードに対する一致検索が実施されます。一致候補が 1 つだけの場合、入力は自動的に修正されます。
|
|
|
オプション
|
|
FunctionFieldSolutions の計算動作は、幾つかのオプション引数を用いて問題の性質や利用者の要求に従い、デフォルト動作から望ましいものに変えることができます。
•
|
dependency = name | nonnegint | range(nonnegint) | set(name) | list(name), <or a set or list of any of the previous types>
|
|
このオプションを用いると、問題に対する独立変数を、問題の未知数である DepVars に入る関数の依存関係に現れないものであっても指定できます。ivars = ... を用いて指定した変数以外にも、問題の未知数の依存関係に現れる変数は全て独立変数とみなされます。
|
•
|
mathfunctiondegree = nonnegint
|
|
デフォルトとして、PDESYS の数学関数とその導関数についての解における次数の上限が、PDEtools:-Library:-UpperBounds に基づく内部ルーチンにより決定されます。また、オプションとして引数 mathfunctiondegree = n (ただし n は非負整数でゼロも可能)を渡すことでこの上限を設定することもできます。
|
•
|
numberofsolutions = nonnegint
|
|
右辺は、FunctionFieldSolutions がプロセスを中断し見つかった解を返すまでに計算しようとする解の数を指定する正の整数。デフォルトの動作として、使用する次数の上限、あるいはユーザが degree のオプションにより指定した次数の上限内で計算できる最大数の多項式解を計算します。
|
•
|
orderofderivatives = nonnegint
|
|
デフォルトとして、試みる解は PDESYS に出てくる数学関数と、その導関数(PDESYS の方程式に見られる最大微分階数まで)についての多項式です。オプションとして、引数 orderofderivatives = n (ただし n は非負整数でゼロも可能)を渡すことで PDESYS の数学関数の導関数の最大微分階数を指定することもできます。
|
•
|
polynomialdegree = nonnegint
|
|
デフォルトとして、解に入る数学関数のべき乗にかかる係数となる独立変数の多項式次数の上限は、PDEtools:-Library:-UpperBounds に基づく内部ルーチンにより決定されます。また、オプションとして引数 polynomialdegree = n (ただし n は非負整数でゼロも可能)を渡すことでこの上限を設定することもできます。
|
•
|
dependency = name | nonnegint | range(nonnegint) | set(name) | list(name), <or a set or list of any of the previous types>
|
|
このオプションは、数学関数の係数として解に現れる多項式の依存関係を幾つか異なった方法で制限するのに有用です。dependency = n (非負整数)のときは、n 個の異なる独立変数(の置換)に依存する多項式解だけが計算されます。dependency = n..m、 すなわち n から m までの範囲のとき、k 個の変数(ただし k は n..m の範囲内)の置換に依存する解だけが計算されます。また、rhs (右辺)を、それぞれ所望の依存関係を含んだリストの集合として指定することで、どの変数のどの置換を多項式解の依存関係とするかを指定できます。(例、独立変数が x、y、z、のときは dependency = {[x, y], [x, t], [y, t]} と指定できます)
|
|
右辺は、デフォルトの simplify/size の代わりに使用すべきシンプリファイアを指定します。このオプションの用途は、解を simplify (簡単化)することだけではありません。シンプリファイアとして、どのようなプロシージャでも指定することができます。このことを利用し、FunctionFieldSolutions で計算した解を返す前に完全に望みの方法で後処理することができます。(例、いくつかの解を捨てる、解により異なる処理、等)
|
|
|
互換性
|
|
•
|
PDEtools[FunctionFieldSolutions] コマンドは Maple 15 より導入されました。
|
|
|
例
|
|
数学関数 を含む関数 () についての線形系を考えます。
| (6.1) |
>
|
sys[1] := {-diff(F(x,y),y)+diff(F(x,y),x) = -exp(x)+1/y+exp(x)*y+1/x, -diff(G(x,y),y)+diff(G(x,y),x) = -exp(x)-1/y+exp(x)*y+1/x};
|
| (6.2) |
通常このタイプの系は多項式解は持たず、関数場の解を持つことが多くなります。
>
|
PolynomialSolutions(sys[1]); # returns NULL
|
>
|
sol[1] := FunctionFieldSolutions(sys[1]);
|
| (6.3) |
解の確認
>
|
pdetest(sol[1], sys[1]);
|
| (6.4) |
この例の場合 pdsolve で計算できる一般解と比較してみましょう。
| (6.5) |
次の系は と似ていますが、非線形項を持ち pdsolve で解を計算することはできません。
>
|
sys[2] := {-F(x,y)*diff(F(x,y),y)+diff(F(x,y),x) = -F(x,y)*(exp(x)-1/y)+exp(x)*y+1/x, -F(x,y)*diff(G(x,y),y)+diff(G(x,y),x) = -F(x,y)*(exp(x)+1/y)+exp(x)*y+1/x};
|
| (6.6) |
>
|
sol[2] := FunctionFieldSolutions(sys[2]);
|
| (6.7) |
>
|
pdetest(sol[2], sys[2]);
|
| (6.8) |
次の非線形系も pdsolve で解くことはできず、FunctionFieldSolutions による解も計算時間がかかります。このような場合、解に現れる数学関数の次数を制限するためのオプション引数を利用すれば計算時間を大幅に短縮することができます。
>
|
sys[3] := {-F(x,y)*diff(F(x,y),y)+diff(F(x,y),x) = -F(x,y)*(exp(x)-1/y*exp(x/y))+exp(x)*y+exp(x/y)/x, -F(x,y)*diff(G(x,y),y)+diff(G(x,y),x) = -F(x,y)*(exp(x)+cos(x*y)/y)+exp(x)*y+cos(x*y)/x};
|
| (6.9) |
>
|
sol[3] := FunctionFieldSolutions(sys[3], mathfunctiondegree = 1);
|
| (6.10) |
>
|
pdetest(sol[3], sys[3]);
|
| (6.11) |
|
|