#include "math.h"
main()
{float x,x0,f,f1; x=1.5;
do{x0=x;
f=2*x0*x0*x0-4*x0*x0+3*x0-6;
f1=6*x0*x0-8*x0+3;
x=x0-f/f1; }while(fabs(x-x0)>=1e-5);
printf ("%f\n",x); }
想请教下这一步: f1=6*x0*x0-8*x0+3; 是怎么来的 麻烦详细点 谢谢
用牛顿迭代法求下列方程在1.5附近的根:2x3-4x2+3x-6=0。
答案:3 悬赏:0
解决时间 2021-03-14 19:09
- 提问者网友:美人如花
- 2021-03-13 20:18
最佳答案
- 二级知识专家网友:你把微笑给了谁
- 2021-03-13 21:41
牛顿迭代法的步骤大概是这样的:首先给定一个初始值x0,用它来进行迭代。迭代的方法就是在点(x0,f(x0))处做曲线的切线,与横轴得到一个交点(x1,0),x1就是第一次迭代的结果,也就是方程解的一个近似。要想更靠近实际解就要继续迭代,再在点(x1,f(x1))上做切线,与横轴又会得到一个交点,然后重复这个步骤,直到达到满意的精度为止。你说的这个式子就是对式求导得到的
全部回答
- 1楼网友:劳资的心禁止访问
- 2021-03-13 23:17
#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();
}
- 2楼网友:一起来看看吧
- 2021-03-13 22:21
这个是函数求导。如:
原函数 y=x^n
他的求导就成了这个了y'=nx^(n-1)
所以其实f1+2*3*x*x-4*2*x+3-6
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯