MCPで接続 →

計算を入力してください

公式

広告

結果

Approximate y at x = 1
0.761577877980713414
y_n = f(xn)(2次ルンゲクッタ法・中点法による)
ステップ幅 h = (xn - x0)/n 0.02
分割数 n 50
i x_i y_i
0 0 0
1 0.0200000000000000004 0.0199980000000000019
2 0.0400000000000000008 0.0399800071983202471
3 0.0599999999999999978 0.0599300791260564958
4 0.0800000000000000017 0.0798323752456768093
5 0.100000000000000006 0.0996712070597656069
6 0.119999999999999996 0.119431087194065227
7 0.140000000000000013 0.139096777131368088
8 0.160000000000000003 0.158653333288278714
9 0.179999999999999993 0.178086151145683907
10 0.200000000000000011 0.197381007165616462
11 0.220000000000000001 0.216524098251703712
12 0.239999999999999991 0.235502078537144943
13 0.260000000000000009 0.254302093312726574
14 0.280000000000000027 0.272911809937302630
15 0.299999999999999989 0.291319445603977822
16 0.320000000000000007 0.309513791866466770
17 0.340000000000000024 0.327484235861315365
18 0.359999999999999987 0.345220778192424416
19 0.380000000000000004 0.362714047474209156
20 0.400000000000000022 0.379955311558386910
21 0.419999999999999984 0.396936485496481195
22 0.440000000000000002 0.413650136315375394
23 0.460000000000000020 0.430089484706401570
24 0.479999999999999982 0.446248403749321843
25 0.5 0.462121414811006104
26 0.520000000000000018 0.477703680774537398
27 0.540000000000000036 0.492990996767839251
28 0.560000000000000053 0.507979778571714169
29 0.579999999999999960 0.522667048895444131
30 0.599999999999999978 0.537050421713912929
31 0.619999999999999996 0.551128084863663603
32 0.640000000000000013 0.564898781096544900
33 0.660000000000000031 0.578361787788779114
34 0.680000000000000049 0.591516895500573292
35 0.700000000000000067 0.604364385576987795
36 0.719999999999999973 0.616905006974859837
37 0.739999999999999991 0.629139952493357413
38 0.760000000000000009 0.641070834577409543
39 0.780000000000000027 0.652699660854015540
40 0.800000000000000044 0.664028809551470589
41 0.820000000000000062 0.675061004941040266
42 0.839999999999999969 0.685799292929734738
43 0.859999999999999987 0.696247016921744177
44 0.880000000000000004 0.706407794054930038
45 0.900000000000000022 0.716285491907665772
46 0.920000000000000040 0.725884205760389145
47 0.940000000000000058 0.735208236485572653
48 0.959999999999999964 0.744262069129523307
49 0.979999999999999982 0.753050352239556631
50 1 0.761577877980713414

ルンゲクッタ法(2次)計算ツールとは

本ツールは、\(y' = F(x, y)\) の形をした1階常微分方程式(ODE)を、区間 \([x_0, x_n]\) にわたって数値的に解くものです。初期条件 \(y_0 = f(x_0)\) を出発点として、2次のルンゲクッタ法(中点法)を用いて計算を進め、\((x, y)\) の近似値の数表と、終端での値 \(y_n = f(x_n)\) を出力します。国や制度に依存しない、汎用的な数学ツールです。

使い方

右辺 \(F(x,y)\) を \(x\) と \(y\) を含む数式として入力します(例:1-y^2x*ysin(x)+y など)。次に初期点 \(x_0\)・\(y_0\)、計算範囲の終端 \(x_n\)、そして等分割数 \(n\) を指定してください。区間は \(n\) 等分され、各ステップ幅は $$h = \frac{x_n - x_0}{n}$$ となります。\(n\) を大きくするほどステップが細かくなり、精度が向上します。なお「表示桁数」の選択は、結果として表示する有効数字の桁数を変えるだけで、計算精度そのものには影響しません。

計算式の解説

中点法によるルンゲクッタ法は、解を1ステップずつ次のように進めます。

$$\begin{aligned} k_1 &= h \cdot F(x_i, y_i) \\ k_2 &= h \cdot F\left(x_i + \tfrac{h}{2},\; y_i + \tfrac{k_1}{2}\right) \\ y_{i+1} &= y_i + k_2, \quad x_{i+1} = x_i + h \end{aligned}$$

ステップの中点で傾きを評価することで、主要な誤差項が打ち消されます。1ステップあたりの局所打ち切り誤差は \(O(h^3)\)、全体の大域誤差は \(O(h^2)\) です。したがって \(h\) を半分にすると、誤差はおおよそ1/4になります。

広告
解曲線に沿ってRK2の1ステップを進めるために用いる中点の傾き推定を示す図
中点法ではまず傾き\(k_1\)で中点を求め、その中点の傾き\(k_2\)を使って1ステップ分進みます。

計算例

\(y' = 1 - y^2\) を \(x_0 = 0\)、\(y_0 = 0\)、\(x_n = 1\)、\(n = 50\)(このとき \(h = 0.02\))で解いてみましょう。厳密解は \(y = \tanh(x)\) です。ステップ1では $$k_1 = 0.02 \cdot (1-0) = 0.02$$ $$k_2 = 0.02 \cdot (1-0.01^2) = 0.019998$$ $$y_1 = 0.019998$$ となります。これを50ステップ続けると \(y(1) \approx 0.76159\) が得られ、\(\tanh(1) \approx 0.7615942\) と小数第5位まで一致します。

よくある質問

精度はどのくらいですか? 大域誤差が \(h^2\) に比例するため、\(n\) を大きくするほど精度は高くなります。ただし、硬い(stiff な)方程式やステップ幅が極端に大きい場合は、結果が発散することがあります。

\(x_n\) を \(x_0\) より小さくできますか? できます。その場合 \(h\) は負となり、\(x\) の負方向(後ろ向き)に積分されますが、計算としては有効です。

どんな関数が使えますか? 一般的な関数が使えます。\(\sin\)、\(\cos\)、\(\tan\)、\(\exp\)、\(\ln\)、\(\log\)、\(\sqrt{\phantom{x}}\) のほか、\(+\)、\(-\)、\(*\)、\(/\)、\(\hat{}\) と括弧、そして定数 \(e\) と \(\pi\) が利用できます。

最終更新: