D 2.0
About Japanese Translation

www.digitalmars.com
Last update Thu Aug 7 22:02:26 2008

std.numeric

このモジュールは、Alexander Stepanov による Standard Template Librarynumeric ヘッダの発展途上の移植版です。

Author:
Andrei Alexandrescu, Don Clugston

template secantMethod(alias F)
関数 f の根を 点 [xn_1, x_n] (根に近いほどよい) から始めて探索する Secant法 の実装です。Num には float, double, real を指定できます。

Example:
float f(float x) {
    return cos(x) - x*x*x;
}
auto x = secantMethod(&f, 0f, 1f);
assert(approxEqual(x, 0.865474));


T findRoot(T, R)(R delegate(T) f, T a, T b);
実数関数 f(x) の実数根を囲い込み法 ( bracketing ) によって探索します。

関数 f と、f(a)f(b) の符号が異なるような区間 [a..b] が与えられると、 その区間内で f(x) の根に最も近い値 x を返します。 区間内に f(x) の根が複数ある場合、どれか一つだけが返されます。 f(x) が NaN を返した場合、この関数も NaN を返します。 それ以外の場合は、 このアルゴリズムが成功することは保証されています。

使用するアルゴリズムは TOMS748 を元にしていて、 可能な限り逆三次補完 (inverse cubic interpolation) を使用し、 それ以外の場合は放物線補間 (parabolic interpolation) またはセカント法 (secant interpolation) を使用します。 TOMS748 と比較すると、この実装は最悪ケースのパフォーマンスを 100倍以上改善し、典型的なケースのパフォーマンスを2倍改善します。 80-bit 実数では、ほとんどの場合 8 ~ 15 回の f(x) の呼び出しで マシン精度いっぱいの精度で根が得られます。最悪ケースでは、 bit数のおおよそ倍の回数の呼び出しが必要です。

References:
"On Enclosing Simple Roots of Nonlinear Equations", G. Alefeld, F.A. Potra, Yixun Shi, Mathematics of Computation 61, pp733-744 (1993). Fortran code available from www.netlib.org as algorithm TOMS478.



Tuple!(T,T,R,R) findRoot(T, R)(R delegate(T) f, T ax, T bx, R fax, R fbx, bool delegate(T lo, T hi) tolerance);
実数関数 f(x) の実数根を囲い込み法 (bracketing) で探索します。 終了条件を指定することができます。

Params:
f 解析する関数
ax f の根を含むことが保証されている初期区間 の左端
bx f の根を含むことが保証されている初期区間 の右端
fax f(ax) の値
fbx f(bx) の値。(f(ax)f(bx) は一般的に前もって知ることができます)
tolerance 探索打ち切り条件を定義します。 現在の根の下限と上限を受け取ります。 その区間を根として認めるときは true を返します。 可能な最大精度が欲しい場合は、常に false を返すことで実現可能です。

Returns:
二つの区間からなるタプルを返します。最初の2つの要素は、根 x が存在する区間で、 次の2つの要素は、その区間に対応する関数の値です。 正確な根が見つかった場合、最初の2つの要素のどちらも根そのもので、 次の2つの要素は 0 になっています。