牛顿迭代法求方程根

一、问题描述

  编写用牛顿迭代法求方程根的函数。方程为ax3 +bx2 +cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。

  牛顿迭代法的公式是: x=xo-f(x0)/f'(x0),设迭代到|x-x0|<=10e-5时结束。

二、牛顿迭代公式

  

 

三、解题思路

1、在1附近找任意实数作为x0的初值,我们这里取1.5,即x0=1.5.

2、用初值x0代入方程中计算此时的f(x0)以及f'(x0);程序中用变量f描述方程的值,用fd描述方程求导之后的值。

3、计算增量h=f/fd。

4、计算下一个x:x=x0-h。

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

6、若|x-x0|>=1e-5,则转到第3步继续执行,否则转到步骤7。

7、所求的x就是方程的根,并将其输出。

四、代码实现

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    double x0, x = 1.5, a, b, c, d, f, fd, h;
    cin >> a >> b >> c >> d;
    do
    {
        x0 = x;
        f = a * x0 * x0 * x0 + b * x0 * x0 + c * x0 + d;
        fd = 3 * a * x0 * x0 + 2 * b * x0 + c;
        h = f / fd;
        x = x0 - h;
    } while (fabs(x - x0) > 1e-5);
    printf("%.6f", x);
    return 0;
}
View Code
运行结果

 

posted @ 2023-04-25 22:34  海绵宝宝222  阅读(490)  评论(0编辑  收藏  举报