用迭代法怎么解一元三次方程(数值分析的题)?
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/14 11:38:37
用迭代法怎么解一元三次方程(数值分析的题)?
用迭代法怎么解一元三次方程(数值分析的题)?
用迭代法怎么解一元三次方程(数值分析的题)?
牛顿迭代法是牛顿在17世纪提出的一种求解方程f(x)=0.多数方程不存在求根公式,从而求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要. 设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为y=f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1=x0-f(x0)/f'(x0),称x1为r的一次近似值,过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴的横坐标 x2=x1-f(x1)/f'(x1)称x2为r的二次近似值,重复以上过程,得r的近似值序列{Xn},其中Xn+1=Xn-f(Xn)/f'(Xn),称为r的n+1次近似值.上式称为牛顿迭代公式.
/*用牛顿迭代法求下面方程 x*x*x-5*x*x+16*x-80=0的实根的过程是:1.你想在谁附近求解,这个范围或者这个数值大多是题目已经给定了的(本例是根据输入的数值来计算的)2.令f(x)=x*x*x-5*x*x+16*x-803.x1=X4.求f(x1)5.对f(x)求导,得到f1(x),求f1(x1)6.调整x,使x=x1-f(x1)/f1(x1) 7.符合条件x-x1>1e-5,转到第3步8.不符合条件x-x1>1e-5,则x1就是我们要求的实根*/#include #include //y=((x-5)*x+16)*x-80
float f(float x){ return (pow(x,3)-5*pow(x,2)+16*x-80);}
float f1(float x){ return (3*pow(x,2)-10*x+16);}void main(){ float x,x1,y1,y2; printf("请输入一个任意实数:X="); scanf("%f",&x); printf("我可以帮你找到这个方程的解\n"); do { x1=x; y1=f(x); y2=f1(x1); x=x1-y1/y2; } while (fabs(x-x1)>=1e-5); printf("A root is %f\n",x1);}