问题. 牛顿迭代法求ax^3+bx^2+cx+d=0在1附近的根。(系数由用户自己输入)
因为此方法本身是数学问题这里不做讨论也无须讨论。进入我们编程的主题。
记住此法核心的公式:x = x0-f(x0)/f'(x0). 我们令x1=f(x0),x2=f'(x0),这样写起来简洁明了。
步骤: (1 ) 在1附近任意找一个实数作为x0的初始值,如此题,我们取x=1,让x0=x,即x0=1.
(2) 用初始值x0带入方程计算出f(x0)和f'(x0).即求出x1和x2;
(3) 带入上述核心公式计算出x = x0-f(x0)/f'(x0)的值。
(4) 用新产生的x替换原来的x0,为下一次迭代做准备。
(5) 若|x-x0|>=1e-5;则继续上述迭代,否则转(6).
(6) 所得x即为多远方程ax^3+bx^2+cx+d=0的根,输出。
代码如下:(经过VS2008测试无误 测试输入1,2,3,4 输出:-1.65)
#include<stdio.h>
#include<math.h>
double getRes(double a,double b,double c,double d){
doublex=1,x0,x1,x2;
do{
x0=x;
x1=a*x*x*x+b*x*x+c*x+d;
x2=3*a*x*x+2*b*x+c;
x=x0-x1/x2;
}while(fabs(x-x0)>=1e-5);
return x;
}
int main(){
doublea,b,c,d;
scanf("%lf,%lf,%lf,%lf",&a,&b,&c,&d);
printf("x=%.2lf\n",getRes(a,b,c,d));
return 0;
}