ONLY DO WHAT ONLY YOU CAN DO

こけたら立ちなはれ 立ったら歩きなはれ

C#で非線形方程式を解く (ニュートン法)

非線形方程式の解法(ニュートン法)を利用して2の平方根を求める

f:id:fornext1119:20140531190701p:plain
1. まず, 関数 f(x) 上の点 (x0, f(x0)) を考える.
2. 点 (x0, f(x0)) における f(x) の接線と x軸との交点 x1x0 より解に近づいている.
3. この作業を繰り返して行くことで解を求める.

(x0, f(x0)) での接線の傾きは
f:id:fornext1119:20140601094940p:plain

なので,
f:id:fornext1119:20140601101653p:plain

この式を漸化式として用いる.

using System;

public class CS0904
{
    public static void Main()
    {
        double x0 = 2;

        while (true)
        {
            double x1 = x0 - (f0(x0) / f1(x0));
            Console.WriteLine(string.Format("{0,12:F10}", x1));

            if (Math.Abs(x1 - x0) < 0.0000000001) break;
            x0 = x1;
        }
    }
    
    private static double f0(double x)
    {
        return x * x - 2;  
    }
    private static double f1(double x)
    {
        return 2 * x;  
    }
}
1.5000000000
1.4166666667
1.4142156863
1.4142135624
1.4142135624
参考文献