dsolve - 常微分方程式 (ODE) を解く
|
使い方
|
|
dsolve(ODE)
dsolve(ODE, y(x), extra_args)
dsolve({ODE, ICs}, y(x), extra_args)
dsolve({sysODE, ICs}, {funcs}, extra_args)
|
|
パラメータ
|
|
ODE
|
-
|
常微分方程式
|
y(x)
|
-
|
1 つの変数の中間関数で、ODE にこのような関数の導関数が 2 つ以上含まれる場合に必要
|
ICs
|
-
|
初期条件
|
{sysODE}
|
-
|
ODE の系に設定
|
{funcs}
|
-
|
中間関数に設定
|
extra_args
|
-
|
(オプション) 問題の種類によって異なります (後述)
|
|
|
|
|
説明
|
|
•
|
dsolve は一般的な ODE ソルバとしてさまざまな種類の ODE 問題を扱います。以下のような問題です。
|
|
- 初期条件が指定されている ODE または ODE 系の問題 (境界値問題) の解を求める。dsolve, ICs を参照してください。
|
|
単独の ODE では、dsolve は区分法または対称法を使用して求解を試みます。対称法を使用した場合、dsolve はまず、指定の ODE の対称群の生成元を探し、それからこの情報を用いて積分します。あるいは、少なくとも階数を簡約します。区分法は ODE で認識可能なパターンが一致した場合 (つまり、求解法がすでに実装されている場合) で、区分不可能なケースに対して対称法が予約されている場合に使用します。
|
|
次のように指定すると、与えられた ODE 問題を解くのに適した方法を表示することができます (infolevel を参照):
|
•
|
ODE と ODE 系に対する数値解および記号解を得るために、ODE Analyzer という新しい対話型インターフェイスが作成されました。このインターフェイスにはオプションが数多く用意されていて、使い方も簡単です。解や解の値の計算だけでなくプロットも生成できます。このインターフェイスは教育用ツールとして最適で、解やプロットの計算に必要な Maple コマンドを提示することができます。このインターフェイス (およびコマンドラインオプション) を導入する詳細については、 dsolve/interactive を参照してください。worksheet/interactive/dsolve には、このインターフェイスの図解入り説明が記載されています。
|
|
|
入力と出力
|
|
•
|
ODE が与えられると、微分する関数がこの ODE に複数含まれている場合に限り、従属変数を示す追加の変数が必要になります。追加の引数が与えられると、最初の引数の後に、任意の順序で配置できます。ODE は、(微分) 演算子を適用する方法によっても構成できます。ページ末尾の例を参照してください。
|
•
|
警告 : ODE の第 1 引数がセットまたはリストの場合、この要素が 1 つであるか、ODE が casesplit コマンドからの出力であっても、この入力は「ODE 系」として扱われるため、その出力は dsolve,system に示す当該ルールに従います。
|
•
|
ここでは は、独立変数と従属変数の任意の対であることを表します。
|
•
|
高階 ODE の場合、ODE の階数を減らせば dsolve での求解は可能ですが、問題の最終的な解を得ることはできません。その後、階数の簡約を伝達するスキームを使用して解が表示されます (dsolve,ODESolStruc と後述の例を参照してください)。これで DEtools で利用可能なツールを使用するか、級数 展開を行う、あるいは他の方法を使用して簡約された ODE の解を得ることができます。簡約 ODE の解を得ることができたら、元の問題の解についても、DEtools[buildsol] を使用して求めることができます。
|
•
|
線形 ODE では、dsolve で解を導くことができない、または階数を減らすことができない場合、DESol を使用した解が返されます。DESol 構造は、線形 ODE の階数簡約を伴う解にも見られる構造です。DESol 構造には ODE 自体ほどの情報は含まれていませんが、Maple で操作が可能なため、級数展開や簡約など、より高度な数値計算で使用するのに便利です。DESol を参照してください。
|
•
|
dsolve で返される解に含まれる積分は、inert Int および Intat (int や intat ではありません) を使用して表示されます。これらの積分は、int で計算できないか、求解プロセス中にこれらを評価しない方が好都合とされた場合に現れます。これらの積分の評価は value コマンドを使用して再度要求することができます。
|
•
|
指定の ODE に見られる浮動小数点は、求解前に有理厳密数に変換されます。オプションの引数については、後述する convert_to_exact=false を参照してください。
|
•
|
記号変数 (n=整数) は、内部ルーチンで使用するために予約されていて指定できません。
|
|
ODE 解における任意定数、一般解、特殊解、特異解
|
|
•
|
任意定数 (n=整数) を入力すると、dsolve 出力は、独立変数 x に依存するのではなく、任意の算術式を表示できるという意味で 任意 になります。つまり を満たし、有限値に制限されなくなります。任意定数が 無限大 に近づくと、結果の解の実際の形式は limit を使用して得られます。
|
•
|
ODE の一般解は、任意定数と同様に、N などの微分階数との従属関係があります。逆に言うと、N 個の任意定数に従属した解は、 一般解です。ここで N 個の定数に従属するということは、他の N 独立定数については が再定義される可能性がなく、結果の解は N 個より少ない定数の形式を取ることを意味ます。
|
•
|
N 個より少ない任意定数を伴う場合の唯一の解 (任意定数が ODE の一般解に含まれない 可能性がある ) は 特異解 と呼ばれます。非線形 ODE のみ特異解を許容します。特異解の詳細については、essential_components の例題を参照してください。デフォルトでは、dsolve は一般解と非線形 ODE の 事実上の特異解を計算します。後者に相当するのは、いずれの方法で積分定数を特殊化しても解が得られないような特異な解です。
|
|
|
|
オプションの引数
|
|
•
|
IC 問題、ODE 系、級数解や数値解での指定、または積分変換で使用するオプションの引数については、前セクションで該当する各ヘルプページを参照してください。
|
•
|
単独 ODE の場合、オプションの引数は第 1 引数後、任意の順序で指定することができます。次に、代表的なオプション引数の使用法について要約を示します。
|
|
dsolve で解が陽的表現になるのを防ぐ場合に使用します。
|
|
solve で従属変数の分離に成功した場合に、すべての場合で解を陽的にすることを求める場合に使用します。
|
|
単独 ODE の最初の階 (おそらく高階の dy/dx の最初の 1 階) を解く場合にパラメトリックな求解スキームのみ使用するよう要求する場合に使用します。ただし、デフォルトでは dsolve は、求解プロセス中に使用されたパラメータを削除しようとします。パラメータを残しておくために、オプションの引数 'implicit' を 'parametric' とともに指定します。
|
|
この右辺には none、essential、all のいずれかのキーワードを指定し、それぞれ、なにも計算しない、事実上の特異 (デフォルトの動作)、または すべての特異解を計算する指定です。最後の指定には、積分定数を特殊化しても一般解から得ることができない特異解が含まれます。
|
|
求解プロセス中にデフォルトの積分器ではなく、Int (inert 積分) を使用する要求で指定します。このオプションは、多くの場合で求解プロセスの時間短縮に役立ち、積分が終了する前に解を表示することができます (教育上有益です)。後で積分を行うには、dsolve で返された解に value コマンドを適用します。
|
|
求解プロセス中にデフォルトの積分器ではなく、int を使用する要求で指定します。このオプションを指定すると dsolve は、解に含まれるすべての積分の計算を、その有効性の有無にかかわらず試みます。このオプションは、経験則に従った手順で積分を実施することの利便性を判別しても ODE 求解の簡略化につながらないような場合に有効です。
|
|
区分法 (odeadvisor を参照してください) のみ使用し、対称法を使用しないように要求するときに指定します。
|
|
区分法を試みる前に Lie の対称法を使用するよう要求するときに指定します。対称スキームに関する詳細情報や各種の関連オプション引数については、dsolve, Lie を参照してください。
|
|
int_factor_hint で示した形式の積分係数の検索および使用を要求するときに指定します。このオプションには、未知の要素が含まれた の形式の関数か、値を決定すべき記号が含まれる代数式または代数リストが使用できます。int_factor_hint に未知の要素が含まれない場合、mutest による直接検証だけが実施され、ヒントは認証されるかまたは破棄されます。ヒントに未知の要素が含まれる場合、dsolve は Maple の intfactor ルーチンを実行して提示された形式の積分係数の計算を続行してから、自身のルーチンでこの情報を指定の ODE の解に適宜、変換します。下記の例題を参照してください。
|
|
'[method1, method2, ...]'
|
|
指定の ODE の解を得る場合に '[method1, method2, ...]' だけをこの順序で使用する要求をするときに指定します。いずれの方法も、方法のリストにある関連のキーワードで表されます。たとえば、1 階 ODE の場合、利用可能な方法は次のとおりです。
|
| (5.1) |
>
|
`dsolve/methods`[1,'semiclass'];
|
| (5.2) |
>
|
`dsolve/methods`[1,'high_degree'];
|
| (5.3) |
•
|
異なる階で利用可能なすべての細分と方法を表示するには、indices コマンドと entries コマンドを使用できます。現在開発中の方法は、今のところ dsolve で直接的には使用できず、この methods ('[method1, method2,...]') オプションのリストによって明示的に指定する方法でのみ試行できます。
|
|
線形 ODE の場合のみ、解空間に展開する関数のリストとして解を要求する場合に指定します。微分方程式が同次でない場合、dsolve から基底関数と続く単独の特殊解が含まれるリストが返されます。
|
|
浮動小数点の数値が有理厳密数に変換されないようにする場合に指定します。このオプション引数はほとんどの場合に使用可能ですが、ODE の入力内容によっては関連付けられた方法のために処理が低速化する場合があり、ODE 問題の解が得られなくなることがあります。
|
•
|
求解スキームに関係し、dsolve で使用するその他のオプションパラメータについては、dsolve,setup を参照してください。
|
|
|
求解方法
|
|
•
|
あらゆる階の線形および非線形 ODE に対応するために、現在の dsolve の実装では、Kovacic アルゴリズムなどの複数の決定プロシージャと同様、区分法、積分係数法、対称法、等価法 (古典的な不変理論) を組み合わせて活用しています。
|
•
|
ODE で使用するその他のツールは、DEtools パッケージから使用できます。このパッケージには、ODE のプロット用ルーチン、線形 ODE と線形代数演算子の操作用のルーチン、対称法の大部分の手順を実行するためのルーチンなどが含まれています。これらの詳細についてはいずれも DEtools に説明が記載されています。変数の変更については dchange を参照してください。
|
|
特殊関数の解とより簡素な関数の解についての留意点
|
|
|
特殊関数を使用して ODE の解を表す場合、演算上の困難な問題点は、より簡素な関数での表現が特殊関数で許容されるかどうか判断することです。たとえば、超幾何学的な関数 2F1 による解の方が HeunC での表示より好まれたり、Kummer 関数や Bessel 関数ではなく exp (指数関数) による sin で表示する方が好まれる場合があるかもしれません。
|
•
|
環境変数 _Env_dsolve_Abel_AIR_use_simpler_functions を false または true に割り当てることで、簡素化された関数による解の計算を 実施しない か 常に実施する (試行する) ことを要求できます。
|
|
環境変数メカニズムを使用するのには 2 つの理由があります。このメカニズムを通じて、より簡潔な解があればそれをルーチンで返すことができます。しかし、その存在を あらかじめ予想する のは困難です。また、より簡潔な関数の解がルーチンに既知であっても、特殊関数の解の形式でルーチンから戻すようにすることは可能です。この方法は、解の代替的な形式を入力する、より高度な関数を使用するといった特殊な場合の解探索で有効です。
|
|
|
|
例
|
|
次に、単独 ODE で解を求める場合の dsolve の使用例を示します。さらに特殊な問題の例については、dsolve,initial_conditions、dsolve,system、dsolve,numeric、dsolve,integral_transform、dsolve,series、 および dsolve,formal_series を参照してください。
|
1 階の ODE
|
|
>
|
|
| (7.1.1) |
>
|
|
| (7.1.2) |
|
特殊な 'methods' 列を使用して ODE の解を求めるように dsolve に指定できます。次の例では、オプション引数 'useInt' に加えて、'linear' で ODE を求解するように指定されています。この 'useInt' は、解に現れる積分を評価しないように dsolve に指示します。
|
>
|
|
| (7.1.3) |
|
積分を評価する前に解を表示する方法は、解がどのような経緯で取得されたかを理解するうえで有効です。積分の評価は value を使用すると後で実行できます。
|
>
|
|
| (7.1.4) |
|
線形 ODE は 同次 (y(x) の独立項がない) で、可分でもあります。
|
>
|
|
| (7.1.5) |
>
|
|
| (7.1.6) |
>
|
|
| (7.1.7) |
>
|
|
| (7.1.8) |
|
任意定数 が常に再定義可能であることを考慮して、exp(_C1) -> _C1 とすると、dsolve(ode[1]) で解の形式が再び得られます。
|
>
|
|
| (7.1.9) |
|
積分係数によって ODE が厳密になります。厳密 ODE にこのスキームを使用するように dsolve を指定する方法は次のようになります。
|
>
|
|
| (7.1.10) |
>
|
|
| (7.1.11) |
>
|
|
| (7.1.12) |
|
ODE の厳密解の計算とは、微分の階数に応じた数だけの積分問題にこれらを写像するということです。積分は常に計算可能とは限りません。
|
>
|
|
| (7.1.13) |
>
|
|
| (7.1.14) |
|
dsolve はこの方程式をその integrating factor を計算することで自動的に解きます。dsolve の積分求解ステップは、次のように Maple プロンプトから生成できます。
|
>
|
|
| (7.1.15) |
|
厳密 ODE 用の方法で求めた関連の厳密 ODE の解は次のようになります。
|
>
|
|
| (7.1.16) |
|
原則上、陽解または陰解は odetest を使用して次のように検証されます。
|
>
|
|
| (7.1.17) |
>
|
|
| (7.1.18) |
>
|
|
| (7.1.19) |
|
解を パラメトリック形式 で表示するために、追加の引数 'implicit' を使用します。
|
>
|
|
| (7.1.20) |
|
高階 ODE では、一般階とともに返される 特異解 を許容する場合があります。さらに、場合によっては求解プロセス中に生成されたパラメータを dsolve で削除できない場合があります。たとえば、次のようになります。
|
>
|
|
| (7.1.21) |
>
|
|
| (7.1.22) |
>
|
|
| (7.1.23) |
|
微分の階数未満の任意定数に応じ、特異解が最初に表われます。
|
|
|
線形および非線形の 2 階 ODE
|
|
|
次のような 2 階の線形同次 ODE があります:
|
>
|
|
| (7.2.1) |
>
|
|
| (7.2.2) |
|
2 階またはそれ以上の線形 ODE も積分係数を計算して解を求めることができます。例の線形 ODE では、次の 2 つの積分係数です。
|
>
|
|
| (7.2.3) |
>
|
|
| (7.2.4) |
|
これらの積分係数は自動的に計算され、dsolve で解が得られます。
|
>
|
|
| (7.2.5) |
>
|
|
y(x) will now be displayed as y
derivatives with respect to x of functions of one variable will now be displayed with '
| |
>
|
|
| (7.2.6) |
|
次に、dsolve で解の積分を計算するための代替オプション 'useint' の例を示します。ここでは、もっとも簡潔で可能な解を求めます。
|
>
|
|
| (7.2.7) |
|
事前定義された形式 (存在する場合) による積分係数の検索と使用を dsolve に指定するには、_mu = some_mu_form オプションを使用します。たとえば、dsolve は次のようにして一部の関数 の の形式の積分係数を使用して ODE の解を求めます (dsolve のタスクはこれを決定することです)。
|
>
|
|
| (7.2.8) |
>
|
|
| (7.2.9) |
>
|
|
| (7.2.10) |
|
次に、対称法 で解く非線形 2 階の例を示します:
|
>
|
|
| (7.2.11) |
>
|
|
| (7.2.12) |
|
引数を指定した任意関数 (F) を使用した非線形の例は次のとおりです:
|
>
|
|
| (7.2.13) |
>
|
|
| (7.2.14) |
>
|
|
| (7.2.15) |
|
RootOf で構成される未計算の積分があっても、解を検証する障害にはなりません。
|
>
|
|
| (7.2.16) |
|
|
高階の非線形 ODE
|
|
>
|
|
| (7.3.1) |
>
|
|
| (7.3.2) |
>
|
|
| (7.3.3) |
|
上記の右辺は 2 つのオペランドで構成されています。最初のオペランドは新しい変数から見た解であり、2 番目は 3 セットからなるリストになっています。このセットとは、簡約された ODE、求解で使用する変数の変形、逆変換です (dsolve,ODESolStruc を参照してください)。
|
>
|
|
| (7.3.4) |
|
上記の例で行った関数の表記法ではなく、演算子を適用して ODE を構成することもできます。たとえば、以下は 従属 (均一) 変数 および 独立変数の演算子です。
|
>
|
|
| (7.3.5) |
>
|
|
| (7.3.6) |
>
|
|
| (7.3.7) |
>
|
|
| (7.3.8) |
|
Y、X および D (微分) 演算子を使用して ODE を表す演算子を構成できます。 この概念を分かりやすくするために、ここでは合成演算子の @ (@@ も参照) を使用して説明します。
|
>
|
|
| (7.3.9) |
|
D 表記法で表された導関数を持つ dsolve に渡される関数の形式は、次のように、 ODE に演算子を適用して取得します:
|
>
|
|
| (7.3.10) |
>
|
|
| (7.3.11) |
>
|
|
| (7.3.12) |
|
|
|
参照
|
|
dsolve/algorithms, dsolve/education, dsolve/formal_series, dsolve/formal_solution, dsolve/hypergeometric, dsolve/ICs, dsolve/integrating_factors, dsolve/integrating_factors_for_LODEs, dsolve/interactive, dsolve/inttrans, dsolve/Lie, dsolve/linear, dsolve/numeric, dsolve/piecewise, dsolve/references, dsolve/series, dsolve/system, int or Int, intat or Intat, 微分方程式用の Maple パッケージ : DEtools, odeadvisor, odeadvisor/types, PDEtools
|
|