一、牛顿法概念
二、图形示例
牛顿法以点的切线与x轴的交点作为下一次迭代的
,依次类推,逐渐逼近。
二、牛顿法特点
牛顿法的优点是收敛速度快,特别是当接近根的时候。然而,它也有以下缺点:
- 需要计算函数的导数。
- 收敛速度和初始猜测值的选择有很大关系,如果初始值选择不当,可能会导致不收敛。
- 对于多根的方程,可能会收敛到非期望的根。
三、示例
以方程 为例
迭代公式:
迭代次数0:令
迭代次数1:
依次类推,,,
四、代码
/*********
求解方程:
f(x) = x^2 - 115
迭代公式:
x_(k+1) = x_(k) - (x_(k)^2 - 115)/2*x_(k);
*/
#include <cmath>
#include <iostream>
bool NewTon(const float x, float& next_x) {
const float e = 0.001;
float fx = x*x - 115;
if(std::fabs(fx) <= e) { //迭代终止条件
return false;
}
next_x = x - fx/(2 * x);
return true;
}
int main() {
float x = 5.0;
std::cout << "迭代次数:0: x = " << x << std::endl;
int iteration = 500;
while (iteration-- > 0) {
if(!NewTon(x, x)) {
break;
}
std::cout << "迭代次数:" << 500 - iteration << ", x = " << x << std::endl;
}
std::cout << "最终结果: x = " << x << std::endl;
return 0;
}
输出结果:
迭代次数:0: x = 5
迭代次数:1, x = 14
迭代次数:2, x = 11.1071
迭代次数:3, x = 10.7304
迭代次数:4, x = 10.7238
最终结果: x = 10.7238