用牛顿迭代法求下面方程在1.5附近的根:2x^3-4x^2+3x-6=0
关于牛顿迭代法,在计算方法课程中讲到,简单解释下,基本公式为:
Xn+1=Xn-f(Xn)/f *(Xn) 其中Xn+1为第n+1次迭代结果,Xn为第n次迭代结果,f *(Xn)为f (Xn))的导函数值。
基本步骤:
第一步把方程改写为多项式f(x)=2x^3-4x^2+3x-6,给定初值X0;
第二步将Xn带入迭代公式Xn+1=Xn-f(Xn)/f *(Xn),求出Xn+1
第三步判断精度fabs(Xn+1-Xn)是否达到要求,满足则输出,否则返回上一步;
下面给出代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i=0;
double x1=1.5,x2=0;//迭代初值
while (fabs(x2-x1)>=1e-5)
{
x1=x1-(2*x1*x1*x1-4*x1*x1+3*x1-6)/(6*x1*x1-8*x1+3);
x2=x1-(2*x1*x1*x1-4*x1*x1+3*x1-6)/(6*x1*x1-8*x1+3);
i++;
printf("第%d次迭代 x1=%9.8f\tx2=%9.8f\n",i,x1,x2);
}
printf("\nx=%9.8f\t共迭代:%d次\n",x2,i);
return 0;
}
下面给出测试结果: