<< Differential Equations, Integration Differential Equations, Integration dae >>

Scilab Help >> Differential Equations, Integration > bvode

bvode

コロケーション法によるODEの境界値問題

bvodeS

bvodeの簡易的なコール

呼び出し手順

zu = bvode(xpoints,N,m,x_low,x_up,zeta,ipar,ltol,tol,fixpnt,fsub,dfsub,gsub,dgsub,guess)

zu = bvodeS(xpoints,m,N,x_low,x_up,fsub,gsub,zeta, <optional_args>)

引数

zu

大きさMの列ベクトル. 複数の点で指定したメッシュ上で評価したODEの解. 各点における z(u(x)) が含まれます.

xpoints

解を観測する点を指定する配列.

N

整数値を有するスカラー,微分方程式の数 (N <= 20).

m

整数要素を有する大きさ N のベクトル. mは各微分方程式の次数のベクトルで, m(i)はi番目の微分方程式の次数を指定します. 以下に示す Mmの要素の合計を表します.

x_low

スカラー: 区間の左端

x_up

スカラー: 区間の右端

zeta

大きさ Mのベクトル,zeta(j) は, j番目の端の条件点(境界値)を指定します. x_low<=zeta(j) <= zeta(j+1)<=x_up となります.

全ての境界条件点は, 使用される全てのメッシュにおけるメッシュ点とする必要があります. 以下の ipar(11) および fixpntの説明を参照ください.

ipar

11個の整数要素を有する配列:

[nonlin, collpnt, subint, ntol, ndimf, ndimi, iprint, iread, iguess, rstart,nfxpnt]

nonlin: ipar(1)

問題が線形の場合: 0 ,問題が非線形の場合: 1

collpnt: ipar(2)

サブ区間毎のコロケーション点の数を指定します. ただし, where max(m(j)) <= collpnt <= 7

ipar(2)=0 の場合, collpnt は ( max(m(j))+1 , 5-max(m(j)) )に設定されます

subint: ipar(3)

初期メッシュのサブ区間の数を指定します. ipar(3) = 0 の場合, 適宜 subint = 5と設定します.

ntol: ipar(4)

解と微分の許容誤差の数を指定します. 0 < ntol <= M とする必要があります. ipar(4) は, tol 引数の次元または 0に設定する必要があります. 後者の場合, 実際の値は自動的に size(tol,'*') に設定されます.

ndimf: ipar(5)

fspace(実数の作業配列)の次元を指定します. この値は, サブ区間の最大数 nmax への拘束条件を指定します.

ipar(5) の値は,拘束条件 ipar(5)>=nmax*nsizef を考慮する必要があります. ただし

nsizef=4+3*M+(5+collpnt*N)*(collpnt*N+M)+(2*M-nrec)*2*M (nrec は終端境界条件の数です ).

ndimi: ipar(6)

ispace (整数作業配列)の次元を指定します. この値は, サブ区間の最大数 nmax への拘束条件を指定します.

ipar(6) の値は, 拘束条件 ipar(6)>=nmax*nsizei を考慮する必要があります. ただし,

nsizei=3 + collpnt*N+M.

iprint: ipar(7)

出力制御, 以下の値とします:

-1

完全な診断出力の場合

0

部分的な出力の場合

1

出力しない場合

iread: ipar(8)
= 0

bvodeが一様な初期メッシュを生成するようにします.

= xx

他の値は, Scilabでは未実装です.

= 1

初期メッシュがユーザにより指定される場合. fspace で以下のように定義されます:

メッシュは fspace(1), ..., fspace(n+1) となります. ユーザは内部メッシュ点fspace(j) = x(j), j = 2, ..., n. のみを指定する必要があります.

= 2 初期メッシュがユーザにより指定される場合.

ipar(8)=1が指定された時と同様であり, 加えて,適応型メッシュ選択は行われません.

iguess: ipar(9)
= 0

解の初期推定値が指定されない場合.

= 1

引数 guess により, 初期推定値がユーザにより指定される場合.

= 2

初期メッシュと近似解係数がユーザにより fspace で指定される場合 (前のメッシュと新規メッシュは同じものになります).

= 3

前のメッシュと近似解の係数がユーザによりfspace で指定される場合, 新規メッシュは 2倍荒くとられます. すなわち, 前のメッシュの各2点毎に1点となります.

= 4

前の初期メッシュと近似解係数に加えて,同時に 新規メッシュが fspace に出力されます. (詳細はiguess = 2, 3, および 4の出力の説明を参照ください)

ireg: ipar(10)
= 0

問題が標準の場合

= 1

最初の緩和係数が ireg に等しい場合, 非線形反復は過去の収束結果に基づきません. (別の敏感な非線形問題のみで使用されます)

= 2

以下の場合,直ちにリターンします. (a) 2回連続で収束しない場合, または (b)最初に誤差推定値を得た後.

nfxpnt: ipar(11)

x_low および x_up 以外のメッシュの固定点の数(fixpntの次元)を指定します. ipar(11) は,引数 fixpntの次元または 0に設定する必要があります. 後者の場合, 実際の値は自動的に size(fixpnt,'*') に設定されます.

ltol

次元 ntol=ipar(4)の配列. ltol(j) = l は, tol 配列の j番目の許容誤差を指定します.これは, 以下のl番目の要素の誤差を制御します. .以下も必要です:

1 <= ltol(1) < ltol(2) < ... < ltol(ntol) <= M

tol

ntol=ipar(4)次の配列.

tol(j)は, 以下の ltol(j) 番目の要素の許容誤差です. .つまり, このコードは以下の条件を 満たそうとします. (サブ区間について)

が近似解ベクトルの場合, は厳密解(未知)となります.

fixpnt

nfxpnt=ipar(11)次の配列. 各メッシュに含まれるx_low および x_up以外の点を含みます. このコードは,x_low および x_up 以外の全ての周辺条件点(zetaの説明を参照)が fixpntの中の固定点として 含まれることを必要とします.

fsub

external は,以下の 列ベクトルの評価に使用されます. f= ただし, x_low <= x <= x_up の任意のx, および z=z(u(x)) となる任意のz とします. (以下の説明を参照)

外部関数は以下のように宣言を必要とします:

  • Fortranの場合, 呼び出し手順を以下のようにします:

    subroutine fsub(x,zu,f)
    double precision zu(*), f(*),x
  • Cの場合,関数プロトタイプを以下のようにします:

    void fsub(double *x, double *zu, double *f)
  • そしてScilab上では:

    function f=fsub(x, zu, parameters)
dfsub

externalは, 点xにおけるヤコビアンf(x,z(u))の 評価に使用されます. ただし,z(u(x))は, fsubと同様に定義され, NM列配列 dfには,fの偏微分が代入されます:

外部関数は以下のように宣言を必要とします:

  • Fortranの場合, 呼び出し手順を以下のようにします:

    subroutine dfsub(x,zu,df)
    double precision zu(*), df(*),x
  • Cの場合, 関数プロトタイプを以下のようにします:

    void dfsub(double *x, double *zu, double *df)
  • そして,Scilabにおいては:

    function df=dfsub(x, zu, parameters)
gsub

以下の評価に使用されるexternal given z= z = zeta(i) ただし, 1<=i<=M.

外部関数は以下のように宣言を必要とします:

  • Fortranの場合, 呼び出し手順を以下のようにします:

    subroutine gsub(i,zu,g)
    double precision zu(*), g(*)
    integer i
  • Cの場合, 関数プロトタイプを以下のようにします:

    void gsub(int *i, double *zu, double *g)
  • そして,Scilabでは:

    function g=gsub(i, zu, parameters)

    fsubfとは逆に gでは コール毎に一つの値のみが返されることに注意してください.

dgsub

an external used to evaluate the i-th row of the Jacobian of g(x,u(x)). Where z(u) is as for fsub, i as for gsub and the M-vector dg should be filled with the partial derivatives of g, viz, for a particular call one calculates

外部関数は以下のような宣言を必要とします:

  • Fortranの場合, 呼び出し手順を以下のようにします:

    subroutine dgsub(i,zu,dg)
    double precision zu(*), dg(*)
  • Cの場合, 関数プロトタイプを以下のようにします:

    void dgsub(int *i, double *zu, double *dg)
  • そして,Scilabでは:

    function dg=dgsub(i, zu, parameters)
guess

z(u(x))および u(x)mj階微分dmval(u(x)) の初期近似値を見積もるために externalが使用されます. ipar(9) = 1の場合のみ, このサブルーチンが 使用されることに注意してください. このため,zuM個の要素および dmvalN個の 要素がx_low <= x <= x_upの範囲の任意の x について計算される 必要があります.

外部関数は以下のように宣言を必要とします:

  • Fortranの場合, 呼び出し手順を以下のようにします:

    subroutine guess(x,zu,dmval)
    double precision x,z(*), dmval(*)
  • Cの場合, 関数プロトタイプを以下のようにします

    void fsub(double *x, double *zu, double *dmval)
  • そしてScilab上では,

    function [dmval, zu]=fsub(x, parameters)
<optional_args>

以下のどれかとする必要があります:

  • 以下の一連の値: guess, dfsub, dgsub, fixpnt, ndimf, ndimi, ltol, tol, ntol,nonlin, collpnt, subint, iprint, ireg, ifail

  • もしくは,一連のarg_name=argvalue で指定します. ただし arg_name は以下のどれかとなります: guess, dfsub, dgsub, fixpnt, ndimf, ndimi, ltol, tol, ntol, nonlin, collpnt, subint, iprint, ireg, ifail

これらの引数が指定される場合は,常に ifailは上記のように説明されます. ifailは選択されたオプション引数 に対応する bvode コールを表示するために使用できます. もし,guess が指定された場合, iguessが 1 に設定されます.

説明

これらの関数は, 以下のように定義された ode-s の 混合次数に関連するシステム多点境界値問題を解きます.

ただし,e

外部関数で使用され, bvode により返される 引数 zu は, 指定した x に関する z(u(x))の要素により 構成される列ベクトルです.

解 u を近似するために使用される手法は, ガウス点におけるコロケーションです. この方法は,i番目(i = 1:N)の要素についてm(i)-1階の連続微分が可であることを 必要とします. ここで, k はサブ区間毎のコロケーション点(ステージ)の数で, k ≥ max(m(i)) となるように選択されます. ルンゲクッタのノミナル解表現が使用されます.

最初の2つの問題は参考文献の論文 [1] からの引用です.

参照

使用される関数

この関数は, 以下の作者により開発された Fortran ルーチンcolnew に基づいています.

U. Ascher, Department of Computer Science, University of British Columbia, Vancouver, B.C. V6T 1W5, Canada

G. Bader, institut f. Angewandte mathematik university of Heidelberg; im Neuenheimer feld 294d-6900 Heidelberg 1

参考文献

  1. U. Ascher, J. Christiansen and R.D. Russell, collocation software for boundary-value ODEs, acm trans. math software 7 (1981), 209-222. this paper contains EXAMPLES where use of the code is demonstrated.

  2. G. Bader and U. Ascher, a new basis implementation for a mixed order boundary value ode solver, siam j. scient. stat. comput. (1987).

  3. U. Ascher, J. Christiansen and R.D. Russell, a collocation solver for mixed order systems of boundary value problems, math. comp. 33 (1979), 659-679.

  4. U. Ascher, J. Christiansen and R.D. russell, colsys - a collocation code for boundary value problems, lecture notes comp.sc. 76, springer verlag, b. childs et. al. (eds.) (1979), 164-185.

  5. C. Deboor and R. Weiss, solveblok: a package for solving almost block diagonal linear systems, acm trans. math. software 6 (1980), 80-87.


Report an issue
<< Differential Equations, Integration Differential Equations, Integration dae >>