14
14
<refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns4="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" version="5.0-subset Scilab" xml:id="bvode" xml:lang="ja">
16
<refname>bvode</refname>
17
<refpurpose>コロケーション法によるODEの境界値問題</refpurpose>
19
<refnamediv xml:id="bvodeS">
20
<refname>bvodeS</refname>
21
<refpurpose>bvodeの簡易的なコール</refpurpose>
26
zu=bvode(xpoints,N,m,x_low,x_up,zeta,ipar,ltol,tol,fixpnt,fsub,dfsub,gsub,dgsub,guess)
29
zu=bvodeS(xpoints,m,N,x_low,x_up,fsub,gsub,zeta, <optional_args>)
40
複数の点で指定したメッシュ上で評価したODEの解.
41
各点における z(u(x)) が含まれます.
56
<para>整数値を有するスカラー,微分方程式の数
65
整数要素を有する大きさ <literal>N</literal> のベクトル.
66
<literal>m</literal>は各微分方程式の次数のベクトルで,
67
<literal>m(i)</literal>はi番目の微分方程式の次数を指定します.
68
以下に示す <literal>M</literal>は
69
<literal>m</literal>の要素の合計を表します.
76
<para>スカラー: 区間の左端</para>
82
<para>スカラー: 区間の右端</para>
89
大きさ Mのベクトル,<literal>zeta(j)</literal>
90
は, j番目の端の条件点(境界値)を指定します.
92
<= zeta(j+1)<literal><=x_up</literal>
97
使用される全てのメッシュにおけるメッシュ点とする必要があります.
98
以下の <literal>ipar(11)</literal> および
99
<literal>fixpnt</literal>の説明を参照ください.
106
<para>11個の整数要素を有する配列:</para>
108
[<literal>nonlin, collpnt, subint, ntol, ndimf, ndimi, iprint,
109
iread, iguess, rstart,nfxpnt]
114
<term>nonlin: ipar(1)</term>
116
<para>問題が線形の場合: 0 ,問題が非線形の場合: 1</para>
120
<term>collpnt: ipar(2)</term>
123
サブ区間毎のコロケーション点の数を指定します.
125
where max(m(j)) <= collpnt <= 7
128
<literal>ipar(2)=0</literal> の場合,
129
<literal>collpnt</literal> は ( max(m(j))+1 ,
135
<term>subint: ipar(3)</term>
137
<para>初期メッシュのサブ区間の数を指定します.
138
<literal>ipar(3) = 0</literal> の場合,
140
<literal>subint = 5</literal>と設定します.
145
<term>ntol: ipar(4)</term>
149
0 < ntol <= M とする必要があります.
150
<literal>ipar(4)</literal> は,
151
<literal>tol</literal> 引数の次元または
152
<literal>0</literal>に設定する必要があります.
154
<literal>size(tol,'*')</literal> に設定されます.
159
<term>ndimf: ipar(5)</term>
162
<literal>fspace</literal>(実数の作業配列)の次元を指定します.
164
サブ区間の最大数 nmax への拘束条件を指定します.
166
<para>ipar(5) の値は,拘束条件
167
ipar(5)>=nmax*nsizef を考慮する必要があります. ただし
170
<literal>nsizef=4+3*M+(5+collpnt*N)*(collpnt*N+M)+(2*M-nrec)*2*M</literal>
171
(<literal>nrec</literal> は終端境界条件の数です
177
<term>ndimi: ipar(6)</term>
179
<para>ispace (整数作業配列)の次元を指定します.
180
この値は, サブ区間の最大数 nmax への拘束条件を指定します.
182
<para>ipar(6) の値は, 拘束条件 ipar(6)>=nmax*nsizei
188
<literal>collpnt*N+M</literal>.
193
<term>iprint: ipar(7)</term>
195
<para>出力制御, 以下の値とします:</para>
200
<para>完全な診断出力の場合</para>
206
<para>部分的な出力の場合</para>
219
<term>iread: ipar(8)</term>
226
bvodeが一様な初期メッシュを生成するようにします.
233
<para>他の値は, Scilabでは未実装です.</para>
238
<para>初期メッシュがユーザにより指定される場合.
239
fspace で以下のように定義されます:
242
メッシュは <literal>fspace(1), ...,
246
ユーザは内部メッシュ点<literal>fspace(j) = x(j),
254
<term>= 2 初期メッシュがユーザにより指定される場合.</term>
257
<literal>ipar(8)=1</literal>が指定された時と同様であり,
258
加えて,適応型メッシュ選択は行われません.
269
<term>iguess: ipar(9)</term>
275
<para>解の初期推定値が指定されない場合.</para>
282
引数 <literal>guess</literal> により,
291
初期メッシュと近似解係数がユーザにより fspace で指定される場合
292
(前のメッシュと新規メッシュは同じものになります).
300
前のメッシュと近似解の係数がユーザによりfspace で指定される場合,
302
すなわち, 前のメッシュの各2点毎に1点となります.
310
前の初期メッシュと近似解係数に加えて,同時に
311
新規メッシュが fspace に出力されます.
312
(詳細はiguess = 2, 3, および 4の出力の説明を参照ください)
320
<term>ireg: ipar(10)</term>
326
<para>問題が標準の場合</para>
333
最初の緩和係数が <literal>ireg</literal> に等しい場合,
334
非線形反復は過去の収束結果に基づきません.
335
(別の敏感な非線形問題のみで使用されます)
354
<term>nfxpnt: ipar(11)</term>
357
<literal>x_low</literal> および <literal>x_up</literal>
358
以外のメッシュの固定点の数(<literal>fixpnt</literal>の次元)を指定します.
359
<literal>ipar(11)</literal> は,引数
360
<literal>fixpnt</literal>の次元または
361
<literal>0</literal>に設定する必要があります.
363
<literal>size(fixpnt,'*')</literal> に設定されます.
374
次元 <literal>ntol=ipar(4)</literal>の配列.
375
<literal>ltol(j) = l</literal> は,
376
<literal> tol</literal> 配列の <literal>j</literal>番目の許容誤差を指定します.これは,
377
以下の<literal>l</literal>番目の要素の誤差を制御します.
385
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
395
<literal>1 <= ltol(1) < ltol(2) < ... < ltol(ntol)
405
<literal>ntol=ipar(4)</literal>次の配列.
408
<literal>tol(j)</literal>は,
409
以下の <literal>ltol(j)</literal> 番目の要素の許容誤差です.
417
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
433
<mml:mfenced mml:close="∣" mml:open="∣">
436
<mml:mo mml:stretchy="false">(</mml:mo>
441
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>v</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
443
<mml:mo mml:stretchy="false">−</mml:mo><mml:mi>z</mml:mi>
446
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
449
<mml:mo mml:stretchy="false">)</mml:mo>
452
<mml:mi mml:fontstyle="italic">ltol</mml:mi>
454
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
459
<mml:mo mml:stretchy="false">≤</mml:mo><mml:mi mml:fontstyle="italic">tol</mml:mi>
464
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
466
<mml:mo mml:stretchy="false">⋅</mml:mo>
467
<mml:mfenced mml:close="∣" mml:open="∣">
470
<mml:mo mml:stretchy="false">(</mml:mo>
474
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
477
<mml:mo mml:stretchy="false">)</mml:mo>
480
<mml:mi mml:fontstyle="italic">ltol</mml:mi>
482
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
488
<mml:mo mml:stretchy="false">+</mml:mo><mml:mi mml:fontstyle="italic">tol</mml:mi>
491
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
493
<mml:mi>,</mml:mi><mml:mi mml:fontstyle="normal">for</mml:mi>
495
<mml:mi>j</mml:mi><mml:mo mml:stretchy="false">=</mml:mo><mml:mn>1</mml:mn>
497
<mml:mi mml:fontstyle="normal">:</mml:mi><mml:mi mml:fontstyle="normal">ntol</mml:mi>
499
<mml:annotation mml:encoding="StarMath 5.0">abs(z(v)-z(u))_{ltol(j)}
500
<= tol(j) cdot abs(z(u))_{ltol(j)} + tol(j), for
542
<literal>nfxpnt=ipar(11)</literal>次の配列.
543
各メッシュに含まれる<literal>x_low</literal> および
544
<literal>x_up</literal>以外の点を含みます.
545
このコードは,<literal>x_low</literal> および <literal>x_up</literal>
546
以外の全ての周辺条件点(<literal>zeta</literal>の説明を参照)が
547
<literal>fixpnt</literal>の中の固定点として
556
<link linkend="external">external</link> は,以下の
557
列ベクトルの評価に使用されます. <literal>f=</literal>
564
<mml:mo mml:stretchy="false">[</mml:mo>
567
<mml:mi>f</mml:mi><mml:mn>1</mml:mn>
570
<mml:mo mml:stretchy="false">(</mml:mo>
572
<mml:mi>x</mml:mi><mml:mi>,</mml:mi><mml:mi>z</mml:mi>
574
<mml:mo mml:stretchy="false">(</mml:mo>
578
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
581
<mml:mo mml:stretchy="false">)</mml:mo>
584
<mml:mo mml:stretchy="false">)</mml:mo>
588
<mml:mi>f</mml:mi><mml:mn>2</mml:mn>
591
<mml:mo mml:stretchy="false">(</mml:mo>
593
<mml:mi>x</mml:mi><mml:mi>,</mml:mi><mml:mi>z</mml:mi>
595
<mml:mo mml:stretchy="false">(</mml:mo>
599
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
602
<mml:mo mml:stretchy="false">)</mml:mo>
605
<mml:mo mml:stretchy="false">)</mml:mo>
607
<mml:mi>,</mml:mi><mml:mo mml:stretchy="false">⋯</mml:mo><mml:mi>,</mml:mi>
609
<mml:mi>f</mml:mi><mml:mi>N</mml:mi>
612
<mml:mo mml:stretchy="false">(</mml:mo>
614
<mml:mi>x</mml:mi><mml:mi>,</mml:mi><mml:mi>z</mml:mi>
616
<mml:mo mml:stretchy="false">(</mml:mo>
620
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
623
<mml:mo mml:stretchy="false">)</mml:mo>
626
<mml:mo mml:stretchy="false">)</mml:mo>
629
<mml:mo mml:stretchy="false">]</mml:mo>
631
<mml:annotation mml:encoding="StarMath 5.0">[f_1(x,z(u(x)));
632
f_2(x,z(u(x))),dotsaxis,
642
<literal>x_low</literal> <= <literal>x</literal> <= <literal>x_up</literal> の任意の<literal>x</literal>,
643
および <literal>z=z(u(x))</literal> となる任意の<literal>z</literal> とします.
646
<para>外部関数は以下のように宣言を必要とします:</para>
649
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
650
<programlisting role="no-scilab-exec"><![CDATA[
16
<refname>bvode</refname>
17
<refpurpose>コロケーション法によるODEの境界値問題</refpurpose>
19
<refnamediv xml:id="bvodeS">
20
<refname>bvodeS</refname>
21
<refpurpose>bvodeの簡易的なコール</refpurpose>
26
zu=bvode(xpoints,N,m,x_low,x_up,zeta,ipar,ltol,tol,fixpnt,fsub,dfsub,gsub,dgsub,guess)
29
zu=bvodeS(xpoints,m,N,x_low,x_up,fsub,gsub,zeta, <optional_args>)
40
複数の点で指定したメッシュ上で評価したODEの解.
41
各点における z(u(x)) が含まれます.
56
<para>整数値を有するスカラー,微分方程式の数
65
整数要素を有する大きさ <literal>N</literal> のベクトル.
66
<literal>m</literal>は各微分方程式の次数のベクトルで,
67
<literal>m(i)</literal>はi番目の微分方程式の次数を指定します.
68
以下に示す <literal>M</literal>は
69
<literal>m</literal>の要素の合計を表します.
76
<para>スカラー: 区間の左端</para>
82
<para>スカラー: 区間の右端</para>
89
大きさ Mのベクトル,<literal>zeta(j)</literal>
90
は, j番目の端の条件点(境界値)を指定します.
92
<= zeta(j+1)<literal><=x_up</literal>
97
使用される全てのメッシュにおけるメッシュ点とする必要があります.
98
以下の <literal>ipar(11)</literal> および
99
<literal>fixpnt</literal>の説明を参照ください.
106
<para>11個の整数要素を有する配列:</para>
108
[<literal>nonlin, collpnt, subint, ntol, ndimf, ndimi, iprint,
109
iread, iguess, rstart,nfxpnt]
114
<term>nonlin: ipar(1)</term>
116
<para>問題が線形の場合: 0 ,問題が非線形の場合: 1</para>
120
<term>collpnt: ipar(2)</term>
123
サブ区間毎のコロケーション点の数を指定します.
125
where max(m(j)) <= collpnt <= 7
128
<literal>ipar(2)=0</literal> の場合,
129
<literal>collpnt</literal> は ( max(m(j))+1 ,
135
<term>subint: ipar(3)</term>
137
<para>初期メッシュのサブ区間の数を指定します.
138
<literal>ipar(3) = 0</literal> の場合,
140
<literal>subint = 5</literal>と設定します.
145
<term>ntol: ipar(4)</term>
149
0 < ntol <= M とする必要があります.
150
<literal>ipar(4)</literal> は,
151
<literal>tol</literal> 引数の次元または
152
<literal>0</literal>に設定する必要があります.
154
<literal>size(tol,'*')</literal> に設定されます.
159
<term>ndimf: ipar(5)</term>
162
<literal>fspace</literal>(実数の作業配列)の次元を指定します.
164
サブ区間の最大数 nmax への拘束条件を指定します.
166
<para>ipar(5) の値は,拘束条件
167
ipar(5)>=nmax*nsizef を考慮する必要があります. ただし
170
<literal>nsizef=4+3*M+(5+collpnt*N)*(collpnt*N+M)+(2*M-nrec)*2*M</literal>
171
(<literal>nrec</literal> は終端境界条件の数です
177
<term>ndimi: ipar(6)</term>
179
<para>ispace (整数作業配列)の次元を指定します.
180
この値は, サブ区間の最大数 nmax への拘束条件を指定します.
182
<para>ipar(6) の値は, 拘束条件 ipar(6)>=nmax*nsizei
188
<literal>collpnt*N+M</literal>.
193
<term>iprint: ipar(7)</term>
195
<para>出力制御, 以下の値とします:</para>
200
<para>完全な診断出力の場合</para>
206
<para>部分的な出力の場合</para>
219
<term>iread: ipar(8)</term>
226
bvodeが一様な初期メッシュを生成するようにします.
233
<para>他の値は, Scilabでは未実装です.</para>
238
<para>初期メッシュがユーザにより指定される場合.
239
fspace で以下のように定義されます:
242
メッシュは <literal>fspace(1), ...,
246
ユーザは内部メッシュ点<literal>fspace(j) = x(j),
254
<term>= 2 初期メッシュがユーザにより指定される場合.</term>
257
<literal>ipar(8)=1</literal>が指定された時と同様であり,
258
加えて,適応型メッシュ選択は行われません.
269
<term>iguess: ipar(9)</term>
275
<para>解の初期推定値が指定されない場合.</para>
282
引数 <literal>guess</literal> により,
291
初期メッシュと近似解係数がユーザにより fspace で指定される場合
292
(前のメッシュと新規メッシュは同じものになります).
300
前のメッシュと近似解の係数がユーザによりfspace で指定される場合,
302
すなわち, 前のメッシュの各2点毎に1点となります.
310
前の初期メッシュと近似解係数に加えて,同時に
311
新規メッシュが fspace に出力されます.
312
(詳細はiguess = 2, 3, および 4の出力の説明を参照ください)
320
<term>ireg: ipar(10)</term>
326
<para>問題が標準の場合</para>
333
最初の緩和係数が <literal>ireg</literal> に等しい場合,
334
非線形反復は過去の収束結果に基づきません.
335
(別の敏感な非線形問題のみで使用されます)
354
<term>nfxpnt: ipar(11)</term>
357
<literal>x_low</literal> および <literal>x_up</literal>
358
以外のメッシュの固定点の数(<literal>fixpnt</literal>の次元)を指定します.
359
<literal>ipar(11)</literal> は,引数
360
<literal>fixpnt</literal>の次元または
361
<literal>0</literal>に設定する必要があります.
363
<literal>size(fixpnt,'*')</literal> に設定されます.
374
次元 <literal>ntol=ipar(4)</literal>の配列.
375
<literal>ltol(j) = l</literal> は,
376
<literal> tol</literal> 配列の <literal>j</literal>番目の許容誤差を指定します.これは,
377
以下の<literal>l</literal>番目の要素の誤差を制御します.
385
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
395
<literal>1 <= ltol(1) < ltol(2) < ... < ltol(ntol)
405
<literal>ntol=ipar(4)</literal>次の配列.
408
<literal>tol(j)</literal>は,
409
以下の <literal>ltol(j)</literal> 番目の要素の許容誤差です.
417
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
433
<mml:mfenced mml:close="∣" mml:open="∣">
436
<mml:mo mml:stretchy="false">(</mml:mo>
441
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>v</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
443
<mml:mo mml:stretchy="false">−</mml:mo><mml:mi>z</mml:mi>
446
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
449
<mml:mo mml:stretchy="false">)</mml:mo>
452
<mml:mi mml:fontstyle="italic">ltol</mml:mi>
454
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
459
<mml:mo mml:stretchy="false">≤</mml:mo><mml:mi mml:fontstyle="italic">tol</mml:mi>
464
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
466
<mml:mo mml:stretchy="false">⋅</mml:mo>
467
<mml:mfenced mml:close="∣" mml:open="∣">
470
<mml:mo mml:stretchy="false">(</mml:mo>
474
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>u</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
477
<mml:mo mml:stretchy="false">)</mml:mo>
480
<mml:mi mml:fontstyle="italic">ltol</mml:mi>
482
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
488
<mml:mo mml:stretchy="false">+</mml:mo><mml:mi mml:fontstyle="italic">tol</mml:mi>
491
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>j</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
493
<mml:mi>,</mml:mi><mml:mi mml:fontstyle="normal">for</mml:mi>
495
<mml:mi>j</mml:mi><mml:mo mml:stretchy="false">=</mml:mo><mml:mn>1</mml:mn>
497
<mml:mi mml:fontstyle="normal">:</mml:mi><mml:mi mml:fontstyle="normal">ntol</mml:mi>
499
<mml:annotation mml:encoding="StarMath 5.0">abs(z(v)-z(u))_{ltol(j)}
500
<= tol(j) cdot abs(z(u))_{ltol(j)} + tol(j), for
542
<literal>nfxpnt=ipar(11)</literal>次の配列.
543
各メッシュに含まれる<literal>x_low</literal> および
544
<literal>x_up</literal>以外の点を含みます.
545
このコードは,<literal>x_low</literal> および <literal>x_up</literal>
546
以外の全ての周辺条件点(<literal>zeta</literal>の説明を参照)が
547
<literal>fixpnt</literal>の中の固定点として
556
<link linkend="external">external</link> は,以下の
557
列ベクトルの評価に使用されます. <literal>f=</literal>
564
<mml:mo mml:stretchy="false">[</mml:mo>
567
<mml:mi>f</mml:mi><mml:mn>1</mml:mn>
570
<mml:mo mml:stretchy="false">(</mml:mo>
572
<mml:mi>x</mml:mi><mml:mi>,</mml:mi><mml:mi>z</mml:mi>
574
<mml:mo mml:stretchy="false">(</mml:mo>
578
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
581
<mml:mo mml:stretchy="false">)</mml:mo>
584
<mml:mo mml:stretchy="false">)</mml:mo>
588
<mml:mi>f</mml:mi><mml:mn>2</mml:mn>
591
<mml:mo mml:stretchy="false">(</mml:mo>
593
<mml:mi>x</mml:mi><mml:mi>,</mml:mi><mml:mi>z</mml:mi>
595
<mml:mo mml:stretchy="false">(</mml:mo>
599
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
602
<mml:mo mml:stretchy="false">)</mml:mo>
605
<mml:mo mml:stretchy="false">)</mml:mo>
607
<mml:mi>,</mml:mi><mml:mo mml:stretchy="false">⋯</mml:mo><mml:mi>,</mml:mi>
609
<mml:mi>f</mml:mi><mml:mi>N</mml:mi>
612
<mml:mo mml:stretchy="false">(</mml:mo>
614
<mml:mi>x</mml:mi><mml:mi>,</mml:mi><mml:mi>z</mml:mi>
616
<mml:mo mml:stretchy="false">(</mml:mo>
620
<mml:mo mml:stretchy="false">(</mml:mo><mml:mi>x</mml:mi><mml:mo mml:stretchy="false">)</mml:mo>
623
<mml:mo mml:stretchy="false">)</mml:mo>
626
<mml:mo mml:stretchy="false">)</mml:mo>
629
<mml:mo mml:stretchy="false">]</mml:mo>
631
<mml:annotation mml:encoding="StarMath 5.0">[f_1(x,z(u(x)));
632
f_2(x,z(u(x))),dotsaxis,
642
<literal>x_low</literal> <= <literal>x</literal> <= <literal>x_up</literal> の任意の<literal>x</literal>,
643
および <literal>z=z(u(x))</literal> となる任意の<literal>z</literal> とします.
646
<para>外部関数は以下のように宣言を必要とします:</para>
649
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
650
<programlisting role="no-scilab-exec"><![CDATA[
651
651
subroutine fsub(x,zu,f)
652
652
double precision zu(*), f(*),x
653
653
]]></programlisting>
656
<para>Cの場合,関数プロトタイプを以下のようにします:</para>
657
<programlisting role="no-scilab-exec"><![CDATA[
656
<para>Cの場合,関数プロトタイプを以下のようにします:</para>
657
<programlisting role="no-scilab-exec"><![CDATA[
658
658
void fsub(double *x, double *zu, double *f)
659
659
]]></programlisting>
662
<para>そしてScilab上では:</para>
663
<programlisting role="no-scilab-exec"><![CDATA[
662
<para>そしてScilab上では:</para>
663
<programlisting role="no-scilab-exec"><![CDATA[
664
664
function f=fsub(x,zu,parameters)
665
665
]]></programlisting>
674
<link linkend="external">external</link>は,
675
点<literal>x</literal>におけるヤコビアン<literal>f(x,z(u))</literal>の
677
ただし,<literal>z(u(x))</literal>は,
678
<literal>fsub</literal>と同様に定義され,
679
<literal>N</literal> 行 <literal>M</literal>列配列
680
dfには,<literal>f</literal>の偏微分が代入されます:
685
<imagedata align="center">
689
<mml:mi mml:fontstyle="italic">df</mml:mi>
692
<mml:mo mml:stretchy="false">(</mml:mo>
698
<mml:mo mml:stretchy="false">)</mml:mo>
700
<mml:mo mml:stretchy="false">=</mml:mo>
703
<mml:mo mml:stretchy="false">∂</mml:mo>
710
<mml:mo mml:stretchy="false">∂</mml:mo>
721
<mml:mo mml:stretchy="true">{</mml:mo>
727
<mml:mo mml:stretchy="false">=</mml:mo>
730
<mml:mi mml:fontstyle="normal">:</mml:mi>
731
<mml:mi mml:fontstyle="italic">N</mml:mi>
738
<mml:mo mml:stretchy="false">=</mml:mo>
741
<mml:mi mml:fontstyle="normal">:</mml:mi>
742
<mml:mi mml:fontstyle="italic">M</mml:mi>
748
<mml:annotation mml:encoding="StarMath 5.0">df(i,j)= {partial{f_i}} over
749
{partial{z_j}} ~ for ~ left lbrace binom{i=1:N}{j=1:M} right
758
<para>外部関数は以下のように宣言を必要とします:</para>
761
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
762
<programlisting role="no-scilab-exec"><![CDATA[
674
<link linkend="external">external</link>は,
675
点<literal>x</literal>におけるヤコビアン<literal>f(x,z(u))</literal>の
677
ただし,<literal>z(u(x))</literal>は,
678
<literal>fsub</literal>と同様に定義され,
679
<literal>N</literal> 行 <literal>M</literal>列配列
680
dfには,<literal>f</literal>の偏微分が代入されます:
685
<imagedata align="center">
689
<mml:mi mml:fontstyle="italic">df</mml:mi>
692
<mml:mo mml:stretchy="false">(</mml:mo>
698
<mml:mo mml:stretchy="false">)</mml:mo>
700
<mml:mo mml:stretchy="false">=</mml:mo>
703
<mml:mo mml:stretchy="false">∂</mml:mo>
710
<mml:mo mml:stretchy="false">∂</mml:mo>
721
<mml:mo mml:stretchy="true">{</mml:mo>
727
<mml:mo mml:stretchy="false">=</mml:mo>
730
<mml:mi mml:fontstyle="normal">:</mml:mi>
731
<mml:mi mml:fontstyle="italic">N</mml:mi>
738
<mml:mo mml:stretchy="false">=</mml:mo>
741
<mml:mi mml:fontstyle="normal">:</mml:mi>
742
<mml:mi mml:fontstyle="italic">M</mml:mi>
748
<mml:annotation mml:encoding="StarMath 5.0">df(i,j)= {partial{f_i}} over
749
{partial{z_j}} ~ for ~ left lbrace binom{i=1:N}{j=1:M} right
758
<para>外部関数は以下のように宣言を必要とします:</para>
761
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
762
<programlisting role="no-scilab-exec"><![CDATA[
763
763
subroutine dfsub(x,zu,df)
764
764
double precision zu(*), df(*),x
765
765
]]></programlisting>
768
<para>Cの場合, 関数プロトタイプを以下のようにします:</para>
769
<programlisting role="no-scilab-exec"><![CDATA[
768
<para>Cの場合, 関数プロトタイプを以下のようにします:</para>
769
<programlisting role="no-scilab-exec"><![CDATA[
770
770
void dfsub(double *x, double *zu, double *df)
771
771
]]></programlisting>
774
<para>そして,Scilabにおいては:</para>
775
<programlisting role="no-scilab-exec"><![CDATA[
774
<para>そして,Scilabにおいては:</para>
775
<programlisting role="no-scilab-exec"><![CDATA[
776
776
function df=dfsub(x,zu,parameters)
777
777
]]></programlisting>
786
以下の評価に使用される<link linkend="external">external</link>
794
<mml:mi>g</mml:mi><mml:mi>i</mml:mi>
797
<mml:mo mml:stretchy="false">(</mml:mo>
800
<mml:mo mml:stretchy="false">ζ</mml:mo><mml:mi>i</mml:mi>
802
<mml:mi>,</mml:mi><mml:mi>z</mml:mi>
804
<mml:mo mml:stretchy="false">(</mml:mo>
808
<mml:mo mml:stretchy="false">(</mml:mo>
810
<mml:mo mml:stretchy="false">ζ</mml:mo><mml:mi>i</mml:mi>
812
<mml:mo mml:stretchy="false">)</mml:mo>
815
<mml:mo mml:stretchy="false">)</mml:mo>
818
<mml:mo mml:stretchy="false">)</mml:mo>
821
<mml:annotation mml:encoding="StarMath 5.0">g_i(%zeta_i,z(u(%zeta_i)))</mml:annotation>
836
<mml:mo mml:stretchy="false">(</mml:mo>
840
<mml:mo mml:stretchy="false">(</mml:mo>
842
<mml:mo mml:stretchy="false">ζ</mml:mo><mml:mi>i</mml:mi>
844
<mml:mo mml:stretchy="false">)</mml:mo>
847
<mml:mo mml:stretchy="false">)</mml:mo>
850
<mml:annotation mml:encoding="StarMath 5.0">z(u(%zeta_i))</mml:annotation>
857
<literal>z = zeta(i)</literal> ただし,
858
<literal>1<=i<=M.</literal>
860
<para>外部関数は以下のように宣言を必要とします:</para>
863
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
864
<programlisting role="no-scilab-exec"><![CDATA[
786
以下の評価に使用される<link linkend="external">external</link>
794
<mml:mi>g</mml:mi><mml:mi>i</mml:mi>
797
<mml:mo mml:stretchy="false">(</mml:mo>
800
<mml:mo mml:stretchy="false">ζ</mml:mo><mml:mi>i</mml:mi>
802
<mml:mi>,</mml:mi><mml:mi>z</mml:mi>
804
<mml:mo mml:stretchy="false">(</mml:mo>
808
<mml:mo mml:stretchy="false">(</mml:mo>
810
<mml:mo mml:stretchy="false">ζ</mml:mo><mml:mi>i</mml:mi>
812
<mml:mo mml:stretchy="false">)</mml:mo>
815
<mml:mo mml:stretchy="false">)</mml:mo>
818
<mml:mo mml:stretchy="false">)</mml:mo>
821
<mml:annotation mml:encoding="StarMath 5.0">g_i(%zeta_i,z(u(%zeta_i)))</mml:annotation>
836
<mml:mo mml:stretchy="false">(</mml:mo>
840
<mml:mo mml:stretchy="false">(</mml:mo>
842
<mml:mo mml:stretchy="false">ζ</mml:mo><mml:mi>i</mml:mi>
844
<mml:mo mml:stretchy="false">)</mml:mo>
847
<mml:mo mml:stretchy="false">)</mml:mo>
850
<mml:annotation mml:encoding="StarMath 5.0">z(u(%zeta_i))</mml:annotation>
857
<literal>z = zeta(i)</literal> ただし,
858
<literal>1<=i<=M.</literal>
860
<para>外部関数は以下のように宣言を必要とします:</para>
863
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
864
<programlisting role="no-scilab-exec"><![CDATA[
865
865
subroutine gsub(i,zu,g)
866
866
double precision zu(*), g(*)
868
868
]]></programlisting>
871
<para>Cの場合, 関数プロトタイプを以下のようにします:</para>
872
<programlisting role="no-scilab-exec"><![CDATA[
871
<para>Cの場合, 関数プロトタイプを以下のようにします:</para>
872
<programlisting role="no-scilab-exec"><![CDATA[
873
873
void gsub(int *i, double *zu, double *g)
874
874
]]></programlisting>
877
<para>そして,Scilabでは:</para>
878
<programlisting role="no-scilab-exec"><![CDATA[
877
<para>そして,Scilabでは:</para>
878
<programlisting role="no-scilab-exec"><![CDATA[
879
879
function g=gsub(i,zu,parameters)
880
880
]]></programlisting>
882
<literal>fsub</literal>の<literal>f</literal>とは逆に
883
<literal>g</literal>では
884
コール毎に一つの値のみが返されることに注意してください.
894
an <link linkend="external">external</link> used to evaluate
895
the <literal>i</literal>-th row of the Jacobian of <literal>g(x,u(x))</literal>. Where
896
<literal>z(u)</literal> is as for <literal>fsub</literal>, <literal>i</literal> as for
897
<literal>gsub</literal> and the <literal>M</literal>-vector <literal>dg</literal> should
898
be filled with the partial derivatives of <literal>g</literal>, viz, for a particular call one
904
<imagedata align="center">
908
<mml:mi mml:fontstyle="italic">dg</mml:mi>
911
<mml:mo mml:stretchy="false">(</mml:mo>
917
<mml:mo mml:stretchy="false">)</mml:mo>
919
<mml:mo mml:stretchy="false">=</mml:mo>
922
<mml:mo mml:stretchy="false">∂</mml:mo>
929
<mml:mo mml:stretchy="false">∂</mml:mo>
940
<mml:mo mml:stretchy="true">{</mml:mo>
946
<mml:mo mml:stretchy="false">=</mml:mo>
949
<mml:mi mml:fontstyle="normal">:</mml:mi>
950
<mml:mi mml:fontstyle="italic">M</mml:mi>
957
<mml:mo mml:stretchy="false">=</mml:mo>
960
<mml:mi mml:fontstyle="normal">:</mml:mi>
961
<mml:mi mml:fontstyle="italic">M</mml:mi>
967
<mml:annotation mml:encoding="StarMath 5.0">dg(i,j)= {partial{g_i}} over
968
{partial{z_j}} ~ for ~ left lbrace binom{i=1:M}{j=1:M} right
977
<para>外部関数は以下のような宣言を必要とします:</para>
980
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
981
<programlisting role="no-scilab-exec"><![CDATA[
882
<literal>fsub</literal>の<literal>f</literal>とは逆に
883
<literal>g</literal>では
884
コール毎に一つの値のみが返されることに注意してください.
894
an <link linkend="external">external</link> used to evaluate
895
the <literal>i</literal>-th row of the Jacobian of <literal>g(x,u(x))</literal>. Where
896
<literal>z(u)</literal> is as for <literal>fsub</literal>, <literal>i</literal> as for
897
<literal>gsub</literal> and the <literal>M</literal>-vector <literal>dg</literal> should
898
be filled with the partial derivatives of <literal>g</literal>, viz, for a particular call one
904
<imagedata align="center">
908
<mml:mi mml:fontstyle="italic">dg</mml:mi>
911
<mml:mo mml:stretchy="false">(</mml:mo>
917
<mml:mo mml:stretchy="false">)</mml:mo>
919
<mml:mo mml:stretchy="false">=</mml:mo>
922
<mml:mo mml:stretchy="false">∂</mml:mo>
929
<mml:mo mml:stretchy="false">∂</mml:mo>
940
<mml:mo mml:stretchy="true">{</mml:mo>
946
<mml:mo mml:stretchy="false">=</mml:mo>
949
<mml:mi mml:fontstyle="normal">:</mml:mi>
950
<mml:mi mml:fontstyle="italic">M</mml:mi>
957
<mml:mo mml:stretchy="false">=</mml:mo>
960
<mml:mi mml:fontstyle="normal">:</mml:mi>
961
<mml:mi mml:fontstyle="italic">M</mml:mi>
967
<mml:annotation mml:encoding="StarMath 5.0">dg(i,j)= {partial{g_i}} over
968
{partial{z_j}} ~ for ~ left lbrace binom{i=1:M}{j=1:M} right
977
<para>外部関数は以下のような宣言を必要とします:</para>
980
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
981
<programlisting role="no-scilab-exec"><![CDATA[
982
982
subroutine dgsub(i,zu,dg)
983
983
double precision zu(*), dg(*)
984
984
]]></programlisting>
987
<para>Cの場合, 関数プロトタイプを以下のようにします:</para>
988
<programlisting role="no-scilab-exec"><![CDATA[
987
<para>Cの場合, 関数プロトタイプを以下のようにします:</para>
988
<programlisting role="no-scilab-exec"><![CDATA[
989
989
void dgsub(int *i, double *zu, double *dg)
990
990
]]></programlisting>
993
<para>そして,Scilabでは:</para>
994
<programlisting role="no-scilab-exec"><![CDATA[
993
<para>そして,Scilabでは:</para>
994
<programlisting role="no-scilab-exec"><![CDATA[
995
995
function dg=dgsub(i,zu,parameters)
996
996
]]></programlisting>
1005
<literal>z(u(x))</literal>および
1006
<literal>u(x)</literal>の<literal>mj</literal>階微分<literal>dmval(u(x))</literal>
1008
<link linkend="external">external</link>が使用されます.
1009
<literal>ipar(9) = 1</literal>の場合のみ, このサブルーチンが
1011
このため,<literal>zu</literal>の<literal>M</literal>個の要素および <literal>dmval</literal> の <literal>N</literal>個の
1012
要素が<literal>x_low</literal> <= <literal>x</literal> <= <literal>x_up</literal>の範囲の任意の <literal>x</literal> について計算される
1015
<para>外部関数は以下のように宣言を必要とします:</para>
1018
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
1019
<programlisting role="no-scilab-exec"><![CDATA[
1005
<literal>z(u(x))</literal>および
1006
<literal>u(x)</literal>の<literal>mj</literal>階微分<literal>dmval(u(x))</literal>
1008
<link linkend="external">external</link>が使用されます.
1009
<literal>ipar(9) = 1</literal>の場合のみ, このサブルーチンが
1011
このため,<literal>zu</literal>の<literal>M</literal>個の要素および <literal>dmval</literal> の <literal>N</literal>個の
1012
要素が<literal>x_low</literal> <= <literal>x</literal> <= <literal>x_up</literal>の範囲の任意の <literal>x</literal> について計算される
1015
<para>外部関数は以下のように宣言を必要とします:</para>
1018
<para>Fortranの場合, 呼び出し手順を以下のようにします:</para>
1019
<programlisting role="no-scilab-exec"><![CDATA[
1020
1020
subroutine guess(x,zu,dmval)
1021
1021
double precision x,z(*), dmval(*)
1022
1022
]]></programlisting>
1025
<para>Cの場合, 関数プロトタイプを以下のようにします</para>
1026
<programlisting role="no-scilab-exec"><![CDATA[
1025
<para>Cの場合, 関数プロトタイプを以下のようにします</para>
1026
<programlisting role="no-scilab-exec"><![CDATA[
1027
1027
void fsub(double *x, double *zu, double *dmval)
1028
1028
]]></programlisting>
1031
<para>そしてScilab上では, </para>
1032
<programlisting role="no-scilab-exec"><![CDATA[
1031
<para>そしてScilab上では, </para>
1032
<programlisting role="no-scilab-exec"><![CDATA[
1033
1033
function [dmval,zu]=fsub(x,parameters)
1034
1034
]]></programlisting>
1040
<term><optional_args></term>
1042
<para>以下のどれかとする必要があります:</para>
1047
<literal>guess, dfsub, dgsub, fixpnt, ndimf, ndimi, ltol, tol,
1048
ntol,nonlin, collpnt, subint, iprint, ireg, ifail
1054
もしくは,一連の<literal>arg_name=argvalue</literal>
1056
ただし <literal>arg_name</literal> は以下のどれかとなります:
1057
<literal>guess</literal>,
1058
<literal>dfsub</literal>, <literal>dgsub</literal>,
1059
<literal>fixpnt</literal>, <literal>ndimf</literal>,
1060
<literal>ndimi</literal>, <literal>ltol</literal>,
1061
<literal>tol</literal>, <literal>ntol</literal>,
1062
<literal>nonlin</literal>, <literal>collpnt</literal>,
1063
<literal>subint</literal>, <literal>iprint</literal>,
1064
<literal>ireg</literal>, <literal>ifail</literal>
1070
<literal>ifail</literal>は上記のように説明されます.
1071
<literal>ifail</literal>は選択されたオプション引数
1072
に対応する bvode コールを表示するために使用できます.
1073
もし,<literal>guess</literal> が指定された場合,
1074
<literal>iguess</literal>が 1 に設定されます.
1083
これらの関数は, 以下のように定義された ode-s の
1084
混合次数に関連するシステム多点境界値問題を解きます.
1089
<imagedata align="left">
1093
<mml:mo mml:stretchy="true">{</mml:mo>
1102
<mml:mo mml:stretchy="false">(</mml:mo>
1107
<mml:mo mml:stretchy="false">)</mml:mo>
1110
<mml:mo mml:stretchy="false">=</mml:mo>
1117
<mml:mo mml:stretchy="false">(</mml:mo>
1123
<mml:mo mml:stretchy="false">(</mml:mo>
1127
<mml:mo mml:stretchy="false">(</mml:mo>
1129
<mml:mo mml:stretchy="false">)</mml:mo>
1132
<mml:mo mml:stretchy="false">)</mml:mo>
1135
<mml:mo mml:stretchy="false">)</mml:mo>
1139
<mml:mo mml:stretchy="true">{</mml:mo>
1145
<mml:mo mml:stretchy="false">=</mml:mo>
1148
<mml:mi mml:fontstyle="normal">:</mml:mi>
1155
<mml:mo mml:stretchy="false">∈</mml:mo>
1156
<mml:mfenced mml:close="[" mml:open="]">
1186
<mml:mo mml:stretchy="false">(</mml:mo>
1189
<mml:mo mml:stretchy="false">ζ</mml:mo>
1195
<mml:mo mml:stretchy="false">(</mml:mo>
1199
<mml:mo mml:stretchy="false">(</mml:mo>
1201
<mml:mo mml:stretchy="false">ζ</mml:mo>
1204
<mml:mo mml:stretchy="false">)</mml:mo>
1207
<mml:mo mml:stretchy="false">)</mml:mo>
1210
<mml:mo mml:stretchy="false">)</mml:mo>
1212
<mml:mo mml:stretchy="false">=</mml:mo>
1217
<mml:mtext>,</mml:mtext>
1219
<mml:mo mml:stretchy="false">=</mml:mo>
1222
<mml:mi mml:fontstyle="normal">:</mml:mi>
1228
<mml:annotation mml:encoding="StarMath 5.0">left lbrace
1229
stack{u_i^(m_i)=f_i(x,z(u(x))) ~~left lbrace { binom{i=1:N}{x
1230
in left ] a_l, a_u right [} } right none# `#
1231
g_j(%zeta_j,z(u(%zeta_j))) = 0~~j=1:M} right
1243
<imagedata align="left">
1247
<mml:mo mml:stretchy="true">{</mml:mo>
1252
<mml:mo mml:stretchy="false">=</mml:mo>
1255
<mml:mo mml:stretchy="false">∑</mml:mo>
1258
<mml:mo mml:stretchy="false">=</mml:mo>
1278
<mml:mo mml:stretchy="false">(</mml:mo>
1282
<mml:mo mml:stretchy="false">(</mml:mo>
1284
<mml:mo mml:stretchy="false">)</mml:mo>
1287
<mml:mo mml:stretchy="false">)</mml:mo>
1289
<mml:mo mml:stretchy="false">=</mml:mo>
1291
<mml:mo mml:stretchy="false">[</mml:mo>
1298
<mml:mo mml:stretchy="false">(</mml:mo>
1300
<mml:mo mml:stretchy="false">)</mml:mo>
1309
<mml:mo mml:stretchy="false">(</mml:mo>
1311
<mml:mo mml:stretchy="false">)</mml:mo>
1314
<mml:mo mml:stretchy="false">⋯</mml:mo>
1319
<mml:mo mml:stretchy="false">(</mml:mo>
1325
<mml:mo mml:stretchy="false">−</mml:mo>
1328
<mml:mo mml:stretchy="false">)</mml:mo>
1332
<mml:mo mml:stretchy="false">(</mml:mo>
1334
<mml:mo mml:stretchy="false">)</mml:mo>
1338
<mml:mo mml:stretchy="false">⋯</mml:mo>
1346
<mml:mo mml:stretchy="false">(</mml:mo>
1348
<mml:mo mml:stretchy="false">)</mml:mo>
1357
<mml:mo mml:stretchy="false">(</mml:mo>
1359
<mml:mo mml:stretchy="false">)</mml:mo>
1362
<mml:mo mml:stretchy="false">⋯</mml:mo>
1368
<mml:mo mml:stretchy="false">(</mml:mo>
1374
<mml:mo mml:stretchy="false">−</mml:mo>
1377
<mml:mo mml:stretchy="false">)</mml:mo>
1381
<mml:mo mml:stretchy="false">(</mml:mo>
1383
<mml:mo mml:stretchy="false">)</mml:mo>
1386
<mml:mo mml:stretchy="false">]</mml:mo>
1403
<mml:mo mml:stretchy="false">≤</mml:mo>
1405
<mml:mo mml:stretchy="false">ζ</mml:mo>
1409
<mml:mo mml:stretchy="false">≤</mml:mo>
1410
<mml:mo mml:stretchy="false">⋯</mml:mo>
1412
<mml:mo mml:stretchy="false">≤</mml:mo>
1414
<mml:mo mml:stretchy="false">ζ</mml:mo>
1418
<mml:mo mml:stretchy="false">≤</mml:mo>
1427
<mml:annotation mml:encoding="StarMath 5.0">left lbrace stack
1428
{ M= sum from {i=1} to {N} m_i # ~# z(u(x)) =
1429
[u_1(x);u_1^{1}(x);dotsaxis u_1^(m_1-1)(x);~ dotsaxis;
1430
~u_N(x);u_N^{1}(x);dotsaxis; u_N^(m_N-1)(x)]# ~# x_l <=
1431
%zeta_1 <= dotsaxis <= %zeta_M <=x_u}right
1440
外部関数で使用され, <literal>bvode</literal> により返される
1441
引数 <literal>zu</literal> は,
1442
指定した <literal>x</literal> に関する <literal>z(u(x))</literal>の要素により
1446
解 u を近似するために使用される手法は,
1448
この方法は,i番目(i = 1:N)の要素についてm(i)-1階の連続微分が可であることを
1450
ここで, k はサブ区間毎のコロケーション点(ステージ)の数で,
1451
k .ge. max m(i) となるように選択されます.
1452
ルンゲクッタのノミナル解表現が使用されます.
1458
最初の2つの問題は参考文献の論文 [1] からの引用です.
1463
<emphasis role="bold">問題 1</emphasis> は
1464
両端で単純支持され,均等に負荷がかかった剛性が可変の梁について
1467
<para>以下のように定義することができます :</para>
1468
<para>次の4次の微分方程式を解きます:</para>
1471
<imagedata align="left">
1491
<mml:mo mml:stretchy="false">(</mml:mo>
1493
<mml:mo mml:stretchy="false">)</mml:mo>
1495
<mml:mo mml:stretchy="false">=</mml:mo>
1500
<mml:mo mml:stretchy="false">−</mml:mo>
1504
<mml:mo mml:stretchy="false">.</mml:mo>
1510
<mml:mo mml:stretchy="false">.</mml:mo>
1529
<mml:mo mml:stretchy="false">(</mml:mo>
1531
<mml:mo mml:stretchy="false">)</mml:mo>
1533
<mml:mo mml:stretchy="false">−</mml:mo>
1537
<mml:mo mml:stretchy="false">.</mml:mo>
1540
<mml:mo mml:stretchy="false">.</mml:mo>
1558
<mml:mo mml:stretchy="false">(</mml:mo>
1560
<mml:mo mml:stretchy="false">)</mml:mo>
1570
<mml:annotation mml:encoding="StarMath 5.0">d^4 over {d
1571
x^4} u(x)={1 -6*x^2*{{d^3} over {d x^3}} u(x)-6*x*{{d^2}
1572
over {d x^2}} u(x)} over x^3
1579
<para>設定する境界条件:</para>
1582
<imagedata align="left">
1586
<mml:mo mml:stretchy="true">{</mml:mo>
1593
<mml:mo mml:stretchy="false">(</mml:mo>
1595
<mml:mo mml:stretchy="false">)</mml:mo>
1597
<mml:mo mml:stretchy="false">=</mml:mo>
1619
<mml:mo mml:stretchy="false">(</mml:mo>
1621
<mml:mo mml:stretchy="false">)</mml:mo>
1625
<mml:mo mml:stretchy="false">(</mml:mo>
1627
<mml:mo mml:stretchy="false">)</mml:mo>
1629
<mml:mo mml:stretchy="false">=</mml:mo>
1639
<mml:mo mml:stretchy="false">(</mml:mo>
1641
<mml:mo mml:stretchy="false">)</mml:mo>
1643
<mml:mo mml:stretchy="false">=</mml:mo>
1665
<mml:mo mml:stretchy="false">(</mml:mo>
1667
<mml:mo mml:stretchy="false">)</mml:mo>
1671
<mml:mo mml:stretchy="false">(</mml:mo>
1673
<mml:mo mml:stretchy="false">)</mml:mo>
1675
<mml:mo mml:stretchy="false">=</mml:mo>
1682
<mml:annotation mml:encoding="StarMath 5.0">left lbrace
1683
stack{ u(1)=0# {{d^2} over {d x^2}} u(x)(1)=0# u(2)=0#
1684
{{d^2} over {d x^2}} u(x)(2)=0} right
1692
<para>この問題の厳密解は以下のようになることが知られています:</para>
1695
<imagedata align="left">
1702
<mml:mo mml:stretchy="false">(</mml:mo>
1704
<mml:mo mml:stretchy="false">)</mml:mo>
1706
<mml:mo mml:stretchy="false">=</mml:mo>
1713
<mml:mo mml:stretchy="false">(</mml:mo>
1717
<mml:mi>log</mml:mi>
1720
<mml:mo mml:stretchy="false">(</mml:mo>
1722
<mml:mo mml:stretchy="false">)</mml:mo>
1724
<mml:mo mml:stretchy="false">−</mml:mo>
1728
<mml:mo mml:stretchy="false">)</mml:mo>
1733
<mml:mo mml:stretchy="false">(</mml:mo>
1736
<mml:mo mml:stretchy="false">−</mml:mo>
1739
<mml:mo mml:stretchy="false">)</mml:mo>
1741
<mml:mo mml:stretchy="false">+</mml:mo>
1748
<mml:mo mml:stretchy="false">[</mml:mo>
1754
<mml:mo mml:stretchy="false">+</mml:mo>
1757
<mml:mo mml:stretchy="false">(</mml:mo>
1760
<mml:mo mml:stretchy="false">+</mml:mo>
1763
<mml:mo mml:stretchy="false">)</mml:mo>
1766
<mml:mi>log</mml:mi>
1769
<mml:mo mml:stretchy="false">(</mml:mo>
1771
<mml:mo mml:stretchy="false">)</mml:mo>
1773
<mml:mo mml:stretchy="false">−</mml:mo>
1778
<mml:mo mml:stretchy="false">]</mml:mo>
1781
<mml:annotation mml:encoding="StarMath 5.0">u(x)=1 over 4
1782
(10`log(2)-3)`(1-x)+ {1 over 2} [ {1 over x} + {(3+x) `
1790
<programlisting role="example"><![CDATA[
1040
<term><optional_args></term>
1042
<para>以下のどれかとする必要があります:</para>
1047
<literal>guess, dfsub, dgsub, fixpnt, ndimf, ndimi, ltol, tol,
1048
ntol,nonlin, collpnt, subint, iprint, ireg, ifail
1054
もしくは,一連の<literal>arg_name=argvalue</literal>
1056
ただし <literal>arg_name</literal> は以下のどれかとなります:
1057
<literal>guess</literal>,
1058
<literal>dfsub</literal>, <literal>dgsub</literal>,
1059
<literal>fixpnt</literal>, <literal>ndimf</literal>,
1060
<literal>ndimi</literal>, <literal>ltol</literal>,
1061
<literal>tol</literal>, <literal>ntol</literal>,
1062
<literal>nonlin</literal>, <literal>collpnt</literal>,
1063
<literal>subint</literal>, <literal>iprint</literal>,
1064
<literal>ireg</literal>, <literal>ifail</literal>
1070
<literal>ifail</literal>は上記のように説明されます.
1071
<literal>ifail</literal>は選択されたオプション引数
1072
に対応する bvode コールを表示するために使用できます.
1073
もし,<literal>guess</literal> が指定された場合,
1074
<literal>iguess</literal>が 1 に設定されます.
1083
これらの関数は, 以下のように定義された ode-s の
1084
混合次数に関連するシステム多点境界値問題を解きます.
1089
<imagedata align="left">
1093
<mml:mo mml:stretchy="true">{</mml:mo>
1102
<mml:mo mml:stretchy="false">(</mml:mo>
1107
<mml:mo mml:stretchy="false">)</mml:mo>
1110
<mml:mo mml:stretchy="false">=</mml:mo>
1117
<mml:mo mml:stretchy="false">(</mml:mo>
1123
<mml:mo mml:stretchy="false">(</mml:mo>
1127
<mml:mo mml:stretchy="false">(</mml:mo>
1129
<mml:mo mml:stretchy="false">)</mml:mo>
1132
<mml:mo mml:stretchy="false">)</mml:mo>
1135
<mml:mo mml:stretchy="false">)</mml:mo>
1139
<mml:mo mml:stretchy="true">{</mml:mo>
1145
<mml:mo mml:stretchy="false">=</mml:mo>
1148
<mml:mi mml:fontstyle="normal">:</mml:mi>
1155
<mml:mo mml:stretchy="false">∈</mml:mo>
1156
<mml:mfenced mml:close="[" mml:open="]">
1186
<mml:mo mml:stretchy="false">(</mml:mo>
1189
<mml:mo mml:stretchy="false">ζ</mml:mo>
1195
<mml:mo mml:stretchy="false">(</mml:mo>
1199
<mml:mo mml:stretchy="false">(</mml:mo>
1201
<mml:mo mml:stretchy="false">ζ</mml:mo>
1204
<mml:mo mml:stretchy="false">)</mml:mo>
1207
<mml:mo mml:stretchy="false">)</mml:mo>
1210
<mml:mo mml:stretchy="false">)</mml:mo>
1212
<mml:mo mml:stretchy="false">=</mml:mo>
1217
<mml:mtext>,</mml:mtext>
1219
<mml:mo mml:stretchy="false">=</mml:mo>
1222
<mml:mi mml:fontstyle="normal">:</mml:mi>
1228
<mml:annotation mml:encoding="StarMath 5.0">left lbrace
1229
stack{u_i^(m_i)=f_i(x,z(u(x))) ~~left lbrace { binom{i=1:N}{x
1230
in left ] a_l, a_u right [} } right none# `#
1231
g_j(%zeta_j,z(u(%zeta_j))) = 0~~j=1:M} right
1243
<imagedata align="left">
1247
<mml:mo mml:stretchy="true">{</mml:mo>
1252
<mml:mo mml:stretchy="false">=</mml:mo>
1255
<mml:mo mml:stretchy="false">∑</mml:mo>
1258
<mml:mo mml:stretchy="false">=</mml:mo>
1278
<mml:mo mml:stretchy="false">(</mml:mo>
1282
<mml:mo mml:stretchy="false">(</mml:mo>
1284
<mml:mo mml:stretchy="false">)</mml:mo>
1287
<mml:mo mml:stretchy="false">)</mml:mo>
1289
<mml:mo mml:stretchy="false">=</mml:mo>
1291
<mml:mo mml:stretchy="false">[</mml:mo>
1298
<mml:mo mml:stretchy="false">(</mml:mo>
1300
<mml:mo mml:stretchy="false">)</mml:mo>
1309
<mml:mo mml:stretchy="false">(</mml:mo>
1311
<mml:mo mml:stretchy="false">)</mml:mo>
1314
<mml:mo mml:stretchy="false">⋯</mml:mo>
1319
<mml:mo mml:stretchy="false">(</mml:mo>
1325
<mml:mo mml:stretchy="false">−</mml:mo>
1328
<mml:mo mml:stretchy="false">)</mml:mo>
1332
<mml:mo mml:stretchy="false">(</mml:mo>
1334
<mml:mo mml:stretchy="false">)</mml:mo>
1338
<mml:mo mml:stretchy="false">⋯</mml:mo>
1346
<mml:mo mml:stretchy="false">(</mml:mo>
1348
<mml:mo mml:stretchy="false">)</mml:mo>
1357
<mml:mo mml:stretchy="false">(</mml:mo>
1359
<mml:mo mml:stretchy="false">)</mml:mo>
1362
<mml:mo mml:stretchy="false">⋯</mml:mo>
1368
<mml:mo mml:stretchy="false">(</mml:mo>
1374
<mml:mo mml:stretchy="false">−</mml:mo>
1377
<mml:mo mml:stretchy="false">)</mml:mo>
1381
<mml:mo mml:stretchy="false">(</mml:mo>
1383
<mml:mo mml:stretchy="false">)</mml:mo>
1386
<mml:mo mml:stretchy="false">]</mml:mo>
1403
<mml:mo mml:stretchy="false">≤</mml:mo>
1405
<mml:mo mml:stretchy="false">ζ</mml:mo>
1409
<mml:mo mml:stretchy="false">≤</mml:mo>
1410
<mml:mo mml:stretchy="false">⋯</mml:mo>
1412
<mml:mo mml:stretchy="false">≤</mml:mo>
1414
<mml:mo mml:stretchy="false">ζ</mml:mo>
1418
<mml:mo mml:stretchy="false">≤</mml:mo>
1427
<mml:annotation mml:encoding="StarMath 5.0">left lbrace stack
1428
{ M= sum from {i=1} to {N} m_i # ~# z(u(x)) =
1429
[u_1(x);u_1^{1}(x);dotsaxis u_1^(m_1-1)(x);~ dotsaxis;
1430
~u_N(x);u_N^{1}(x);dotsaxis; u_N^(m_N-1)(x)]# ~# x_l <=
1431
%zeta_1 <= dotsaxis <= %zeta_M <=x_u}right
1440
外部関数で使用され, <literal>bvode</literal> により返される
1441
引数 <literal>zu</literal> は,
1442
指定した <literal>x</literal> に関する <literal>z(u(x))</literal>の要素により
1446
解 u を近似するために使用される手法は,
1448
この方法は,i番目(i = 1:N)の要素についてm(i)-1階の連続微分が可であることを
1450
ここで, k はサブ区間毎のコロケーション点(ステージ)の数で,
1451
k .ge. max m(i) となるように選択されます.
1452
ルンゲクッタのノミナル解表現が使用されます.
1458
最初の2つの問題は参考文献の論文 [1] からの引用です.
1463
<emphasis role="bold">問題 1</emphasis> は
1464
両端で単純支持され,均等に負荷がかかった剛性が可変の梁について
1467
<para>以下のように定義することができます :</para>
1468
<para>次の4次の微分方程式を解きます:</para>
1471
<imagedata align="left">
1491
<mml:mo mml:stretchy="false">(</mml:mo>
1493
<mml:mo mml:stretchy="false">)</mml:mo>
1495
<mml:mo mml:stretchy="false">=</mml:mo>
1500
<mml:mo mml:stretchy="false">−</mml:mo>
1504
<mml:mo mml:stretchy="false">.</mml:mo>
1510
<mml:mo mml:stretchy="false">.</mml:mo>
1529
<mml:mo mml:stretchy="false">(</mml:mo>
1531
<mml:mo mml:stretchy="false">)</mml:mo>
1533
<mml:mo mml:stretchy="false">−</mml:mo>
1537
<mml:mo mml:stretchy="false">.</mml:mo>
1540
<mml:mo mml:stretchy="false">.</mml:mo>
1558
<mml:mo mml:stretchy="false">(</mml:mo>
1560
<mml:mo mml:stretchy="false">)</mml:mo>
1570
<mml:annotation mml:encoding="StarMath 5.0">d^4 over {d
1571
x^4} u(x)={1 -6*x^2*{{d^3} over {d x^3}} u(x)-6*x*{{d^2}
1572
over {d x^2}} u(x)} over x^3
1579
<para>設定する境界条件:</para>
1582
<imagedata align="left">
1586
<mml:mo mml:stretchy="true">{</mml:mo>
1593
<mml:mo mml:stretchy="false">(</mml:mo>
1595
<mml:mo mml:stretchy="false">)</mml:mo>
1597
<mml:mo mml:stretchy="false">=</mml:mo>
1619
<mml:mo mml:stretchy="false">(</mml:mo>
1621
<mml:mo mml:stretchy="false">)</mml:mo>
1625
<mml:mo mml:stretchy="false">(</mml:mo>
1627
<mml:mo mml:stretchy="false">)</mml:mo>
1629
<mml:mo mml:stretchy="false">=</mml:mo>
1639
<mml:mo mml:stretchy="false">(</mml:mo>
1641
<mml:mo mml:stretchy="false">)</mml:mo>
1643
<mml:mo mml:stretchy="false">=</mml:mo>
1665
<mml:mo mml:stretchy="false">(</mml:mo>
1667
<mml:mo mml:stretchy="false">)</mml:mo>
1671
<mml:mo mml:stretchy="false">(</mml:mo>
1673
<mml:mo mml:stretchy="false">)</mml:mo>
1675
<mml:mo mml:stretchy="false">=</mml:mo>
1682
<mml:annotation mml:encoding="StarMath 5.0">left lbrace
1683
stack{ u(1)=0# {{d^2} over {d x^2}} u(x)(1)=0# u(2)=0#
1684
{{d^2} over {d x^2}} u(x)(2)=0} right
1692
<para>この問題の厳密解は以下のようになることが知られています:</para>
1695
<imagedata align="left">
1702
<mml:mo mml:stretchy="false">(</mml:mo>
1704
<mml:mo mml:stretchy="false">)</mml:mo>
1706
<mml:mo mml:stretchy="false">=</mml:mo>
1713
<mml:mo mml:stretchy="false">(</mml:mo>
1717
<mml:mi>log</mml:mi>
1720
<mml:mo mml:stretchy="false">(</mml:mo>
1722
<mml:mo mml:stretchy="false">)</mml:mo>
1724
<mml:mo mml:stretchy="false">−</mml:mo>
1728
<mml:mo mml:stretchy="false">)</mml:mo>
1733
<mml:mo mml:stretchy="false">(</mml:mo>
1736
<mml:mo mml:stretchy="false">−</mml:mo>
1739
<mml:mo mml:stretchy="false">)</mml:mo>
1741
<mml:mo mml:stretchy="false">+</mml:mo>
1748
<mml:mo mml:stretchy="false">[</mml:mo>
1754
<mml:mo mml:stretchy="false">+</mml:mo>
1757
<mml:mo mml:stretchy="false">(</mml:mo>
1760
<mml:mo mml:stretchy="false">+</mml:mo>
1763
<mml:mo mml:stretchy="false">)</mml:mo>
1766
<mml:mi>log</mml:mi>
1769
<mml:mo mml:stretchy="false">(</mml:mo>
1771
<mml:mo mml:stretchy="false">)</mml:mo>
1773
<mml:mo mml:stretchy="false">−</mml:mo>
1778
<mml:mo mml:stretchy="false">]</mml:mo>
1781
<mml:annotation mml:encoding="StarMath 5.0">u(x)=1 over 4
1782
(10`log(2)-3)`(1-x)+ {1 over 2} [ {1 over x} + {(3+x) `
1790
<programlisting role="example"><![CDATA[
1791
1791
N=1;// just one differential equation
1792
1792
m=4;//a fourth order differential equation