牛顿迭代法:求n的平方根,先假设一猜测值X0= 1,然后根据以下公式求出X1,再将X1代入公式右边,继续求出X2…通过有效次迭代后即可求出n的平方根,Xk+1
公式:
之所以会考虑这个问题,是因为下面这道题。
下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:。例如,2的平方根为1.414214。
#include<math.h>
#include<stdio.h>
____ fun(doublea,double x0)
{double x1,y;
____;
if(fabs(x1-x0)>=0.00001)
___;
else y=x1;
return y;
}
main()
{ doublex;
printf("Enter x: ");scanf("%lf",&x);
printf("The square root of %lf is n",x,fun(x,1.0));
}
答案:【1】double【2】x1=(x0+a/x0)/2.0【3】y=fun(a,x1)
【解析】
填空1:这里要问的是函数的类型,由主函数main()对函数的调用可以得到函数的类型是double型的,当然也可以由函数的返回值语句得到。
填空2:我们看到在下一条语句中已经开始对变量x1的值进行比较了,所以这里要对x1进行赋值,由题意可知x1=(x0+a/x0)/2.0。
填空3:用C语言求平方根的方法一般有两种经典的算法,它们分别是迭代法和递归法,本题要求用递归法。该程序采用了if语句,程序的含义是当迭代结果差小于误差时进行循环。
总的来说,猜测和递推就是解题的思路。
ps:注意不要把这种类型的题目和“利用牛顿迭代法求一元高次方程在某数附近的根”混淆,他们是两码事,求某数的平方根,求某个方程的根,二者所依据的公式根本就不相同。