牛顿法最初由艾萨克·牛顿在《流数法》(Method of Fluxions,1671年完成,在牛顿死后的1736年公开发表)。约瑟夫·拉弗森也曾于1690年在Analysis Aequationum中提出此方法。
方法说明
首先,选择一个接近函数零点的,计算相应的和切线斜率(这里表示函数的导数)。然后我们计算穿过点并且斜率为的直线和轴的交点的坐标,也就是求如下方程的解:
我们将新求得的点的坐标命名为,通常会比更接近方程的解。因此我们现在可以利用开始下一轮迭代。迭代公式可化简为如下所示:
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。
设: f(x)=x2-a=0,求 sqrt(a),使用牛顿迭代法。
|
#include "stdio.h"
#include "math.h"
int main(void)
{
double n,y=1.0;
printf("请输入一个需要求其平方根的数:");
scanf("%lf",&n);
// 反复代入 x(k+1) = 0.5[x(k)+n/x(k)]
while(fabs((1.0/2.0*(y+n/y))-y)>=1e-6)
{
y=1.0/2.0*(y+n/y);
printf( "y=%lf\n", y );
}
printf("平方根为%f\n",y);
return 0;
}