Location : Home > Languages > Perl > Package
Title : Math::Integral::Romberg
Toolbox Logo

名称

 Math::Integral::Romberg - Romberg法で数値積分を行う


概要

use Math::Integral::Romberg 'integral';
$area = integral(\&f, $x1, $x2);    # 短形式
$area = integral(\&f, $x1, $x2, $rel_err, $abs_err, $max_split, $min_split); # 長形式

# 長形式で行うことも可能
$Math::Integral::Romberg::rel_err = $rel_err;
$Math::Integral::Romberg::abs_err = $abs_err;
$Math::Integral::Romberg::max_split = $max_split;
$Math::Integral::Romberg::min_split = $min_split;
$area = integral(\&f, $x1, $x2);

説明

 integral() はシンプソン積分よりも高速なロンバーグ積分(Romberg integration)を用いて f() の数値積分を求める。

パラメータ

 

$f

 積分する関数への参照。

$x1, $x2

 積分範囲の上限と下限。&$f(x) は $x1 と $x2 において有限でなければならない

$rel_err

 許容可能な相対誤差の最大値。相対誤差及び絶対誤差の推定は 2**(n-1) + 1 箇所における推定値を用いた 2**n + 1 箇所における比較に基づく。
 $min_split に到達すれば(下記参照)計算は終了する。相対誤差が $rel_err 以下に、絶対誤差が $abs_err 以下に、または $max_split に到達しても同様である。
 指定されなければデフォルト値が 10**-10 である $Math::Integral::Romberg::rel_err を用いる。10**-15 という値は倍精度浮動小数点の精度の限界に近い。

$abs_err

  許容可能な絶対誤差の最大値。指定されなければデフォルト値が 10**-20 である $Math::Integral::Romberg::abs_err を用いる。

$max_split

 最大、2 ** $max_split + 1 箇所の異なる点の値が f() の積分値を求めるために用いられる。指定されなければデフォルト値が16(65537点に対応)である $Math::Integral::Romberg::max_split が用いられる。

$min_split

 少なくとも、2 ** $min_split + 1 箇所の異なる点の値が f() の積分値を求めるために用いられる。指定されなければデフォルト値が5(33点に対応)である $Math::Integral::Romberg::max_split が用いられる。

$Math::Integral::Romberg::return_point_count

 デフォルト値は 0。1 に設定されれば、計算値と、計算に用いられた点の数を返す。

$Math::Integral::Romberg::abort

 $rel_err にも $abs_err にも到達せずに計算が終了した場合に 1 に設定される。いったん設定されるとそのままであるので、0 に設定しなおす必要がある。

デフォルト値

 integral() の長形式を用いると、呼び出しの際に値を変更するには、収束のためのパラメータをパッケージで指定されている変数名(例えば $Math::Integral::Romberg::abs_tol)で呼び出すだけである。

アルゴリズムについて

 ロンバーグ積分はサンプル点の数の2倍の箇所における高位の多項近似式を計算に用いている。例えば1点を与えると(2**1 + 1 箇所のサンプル点における計算を行い)、2次の多項近似式を用いる(シンプソン公式ではそう)。5点を与えると(2**5 + 1 箇所のサンプル点における計算を行い)10次の多項近似式を用いる。このことにより滑らかな関数では大幅に精度はよくなるが、そうでない関数では大幅に値が異なることになる。


著者

 Eric Boesch, <ebo@notes.dannet.dk>

Toolbox Logo
Updated : 2006/07/16