MCPで接続 →

計算を入力してください

公式

広告

結果

出力されたTanh-Sinh分点
10
node/weight pairs (order n = 20)
実効 t_a 4.2
刻み幅 h 0.442105
重みの総和 1.9999993431
i t_i 分点 x_i 重み w_i
1 0.2211 0.3364317911573048 0.6309622363150247
2 0.6632 0.8074765118645584 0.296772693493876
3 1.1053 0.9711342024624363 0.0662076633937352
4 1.5474 0.9982615398799233 0.0059249094153592
5 1.9895 0.9999745093540499 0.0001318520493753
6 2.4316 0.9999999602027466 0.0000003168563807
7 2.8737 0.999999999998166 0.0000000000226176
8 3.3158 1 0
9 3.7579 1 0
10 4.2 1 0
11

この計算機でできること

本計算機は、標準区間[-1, 1]上でTanh-Sinh(二重指数型/DE)積分公式に用いる分点(ノード)\(x_i\)と、それに対応する重み\(w_i\)を生成します。これらの組が得られれば、任意の定積分を重み付き和として近似できます。すなわち、区間[-1, 1]における\(f(x)\)の積分は、\(w_i\)と\(f(x_i)\)の積の総和でおよそ表されます。

-1から1までの数直線で、求積ノードが端点付近に集まっている様子
tanh-sinhのノードは[-1, 1]の端点付近に集まり、特異点をうまく処理します。

手法と公式

Tanh-Sinh数値積分では、変数変換 \(x = \tanh\!\left(\tfrac{\pi}{2}\sinh t\right)\) を用います。この変換は実数全体\(t\)を開区間(-1, 1)へ写します。変換後の被積分関数は二重指数的に減衰するため、通常の台形公式でも驚くほど速く収束します。\(t\)を\([-t_a, t_a]\)で打ち切り、刻み幅 \(h = 2 t_a / (n - 1)\) で等間隔に\(n\)点を取ると、各点は \(t_i = -t_a + (i - 1) h\)、分点は \(x_i = \tanh\!\left(\tfrac{\pi}{2}\sinh t_i\right)\)、重みは \(w_i = h\,\tfrac{\pi}{2}\cosh t_i\) を \(\cosh^{2}\!\left(\tfrac{\pi}{2}\sinh t_i\right)\) で割った値となります。

$$x_i = \tanh\!\left(\tfrac{\pi}{2}\sinh t_i\right), \qquad w_i = \frac{h\,\tfrac{\pi}{2}\cosh t_i}{\cosh^{2}\!\left(\tfrac{\pi}{2}\sinh t_i\right)}$$ $$\text{where}\quad \left\{ \begin{aligned} t_i &= -t_a + (i-1)\,h, \quad i = 1,\dots,\text{Order }n \\ h &= \frac{2\,t_a}{\text{Order }n - 1} \\ t_a &= \mathrm{round}\!\left[\left(\text{Digits} + 1\right)^{0.46},\,1\right] \end{aligned} \right.$$
広告
tに対するtanh-sinh変換xのグラフと、tに対する釣鐘型の重み曲線
二重指数写像x(t)と急減衰する重みw(t)をtの関数として示したもの。

使い方

次数\(n\)(台形公式のサンプル点数)を選び、\(t_a\)を要求精度から自動設定するか手動入力するかを選択し、表示する有効桁数を指定します。自動モードでは半幅は \(t_a = \mathrm{round}\!\left[\left(\text{桁数} + 1\right)^{0.46}, 1\right]\) で決まり、22桁の場合は既定値 \(t_a = 4.2\) になります。「半分のみ」を選ぶと対称性 \(x_{-i} = -x_i\)、\(w_{-i} = w_i\) を利用して非負側だけを返し、「全点」を選ぶと-1付近から+1付近まですべての分点を一覧表示します。

計算例

\(n = 3\)、手動で \(t_a = 4\)、「全点」を選んだ場合:\(h = 8 / 2 = 4\)。3つの\(t\)値は \(-4\)、\(0\)、\(4\) となります。\(t = 0\) では \(x = \tanh(0) = 0\)、\(w = \tfrac{\pi}{2} h = 1.5707963 \times 4 = 6.2831853\) です。\(t = \pm 4\) では引数 \(\tfrac{\pi}{2}\sinh(4)\) が非常に大きいため、\(x\)は\(\pm 1\)に飽和し、重みはアンダーフローしてほぼ0になります。\(n\)を大きくし適切な\(t_a\)を設定すれば、重みの総和は約2、すなわち区間[-1, 1]における\(f = 1\)の正確な積分値に近づきます。

よくある質問

端点の重みがほぼ0になるのはなぜ? 二重指数的な減衰により、端付近では \(\cosh^{2}\!\left(\tfrac{\pi}{2}\sinh t\right)\) がオーバーフローするほど大きくなるため、これらの重みは消失します。これこそがこの公式が高精度である理由です。

ここでいう「次数\(n\)」とは? \([-t_a, t_a]\)に等間隔に並べた台形公式の点数のことです。点数を増やし、適切な\(t_a\)を設定するほど精度が向上します。

一般の区間[a, b]で積分できますか? できます。スケール変換すればよく、\(x = (b - a)/2 \times x_i + (a + b)/2\) と置き換え、各重みに \((b - a)/2\) を掛けてください。

最終更新: