用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根

最好有这类题的
2025-01-07 02:44:02
推荐回答(2个)
回答1:

牛顿迭代法的步骤大概是这样的:首先给定一个初始值x0,用它来进行迭代。迭代的方法就是在点(x0,f(x0))处做曲线的切线,与横轴得到一个交点(x1,0),x1就是第一次迭代的结果,也就是方程解的一个近似。要想更靠近实际解就要继续迭代,再在点(x1,f(x1))上做切线,与横轴又会得到一个交点,然后重复这个步骤,直到达到满意的精度为止。你说的这个式子就是对式求导得到的

回答2:

#include

#include

#include

#define N 100

#define PS 1e-5//定义精度

#define TA 1e-5//定义精度

float Newton(float (*f)(float),float(*f1)(float),float x0 )

{ float x1,d=0;

int k=0;

do

{ x1= x0-f(x0)/f1(x0);

d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);

x0=x1;

printf("x(%d)=%f\n",k,x0);

}

while((fabs(d))>PS&&fabs(f(x1))>TA) ;

return x1;

}

float f(float x)

{ return 2*x*x*x-4*x*x+3*x-6; }

float f1(float x)

{ return 6*x*x+8*x+3; }//对方程求导

void main()

{ float f(float);

float f1(float);

float x0,y0;

printf("Input x0: ");//输入x0为1.5即求1.5附近的根

scanf("%f",&x0);

printf("x(0)=%f\n",x0);

y0=Newton(f,f1,x0);

printf("\nThe root is x=%f\n",y0);

getch();

}