Main Content

境界値問題の求解

"境界値問題" (BVP) の目的は、指定された特定の "境界条件" も満たす常微分方程式 (ODE) の解を見つけることです。境界条件は、積分区間における 2 つ以上の位置で解の値の関係を指定します。最も簡単なケースでは、境界条件は区間の始まりと終わり (または境界) に適用されます。

MATLAB® BVP ソルバー bvp4cbvp5c は、次の形式の ODE 系を取り扱うために設計されています。

y'=f(x,y)

ここで以下のようになります。

  • x は独立変数

  • y は従属変数

  • y は x に対する y の導関数を表し、dy/dx とも記述される

境界条件

"2 点境界値問題" の最も簡単なケースでは、ODE の解は区間 [a, b] で求められ、境界条件を満たさなければなりません。

g(y(a),y(b))=0.

特定の BVP の境界条件を指定するには、以下を行わなければなりません。

  • 形式 res = bcfun(ya,yb) の関数を記述するか、未知パラメーターが含まれる場合は形式 res = bcfun(ya,yb,p) を使用します。この関数を 2 番目の入力引数としてソルバーに指定します。この関数は、境界点における解の残差値である res を返します。たとえば、y(a) = 1 と y(b) = 0 の場合、境界条件関数は次のようになります。

    function res = bcfun(ya,yb)
    res = [ya(1)-1
           yb(1)];
    end

  • 解の初期推定では、メッシュ内の最初と最後の点により、境界条件が適用される点が指定されます。前述の境界条件の場合、bvpinit(linspace(a,b,5),yinit) を指定して a と b に境界条件を適用できます。

MATLAB の BVP ソルバーは、以下をもつ他のタイプの問題にも対応できます。

  • 未知パラメーター p

  • 解の特異性

  • 多点条件 (積分区間を複数の領域に分割する内部境界)

"多点境界条件" の場合、境界条件は積分区間において 3 点以上に適用されます。たとえば、解は区間の始まり、中間、終わりでゼロにしなければならない場合があります。多点境界条件を指定する方法の詳細については、bvpinit を参照してください。

解の初期推定

初期値問題とは異なり、境界値問題は次をもつことができます。

  • 解は存在しない

  • 有限個の解

  • 無限に存在する解

BVP を解くプロセスでは、必要な解の推定を与えることが重要な部分になります。この推定の質はソルバーのパフォーマンスや、ときには問題が解けるかどうかにも大きく影響します。

関数 bvpinit を使用して、解の初期推定の構造体を作成します。ソルバー bvp4c とソルバー bvp5c はこの構造体を 3 番目の入力引数として受け入れます。

解に適切な初期推定を作成するのは、科学というよりアートです。ただし、次のような一般的なガイドラインがあります。

  • 境界条件を満たすために解も必要であるため、初期推定で境界条件を満たすこと。問題に未知パラメーターが含まれている場合は、パラメーターの初期推定でも境界条件を満たさなければならない。

  • 物理的な問題または予想される解について、初期推定にできるだけ多くの情報を取り込む。たとえば、解が変動するか、符号が特定の回数変化することを想定されている場合は、初期推定も同様にしなければならない。

  • メッシュ点の配置を考慮する (解の初期推定の x 座標)。BVP ソルバーは解法プロセス中にこれらの点を適応させるため、多数のメッシュ点を指定する必要はありません。ベスト プラクティスは、解が急激に変化する場所の近くに少数のメッシュ点が配置されるように指定することです。

  • より小さい区間に比較的単純な既知の解がある場合は、より大きな区間でそれを初期推定として使用します。多くの場合、比較的単純な一連の問題として問題を解くことができます。この手法は "連続性" と呼ばれます。連続性を使うと、1 つの問題の解を初期推定として使用して次の問題を解くことによって、単純な一連の問題が連結されます。

未知パラメーターの導出

境界値問題では、問題を解く際に、これに関する未知パラメーター p を決定しなければならない場合がよくあります。ODE と境界条件は次のようになります。

y'=f(x,y,p)g(y(a),y(b),p)=0

この場合、境界条件はパラメーター p の値を決定できなければなりません。

未知パラメーターには初期推定を使用してソルバーを指定しなければなりません。構造体 solinit を作成するために、関数 bvpinit を呼び出すときに、3 番目の入力引数 parameters のベクトルとして初期推定を指定します。

solinit = bvpinit(x,v,parameters)

また、ODE 方程式と境界条件をエンコードする関数 odefunbcfun はそれぞれ 3 番目の引数をもたなければなりません。

dydx = odefun(x,y,parameters)
res = bcfun(ya,yb,parameters)

微分方程式を解く過程において、ソルバーは、境界条件を満たすように未知パラメーターの値を調整します。ソルバーは、これらの未知パラメーターの最終値を sol.parameters に返します。

特異な BVP

bvp4cbvp5c は、次の形式の特異な BVP のクラスを解くことができます。

y=1xSy+f(x,y),0=g(y(0),y(b)).

ソルバーは、次の形式の問題に対して、未知パラメーターも受け入れます。

y=1xSy+f(x,y,p),0=g(y(0),y(b),p).

特異な問題は、区間 [0,b] で b > 0 の場合に提示しなければなりません。bvpset を使用して、定数行列 S を 'SingularTerm' オプションの値としてソルバーに渡します。x = 0 での境界条件は滑らかな解の必要条件である Sy(0) = 0 を満たさなければなりません。解の初期推定はこの条件も満たさなければなりません。

特異な BVP を解く場合、ソルバーでは、関数 odefun(x,y) が方程式の f(x、y) 項の値のみを返さなければなりません。S が含まれる項は、'SingularTerm' オプションを使用して個別にソルバーによって処理されます。

BVP ソルバーの選択

MATLAB には BVP を解くためのソルバー bvp4cbvp5c が含まれます。ほとんどの場合、ソルバーは入れ替えて使用できます。これらのソルバー間の主な違いは、bvp4c は 4 次の方程式を実装する一方、bvp5c は 5 次の方程式を実装する点です。

関数 bvp5c は、2 つのソルバー間の許容誤差の動作を除いて、関数 bvp4c と同様に使用されます。S(x) が解 y(x) を近似する場合、bvp4c は残差 |S′(x) – f(x,S(x))| を制御します。この方法は間接的に真の誤差 |y(x) – S(x)| を制御します。bvp5c を使用して真の誤差を直接制御します。

ソルバー説明

bvp4c

bvp4c は、3 ステージ Lobatto IIIa 公式を実装する有限差分コードです。これは選点法の方程式で選点多項式は、シミュレーション区間で一様な 4 次精度の C1 連続解を与えます。メッシュの選択とエラー制御は、連続解の残差をベースにしています。

この選点法ではメッシュ点を使って、積分区間を部分区間に分割します。ソルバーは、すべての部分区間に適用される選点条件と境界条件から求まるグローバルな代数方程式系を数値的に解いて解を求めます。そしてソルバーは、各部分区間における数値解の誤差を計算します。解が許容誤差の基準を満たさない場合、ソルバーはメッシュの適合を行ってから、再度処理を繰り返します。ユーザーは、初期メッシュの点と、それらのメッシュ点における解の初期近似を "指定しなければなりません"。

bvp5c

関数 bvp5c は、4 ステージの Lobatto IIIa 公式を実装する有限差分コードです。これは、選点公式で、選点多項式が [a,b] 間で一様に 5 次の精度をもつ C1 連続解を与えます。公式は、陰的ルンゲ・クッタ法として実装されます。関数 bvp5c は、代数方程式を直接解き、関数 bvp4c は解析的な凝縮を利用します。関数 bvp4c は、未知パラメーターを直接処理し、関数 bvp5c は、未知のパラメーターに対する自明の微分方程式によりシステムを増大させます。

解の計算

bvp4cbvp5c で実行する選点法は、積分区間 [a,b] の全体に渡り、C1 連続の解を生成します。補助関数 deval とソルバーで返される構造体 sol を使って、近似解 S(x) を [a,b] 内の任意の点で計算できます。たとえば、解 sol をメッシュ点 xint で評価する場合は、次のコマンドを使用します。

Sxint = deval(sol,xint)

関数 deval はベクトル化されています。ベクトル xint に対して、Sxinti 番目の列は解 y(xint(i)) を近似します。

BVP の例とファイル

最も一般的な BVP の問題に対して開始点として効果的に使用できるサンプル ファイルがいくつかあります。例を簡単に参照したり実行したりするには、微分方程式の例アプリを使用します。このアプリを実行するには、次のように入力します。

odeexamples
個々のサンプル ファイルを編集用に開くには、次のように入力します。
edit exampleFileName.m
例を実行するには、次のように入力します。
exampleFileName

次の表に、利用可能な BVP のサンプル ファイルと、それらで使用されているソルバーおよびオプションのリストを示します。

サンプル ファイル

使用されているソルバーオプション指定

説明

リンクの例

emdenbvp

bvp4c または bvp5c

  • 'SingularTerm'

Emden 方程式、特異境界値問題

特異項をもつ BVP を解く

fsbvp

bvp4c または bvp5c

無限範囲での Falkner-Skan BVP

連続性を使用した BVP の整合性の検証

mat4bvp

bvp4c または bvp5c

Mathieu 方程式の 4 番目の固有関数

未知パラメーターをもつ BVP を解く

rcbvp

bvp4c および bvp5c

  • 'FJacobian'

  • 'AbsTol'

  • 'RelTol'

  • 'Stats'

bvp4cbvp5c で制御されるエラーを比較する例

bvp4c ソルバーと bvp5c ソルバーの比較 (bvp4c)

bvp4c ソルバーと bvp5c ソルバーの比較 (bvp5c)

shockbvp

bvp4c または bvp5c

  • 'FJacobian'

  • 'BCJacobian'

  • 'Vectorized'

x = 0 の近傍で衝撃層をもつ解

連続性を使って BVP を解く

twobvp

bvp4c

厳密な 2 つの解をもつ BVP

2 つの解をもつ BVP を解く

threebvp

bvp4c または bvp5c

3 点境界値問題

複数の境界条件をもつ BVP を解く

参照

[1] Ascher, U., R. Mattheij, and R. Russell. “Numerical Solution of Boundary Value Problems for Ordinary Differential Equations.” Philadelphia, PA: SIAM, 1995, p. 372.

[2] Shampine, L.F., and J. Kierzenka. "A BVP Solver based on residual control and the MATLAB PSE." ACM Trans. Math. Softw. Vol. 27, Number 3, 2001, pp. 299–316.

[3] Shampine, L.F., M.W. Reichelt, and J. Kierzenka. "Solving Boundary Value Problems for Ordinary Differential Equations in MATLAB with bvp4c." MATLAB File Exchange, 2004.

[4] Shampine, L.F., and J. Kierzenka. "A BVP Solver that Controls Residual and Error." J. Numer. Anal. Ind. Appl. Math. Vol. 3(1-2), 2008, pp. 27–41.

参考

| | | | |