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 の傾きより小さくなって収束する.

#include <stdio.h>
#include <math.h>

int main()
{
    double x = 1;

    while (true)
    {
        double dx = x;
        x = (x / 2) + (1 / x);
        printf("%12.10f\n", x);

        if (fabs(x - dx) < 0.0000000001) break;
    }
    return 0;
}
1.5000000000
1.4166666667
1.4142156863
1.4142135624
1.4142135624
参考文献