最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界热讯:牛顿迭代法求方程根

来源:博客园

一、问题描述:

二、设计思路:


(资料图)

1,在1附件任意取一个实数作为x1的初值,例如取x=1.5

2,把x=1.5带入方程,算出f函数和f函数的导数fd的值

3,利用公式h=f/fd 求出增量

4,用牛顿迭代公式计算下一个x的值 x=x1-h

5,用新产生的x替换调原来的x1,为下一次迭代做好准备

6,如果|x-x1|>=1e-5,则返回第3步,否则转到第7步

7,所求x就是方程的根,直接输出

三、程序流程图:

四、代码实现:

#include#includeint main(){    float a,b,c,d;//定义四个系数    float x;//x代表求的的方程根    float solution(float a,float b,float c,float d);    scanf("%f%f%f%f",&a,&b,&c,&d);    x=solution(a,b,c,d);//传参a,b,c,d进函数    printf("所求方程的根为x=%f",x);    return 0;}float solution(float a,float b,float c,float d)    {    float x1,x=1.5,f,fd,h;//先取一个x的值来带入    while(fabs(x-x1)>=1e-5)    {        x1=x;//用所求得的x代替x1原来的值,用新产生的x替换原来的x1,为下一次迭代做准备       f=a*x1*x1*x1+b*x1*x1+c*x1+d;//代表f函数的值       fd=3*a*x1*x1+2*b*x+c;//代表f函数求导后的值        h=f/fd;//计算增量        x=x1-h;//牛顿迭代公式    }    return x;    }

五、总结:

编写程序时要注意的一点是判定|x-xo|>=1e-5,许多初学者认为判定条件应该是|x-xo|<1e-5,从牛顿迭代法的原理可以看出,迭代的实质就是越来越接近方程根的精确值,最初给x所赋初值与根的精确值是相差很多了,正是因为这个我们才需要不断地进行迭代,也就是程序中循环体的功能。在经过一番迭代之后所求得的值之间的差别也越来越小,直到求得的某两个值的差的绝对值在某个范围之内时,便可结束迭代。若我们把判定条件改为|x-xo|

还是很有难度的一道题,多学多练,把复杂的步骤用变量一个一个表示出来要好做些

关键词: