牛顿迭代:
例题为求平方根:
若x*x=n,求x;
设f(x)=x*x-n;
画图可得;
当xn这点做切线,切向处与x轴相交的x(n+1)接近与x的值;
当x(n+1)再做切线时,再接近,最终,当xn-x(n+1)<0.00001 则近似与x;
f(xn)/(xn-x(n+1))=f(x)'
x(n+1)=xn-f(xn)/f(xn)'
将f(x)带入;
x(n+1)=1/2*(xn+n/xn)
//牛顿迭代
#include<stdio.h>
#include<math.h>
int main(){
int n=4;
int coun=0;
double xn=n+1;
double newxn=n;
while(fabs(xn-newxn)>0.00001)//精度小于则执行
{
xn=newxn;
newxn=0.5*(xn+n/xn);
coun++;
}
printf("%lf %d\n",xn,coun);
return 0;
}