首页 > 其他分享 >牛顿迭代法求方程根

牛顿迭代法求方程根

时间:2023-04-19 20:25:28浏览次数:38  
标签:方程 迭代 float 牛顿 solution fd 迭代法 x1

一、问题描述:

二、设计思路:

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<stdio.h>
#include<math.h>
int 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|<le-5,则第1次的判断结果必为假,这样就能不进入循环体再次执行

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

 

标签:方程,迭代,float,牛顿,solution,fd,迭代法,x1
From: https://www.cnblogs.com/bzsc/p/17330958.html

相关文章

  • 牛顿迭代求根公式
    1,问题描述:编写用牛顿迭代法求方程根的函数。方程为ax+bx’+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。2.问题分析:牛顿迭代法是取x之后,在这个基础上,找到比更接近的方程的根,一步一步迭代,从而找到更接近方程根的近似根。3.算法设计程序流程分析......
  • 牛顿迭代法求方程根
    一、问题描述:编写用牛顿迭代法求方程根的函数。方程为ax3+bx2+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,有主函数输出。牛顿迭代法的公式是:x=x。-(f(x。)/f'(x。)),设迭代到|x-x.。|<=10-5时结束。二、设计思路1、在1附近找任一实数作为的初值x。,我们去1......
  • 1.5牛顿迭代法
    1.题目编写用牛顿迭代法求方程根的函数。方程为ax^3+bx^2+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。牛顿迭代法的公式是:x=x-f(xo),设迭代到|x-xal≤10-5时结束。2.问题分析f'(x)牛顿迭代法是取x之后,在这个基础上,找到比x更接近的方程的根,一步一......
  • 牛顿迭代法求方程根(1)
    问题描述:问题描述:用牛顿迭代法求方程的根方程为aX3+bX2+cx+d,有一根在1附近要求迭代至10-5次方以内 解题思路:问题分析:牛顿迭代法是不断接近根的方法,背景:多数方程不存在求根公式,因此求精确根比较复杂,甚至不可解,从而寻找方程的近似解就显得很重要。方法是使用*f(x)*的泰勒级......
  • 牛顿迭代法求方程根
      1.在1附近找任一实数作为x0的初值,取1.5,x0=1.5;   2.分别计算f(x),f'(x)的值   3.令h=f(x)/f'(x);   4.x=x0-h;令x0=x准备进行下一次循环;   5.若|x-x0|>=1e-5,则继续进行循环,反之输出x的值;         #include<iostream>......
  • 【230417-1】三种方法解方程:(x-2017)(x-2021)=12
    ......
  • 牛顿迭代法求方程根
    编写用牛顿迭代法求方程根的函数。方程为a*x的三次方+b*x的平方+c*x+d=0,系数a,b,c,d有主函数输入。求x在1附近的一个实根。求出根后,有主函数输出。牛顿迭代法的公式是:x=x。-f(x。)/f’(x。),设迭代到|x-x。|<=10的-5次方时结束。牛顿迭代法是在已知x0的基础上寻找更接近方程的根的值,从而......
  • w7 T232071 解方程
      主要思路:由于根与根之差的绝对值>=1,所以在单位唯一的区间内至多只有一个根。使用零点存在性定理,定义左端点left和right,若f(left)*f(right)<=0,则在区间内必有根,然后再在区间内使用二分来确定根的精度。 代码如下:#include<iostream>#include<cmath>#include<algorithm>#in......
  • day 6 牛顿迭代法求根
     1.由f(x)计算f(x)的导数;2.输入一个X,并让其作为X0进行计算;3.反复迭代X,直到|x-x0|<=1e-5;4.输出当前X; #include<iostream>#include<math.h>usingnamespacestd;intmain(){floatX,X0,a,b,c,d;printf("输入X0,a,b,c,d\n");cin>>X0>>a>>b>>......
  • 牛顿迭代法求方程根
    一问题描述用牛顿迭代方程x=x0-fx0/fx0'求根方程为a*x*x*x+b*x*x+c*x+d初始值为1.5求1的近似值二设计思路迭代方程球根套用公式将fx0和fx0'求出,再将函数判断收敛还是离散,运用fabs函数用上#include<math.h>的头文件。三程序流程图  四伪代码实现定义函数fact作为牛顿公......