ONLY DO WHAT ONLY YOU CAN DO

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

C#で非線形方程式を解く (反復法 または 単純代入法)

非線形方程式の解法(反復法 または 単純代入法 とも言う)を利用して2の平方根を求める

1. まず, 方程式 f(x) = 0 を, x = g(x) と変形する.
2. g(x) の値を x として処理を繰り返して行くことで解を求める.
※ただし, 曲線 y = g(x) の傾きが, y = x の傾きより小さくなければ
収束しない.


f:id:fornext1119:20140601150558p:plain

f:id:fornext1119:20140601150652p:plain
と変形しても収束しない.
f:id:fornext1119:20140601150730p:plain
そこで一工夫して,
f:id:fornext1119:20140601153638p:plain

と変形してみると
f:id:fornext1119:20140601151308p:plain
傾きが, y = x の傾きより小さくなって収束する.

using System;

public class CS0903
{
    public static void Main()
    {
        double x0 = 1;

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

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