kanetaiの二次記憶装置

プログラミングに関するやってみた、調べた系のものをQitaに移して、それ以外をはてブでやる運用にしようと思います。http://qiita.com/kanetai

数値計算(numerical computation)

リポジトリ

ニュートン法(Newton's method), ニュートン・ラフソン法(Newton-Raphson method)

非線型方程式 f(x)=0の反復的な数値解法の一つ。
もう少し詳しい説明はニュートン法 - Wikipedia
初期値 x_0を与えて、 x_{k+1} = x_k - \frac{f(x_k)}{f'(x_k)}を収束するまで(例えば、増分 \delta = \frac{f(x_k)}{f'(x_k)}が小さくなる( |\delta|< EPS)まで)繰り返す。初期値によっては、収束するとは限らないので、最大反復数を決めておいて、それを超えると打ち切るようにしたほうがいい。
 x_{k+1}は点 (x_k, f(x_k))の接線と x軸との交点の x座標になっている。

static interface Function {
	public double f(double x);
	public double fp(double x);
}
static double Newton(double x0, int N_MAX, Function func) throws Exception{
	double x = x0;
	for(int i = 0; i < N_MAX; ++i){
		double delta = func.f(x)/func.fp(x);
		x -= delta;
		if(equal(delta, 0)) return x;
	}
	throw new Exception();
}