C++で非線形方程式を解く (反復法 または 単純代入法)
非線形方程式の解法(反復法 または 単純代入法)を利用して2の平方根を求める
1. まず, 方程式 を, と変形する.
2. の値を として処理を繰り返して行くことで解を求める.
※ただし, 曲線 の傾きが, の傾きより小さくなければ
収束しない.
例
を
と変形しても収束しない.
そこで一工夫して,
と変形してみると
傾きが, の傾きより小さくなって収束する.
#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