dsolve/numeric/BVP - ODE 境界値問題の数値解を求める
使い方
dsolve(odesys, numeric, vars, options)
パラメータ
odesys - 集合またはリスト; 常微分方程式と境界条件
numeric - 名前; dsolve に数値解を求めるよう指示する
vars - (オプション) odesys に対する従属変数または従属変数の集合かリスト
options - (オプション) keyword = value の形をした等式
|
説明
|
|
•
|
dsolve コマンドを、 numeric または type=numeric オプションを与えて呼び出すと、dsolve は ODE または連立 ODE の境界値問題 (boundary value problem : BVP) の数値解を求めます。
|
•
|
問題の種類 (BVP か IVP) は dsolve が自動的に検出し、適切な手法が用いられます。オプションの等式 method=bvp[submethod] を与えることにより BVP を解くための特定の手法をとるように指示することができます。適用可能な submethods には、基本的な解法 (trapezoid や midpoint) の組み合せと、強化された解法 (Richardson 補外や遅延補正 (deferred corrections)) があります。これらはそれぞれ traprich, trapdefer, midrich, middefer として指定されます。デフォルトは traprich です。
|
|
問題を解く手法を選ぶ際に、考慮すべき重要な点が2つあります。概して trapezoid 法が典型的な問題に対してより効率的です。しかし、 midpoint 法は、 trapezoid 法では扱えない端点の無害な特異性を扱うことができます。強化された解法では、 Richardson 外挿が一般に高速です。しかし、難しい問題に対して、 遅延修正強化法はメモリがより少なくてすみます。
|
•
|
使用可能な解法はかなり一般的であり、いろいろな BVP に対してうまくいきます。硬い (stiff) 問題や高次の微分に特異性があるような解をもつ BVP を解くには、適切ではありません。
|
•
|
解法は固定、周期あるいは非線形境界条件を持つ線形および非線形 BVP を扱うことができます。しかし、非線形の境界条件では、境界条件をだいたい満足する初期の解プロフィールを与える必要があります (下の 'approxsoln' を参照)。さらに解法は未定パラメータを持った BVP 系を扱うこともできます。ただし、それらの値を決めるに十分な境界条件を与える必要があります。
|
•
|
計算は機械精度、あるいは Digits で設定された任意精度で実行可能です。マシンの機械精度よりも Digits が小さい場合、機械精度で計算は実行されます(evalhf をご参照ください。) 。 Digits が大きい場合、 Maple の浮動小数点数で計算は実行されます。どちらの場合も、計算時間を食うステップの多くは、コンパイルされた外部ライブラリーで実行されます。
|
'output' = keyword or array
'known' = name or list of names
'optimize' = boolean
|
全ての数値的な ODE 問題に対して有効な output オプションに加えて、オプション output=mesh も使うことができます。これは解法が内部で使う離散メッシュとして独立変数の値が選ばれるように配列型の出力を返すように dsolve に伝えます。これは離散解のみを求められているので、interpolant のデフォルトを false に変える作用も持っています。以下の interpolant をご参照ください。
|
|
|
オプション
|
|
•
|
BVP に特有のオプションには、解のプロセス、結果の解度、使用される初期メッシュや解プロフィールを制御するオプションが含まれています。これらは以下の通りです。
|
'abserr' = numeric
'range' = numeric..numeric
'adaptive' = boolean
'maxmesh' = integer
'initmesh' = integer
'approxsoln' = array, list or procedure
'continuation' = name
'mincont' = numeric
'interpolant' = boolean
|
解の絶対誤差許容量を与える数値です。 例外を除くすべての場合に、この方法によって得られた連続近似解の誤差許容量の中に真の解があります。 abserr のデフォルト値は Float(1,-6) です。
|
|
注意: これは絶対許容誤差です。問題の尺度が単位より極端に小さい/大きい解となる場合には、このパラメータは調整が必要です。
|
|
IVP (dsolve[numeric,IVP] をご参照ください。) と同様に、数値解が計算される前に系は一階の連立方程式系に変換されます。絶対許容誤差は変換された全ての構成要素に適用されます。
|
|
'range'= numeric..numeric
|
|
leftpt..rightpt という形で解の区間の左と右の境界点を与えます。これにより用いられる解法は、 abserr で指定された大域的な絶対誤差範囲を使って、固定された区間上で初期値問題の解を計算できるようになります。
|
|
解を得るためにアダプティブ法を行うかどうかを指定するブール値です。デフォルトではこれは true です。
|
|
適用される手法は弧長を基本としています。それに加えて、近接ステップからサイズが極端に速く変わるのを防ぐルールが採用されています。対応する固定刻み幅と比べて許容される刻み幅の最大値と最小値に制限があります。また、境界近くのメッシュ点が極端に距離を置かないような制限もあります。
|
|
注意: ある種の問題では固定した刻み幅メッシュのほうがうまくいきます。
|
|
数値解を計算するのに dsolve が使う点の最大数を指定する整数値です。数値的 BVP ソルバーは近似解を計算する点の離散的なメッシュを内部で使っています。この解はより高い解度が要求されると調整されます。 もし要求される精度が maxmesh で課せられた現在の限界では得られないときには、エラーが返されます。 maxmesh のデフォルト値は 128 です。その値は 32 から 8192 の間になければいけません。
|
|
初期の解プロフィールを計算するのに dsolve が使う点の個数を指定する整数値です。ある場合には、デフォルトの初期 8 点メッシュでは初期解プロフールを得るのに十分な解像度が得られません。そのようなときにはこの値を上げることによって解を得ることができます。その値は 8 と 8192 の間になければいけません。
|
|
'approxsoln'= array, list or procedure
|
|
問題のスタート点として使われる初期の近似離散解の指定を可能とする引数です。この引数は多くの形をとることができます。
|
|
最も単純な形は、 他の dsolve/numeric 計算の出力で、 output が配列 (Matrix 形式の出力) として、あるいは、手続き (procedurelist, listprocedure, または operator 出力) として指定された出力です。
|
|
他の形は、2次元配列です。ここで、従属変数と独立変数の名前は、1列に与えられ、続く列には、それらの異なる格子点での値が続きます。(1階の連立方程式に変換された) 系のすべての従属変数がないといけません。この形式は入れ子になったリストを用いて指定することもできます。
|
|
最終的な形は、独立変数の関数として初期解のプロフィールを記述する方程式のリストとしてです。 たとえば、u(x)の2階のBVP に対して、これは、 [u(x)=f(x)] あるいは [u(x)=f(x), diff(u(x),x)=g(x)] として指定されます。 ここで、f(x),g(x) は、xの 完全に決定された関数です。前者の場合、u(x) の必要な導関数値は、f(x) の導関数を評価して計算されます。
|
|
配列の形で与えられた離散的な解の場合、独立変数の値は、常に、解の領域で増加する順序で最低でも 8 個の異なる点で、 いずれかの境界で与えられなければなりません。さらに、離散的な近似解を指定する場合、initmesh を同時に使うことはできません。
|
|
(境界条件に関する繰り返しで決定される) 自由パラメータをもつ系に対して、パラメータに対する近似値の提供も可能です。
|
|
より易しい問題から希望の問題へ連続変換によるBVP の解を許可する引数です。この方法は、初期解のプロフィールを得るために使用され、初期近似解で Newton 反復が収束しないような問題に対して最も役立ちます。continuation オプション は問題に対する接続パラメータの名前を与えます。接続問題は 0 から 1 までをとるパラメータ c で違った BVP を定義するように構築されていなければなりません。ここで c=0 がより簡単な問題を表し、 c=1 が解きたい問題を表します。接続のパラメータは、微分方程式、境界条件に対する値、または、その両方で表されます。BVP 問題 の解に対する連続性を使用する2つの例を、numeric,bvp,advanced に述べます。
|
|
最良の結果を得るためには、 BVP 解がパラメータに対して連続的に変化するように、そしてパラメータに対して解の変化の度合いが c=0..1 の範囲でだいたい一定であるように、問題における連続性を構成すべきです。
|
|
初期の解プロフィールを計算する際に、接続パラメータの許容変化量の最小値を指定する引数です。値は正で、 1/10 以下です。デフォルト値は 1/100 です。このオプションは continuation も指定されたときのみ有効です。
|
|
デフォルトでは true であり、 dsolve に解の補間が要求解度を満たすまで解の精度を上げるよう指示するブール値です。これが false の場合は、離散点での解が要求解度になるまでしか解は改善されません。 output=mesh 引数も参照して下さい。
|
|
|
例
|
|
線形境界値問題 :
>
|
dsol1 := dsolve({diff(y(x),x,x)-2*y(x)=0, y(0)=1.2, y(1)=0.9},numeric);
|
| (3.1) |
| (3.2) |
| (3.3) |
| (3.4) |
| (3.5) |
非線形境界値問題 :
>
|
deq2 := diff(y(x),x,x)+(2+y(x)^2)*y(x)/(1+y(x)^2)=1;
|
| (3.6) |
>
|
bc2 := y(0)=0,y(2)=3:
dsol2 := dsolve({deq2,bc2},numeric,output=listprocedure);
|
| (3.7) |
>
|
fy := subs(dsol2,y(x));
|
| (3.8) |
| (3.9) |
IVP に対して BVP ソルバーを使用 :
>
|
dsys3 := diff(y(x),x)-y(x)=0, y(1)=1;
|
| (3.10) |
>
|
dsol3 := dsolve({dsys3},numeric,method=bvp,
range=0..1,abserr=1e-10);
|
| (3.11) |
| (3.12) |
| (3.13) |
未知パラメータを持つ境界値問題 :
>
|
dsys4 := diff(y(x),x,x)-a*y(x)=0, y(0)=1, y(1)=1, D(y)(0)=2;
|
| (3.14) |
>
|
dsol4 := dsolve({dsys4},numeric,output=operator);
|
| (3.15) |
| (3.16) |
| (3.17) |
|
|
参考文献
|
|
|
Ascher, U., Mattheij, R., and Russell, R. "Numerical Solution of Boundary Value Problems for Ordinary Differential Equations." SIAM Classics in Applied Mathematics 13 (1995).
|
|
Ascher, U., and Petzold, L. "Computer Methods for Ordinary Differential Equations and Differential-Algebraic Equations." SIAM, Philadelphia, 1998.
|
|
|