C语言编程:牛顿迭代法求方程的根

2*x*x*x-4*x*x+3*x-6=0
2024-12-20 17:14:22
推荐回答(2个)
回答1:

程序流程分析:
① 赋值x0=1.5,即迭代初值;
② 用初值x0代入方程中计算此时的f(x0)及f’(x0),程序中用变量f描述方程的值,用fd描述方程求导之后的值;
③ 计算增量d=f/fd;
④ 计算下一个x,x=x0-d;
⑤ 把新产生的x替换x0,为下一次迭代做好准备;
⑥ 若d绝对值大于1e-3,则重复②③④⑤步。

源程序代码:

#include
main()
{
float x,x0,d,f,fd;
x0=0;
do {
f=2*x0*x0*x0-4*x0*x0+3*x0-6;
fd=6*x0*x0-8*x0+3;
d=f/fd;
x=x0-d;
x0=x;
}while(fabs(d)>1e-3);
printf("x=%f\n",x);
}

回答2:

1234567891011121314151617181920212223242526272829303132333435363738#include #include /******start******/double Resolve( double,double,double,double );/******end******/int main(){ double a,b,c,d=0; double y; printf("input a b c d:"); scanf("%lf%lf%lf%lf", &a, &b, &c, &d); y = Resolve(a,b,c,d); printf("output:\n%.4lf\n", y); return 0;}/******start******/double f(double a,double b,double c,double d,double x){ return a*x*x*x + b*x*x + c*x +d ;}double f1(double a,double b,double c,double x){ return 3*a*x*x + 2*b*x + c ;} double Resolve( double a,double b,double c,double d ){ double x0,x1,e; x0=1; e=f(a,b,c,d,x0); do { x1=x0-e/f1(a,b,c,x0) ; x0=x1; e=f(a,b,c,d,x0); }while( e >= 1e-5 ); return x1 ;}/******end******/