用牛顿迭代法求方程:2*pow(x,3)-4*pow(x,2)+3*x-6=0在1.5附近的根。
假定初值为x[0], 则迭代公式为:x[n+1]=x[n]-f(x[n])/df(x[n])
结束迭代过程的条件为:
|f(x[n+1])|<1.e-9 与 |x[n+1]-x[n]|<1.e-9 同时成立。
程序运行结果如下:
2
注意: df(x[n])表示f(x)取导数后在x[n]处的值。
分析:根据公式……然后翻译就好了,我习惯把函数都写成子程序,比较方便调用
double f(double x){ double res; res=2*x*x*x-4*x*x+3*x-6; return res; } double f1(double x){ double res; res=6*x*x-8*x+3; return res; }订好x,y的初值,按照题目的描述,然后按照递推公式进行递推,选择终止条件就OK了(注意正向用while的逻辑关系)
double x,y,t=1e-8; x=1.5;y=1.5; while ((fabs(f(y))>=t)|(fabs(y-x)>=t)){ x=y; y=x-f(x)/f1(x); }