牛顿迭代法
牛顿迭代法
如果求 f(x) = 0, 求根
那么就有x(n+1) = x(n) - (f(x(n))) / f'(x(n)),可以由几何意义理解
如求根号2
则可以设 f(x) = x^2 - 2
f'(x) = 2x
x(n+1) = x(n) - (x(n)^2 - 2) / (2x(n))
cpp代码
#include <bits/stdc++.h>
float newton_iter(float x, float(*f)(float), float(*f_)(float), float eps = 1e-6){
float xn = x; // 初始化
float gx;
int i = 0;
printf("x(%d) = %f\n", i++, xn);
while (std::abs(gx = f(xn)) > eps) {
float xn_1 = xn - gx / f_(xn);
xn = xn_1;
printf("x(%d) = %f\n", i++, xn);
}
return xn;
}
int main(){
auto f = [](float x)->float{
return x * x - 2;
};
auto f_ = [](float x)->float{
return 2*x;
};
std::cout << newton_iter(2, f, f_) << std::endl;
return 0;
}