「ルンゲ=クッタ法」の版間の差分

→‎用法: 訳文修正・再訳出
(→‎陽的ルンゲ=クッタ法: 英訳修正・整理)
(→‎用法: 訳文修正・再訳出)
しかし、この誤差限界は<math>p</math>が高次になると意味を成さなくなる。そのため、ステップ幅の選定には様々な[[補外法]]が提案されている。
 
== 用法計算例 ==
Ralston法 (2段の陽的ルンゲ=クッタ法) の例を示す。Ralston 法は以下のブッチャー配列で与えられる:
{| cellpadding=3px cellspacing=0px
|width="20px"| || style="border-right:1px solid;" | 0
||| style="border-right:1px solid;" | || 1/4 || 3/4
|}
次の初期値問題を解くものとする。
:<math> y' = \tan y + 1,\quad y(1)=1,\ t\in [1, 1.1].</math>
ステップの値を ''h''=0.025 とする。
 
tableau は、方法の定義のもとで同等な対応する方程式をもたらすは以下のようになる:
:<math>\begin{align} u_1 &= y_n \\
u_2k_1 &= y_n + \tfrac{2}{3}hff(t_n, u_1), \\
k_2 &= f(t_n + \tfrac23 h, y_n + \tfrac23 h k_1), \\
y_{n+1} &= y_n + h(\tfrac{1}{4}f(t_n,u_1)+\tfrac{3}{4}f(t_n+\tfrac{2}{3}h,u_2)) \end{align}</math>
y_{n+1} &= y_n + h(\tfrac14 k_1 +\tfrac34 k_2).
\end{align}</math>
 
次の初期値問題を解くものとする。
:<math> y'(t) = \tan y(t) + 1,\quad y_0 = y(1)=1,\quad t\in [1, 1.1].</math>
をステップ幅 ''h'' = 0.025 のステップ 4 回で解く。
 
以下の過程で計算が進む。数値解は下線を付した値に対応する。
 
;時刻 ''t''<sub>0</sub> = 1:
: ''y''<sub>0</sub> = <u>1</u> (初期条件).
;時刻 ''t''<sub>1</sub> = 1.025:
: ''y''<sub>0</sub> = 1,
: ''k''<sub>1</sub> = ''f'' (''t''<sub>0</sub>, ''y''<sub>0</sub>) = 2.557407725,
: ''k''<sub>2</sub> = ''f'' (''t''<sub>0</sub> + (2/3) ''h'', ''y''<sub>0</sub> + (2/3) ''h'' ''k''<sub>1</sub>) = 2.7138981184,
: ''y''<sub>1</sub> = ''y''<sub>0</sub> + ''h'' ((1/4) ''k''<sub>1</sub> + (3/4) ''k''<sub>2</sub>) = <u>1.066869388</u>.
;時刻 ''t''<sub>2</sub> = 1.05:
: ''y''<sub>1</sub> = 1.066869388,
: ''k''<sub>1</sub> = ''f'' (''t''<sub>1</sub>, ''y''<sub>1</sub>) = 2.813524695,
: ''k''<sub>2</sub> = ''f'' (''t''<sub>1</sub> + (2/3) ''h'', ''y''<sub>1</sub> + (2/3) ''h'' ''k''<sub>1</sub>),
: ''y''<sub>2</sub> = ''y''<sub>1</sub> + ''h'' ((1/4) ''k''<sub>1</sub> + (3/4) ''k''<sub>2</sub>) = <u>1.141332181</u>.
;時刻 ''t''<sub>3</sub> = 1.075:
: ''y''<sub>2</sub> = 1.141332181,
: ''k''<sub>1</sub> = ''f'' (''t''<sub>2</sub>, ''y''<sub>2</sub>) = 3.183536647,
: ''k''<sub>2</sub> = ''f'' (''t''<sub>2</sub> + (2/3) ''h'', ''y''<sub>2</sub> + (2/3) ''h'' ''k''<sub>1</sub>),
: ''y''<sub>3</sub> = ''y''<sub>2</sub> + ''h'' ((1/4) ''k''<sub>1</sub> + (3/4) ''k''<sub>2</sub>) = <u>1.227417567</u>.
;時刻 ''t''<sub>4</sub> = 1.1:
: ''y''<sub>3</sub> = 1.227417567,
: ''k''<sub>1</sub> = ''f'' (''t''<sub>3</sub>, ''y''<sub>3</sub>) = 3.796866512,
: ''k''<sub>2</sub> = ''f'' (''t''<sub>3</sub> + (2/3) ''h'', ''y''<sub>3</sub> + (2/3) ''h'' ''k''<sub>1</sub>),
: ''y''<sub>4</sub> = ''y''<sub>3</sub> + ''h'' ((1/4) ''k''<sub>1</sub> + (3/4) ''k''<sub>2</sub>) = <u>1.335079087</u>.
 
{| cellpadding=8px
|-
| <math>t_0=1</math> || ||
|-
| || <math>y_0=1</math>
|-
| <math>t_1=1.025</math>
|-
| || <math>u_1 = y_0 = 1</math> || <math>f(t_0,u_1)=2.557407725</math> || <math>u_2 = y_0 + \tfrac{2}{3}hf(t_0,u_1) = 1.042623462</math>
|-
| || colspan=3 style="border-bottom:1px solid;"|<math>y_1=y_0+h(\tfrac{1}{4} f(t_0, u_1) + \tfrac{3}{4} f(t_0+\tfrac{2}{3}h,u_2)=1.066869388</math>
|-
| <math>t_2=1.05</math>
|-
| || <math>u_1 = y_1 = 1.066869388</math> || <math>f(t_1,u_1)=2.813524695</math> || <math>u_2 = y_1 + \tfrac{2}{3}hf(t_1,u_1) = 1.113761467</math>
|-
| || colspan=3 style="border-bottom:1px solid;"| <math>y_2=y_1+h(\tfrac{1}{4} f(t_1, u_1) + \tfrac{3}{4} f(t_1+\tfrac{2}{3}h,u_2)=1.141332181</math>
|-
| <math>t_3=1.075</math>
|-
| || <math>u_1 = y_2 = 1.141332181</math> || <math>f(t_2,u_1)=3.183536647</math> || <math>u_2 = y_2 + \tfrac{2}{3}hf(t_2,u_1) = 1.194391125</math>
|-
| || colspan=3 style="border-bottom:1px solid;"| <math>y_3=y_2+h(\tfrac{1}{4} f(t_2, u_1) + \tfrac{3}{4} f(t_2+\tfrac{2}{3}h,u_2)=1.227417567</math>
|-
| <math>t_4=1.1</math>
|-
| || <math>u_1 = y_3 = 1.227417567 </math> || <math>f(t_3,u_3)=3.796866512</math> || <math>u_2 = y_3 + \tfrac{2}{3}hf(t_3,u_1) = 1.290698676</math>
|-
| || colspan=3 style="border-bottom:1px solid;"| <math>y_4=y_3+h(\tfrac{1}{4} f(t_3, u_1) + \tfrac{3}{4} f(t_3+\tfrac{2}{3}h,u_2)=1.335079087</math>
|}
数値解は下線を付した値に対応する。<math>y_i</math>の再計算を避けるために<math>f(t_i,u_1)</math>を計算する。
{{math-stub}}
 
60

回編集