牛顿迭代法求方程根

发布时间 2023-04-18 21:54:43作者: jais

一、问题描述:

编写用牛顿迭代法求方程根的函数。方程为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.5,即x1.5。

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

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

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

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

6、若|x-x|=le-5,则转到3步继续执行,否则转到步骤7。

7、所求x就是方程ax3+bx2+cx+d=0的根,将其输出。

三、程序流程图

 

四、代码实现

#include <stdio.h>
#include <math.h>

float solution(float a, float b, float c, float d)
{
    float x0, f, fd, h; 
    float x = 1.5;

    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);

    return x;
}

int main()
{
    float a, b, c, d; 

    float x; 
    
    printf("请输入方程的系数:");
    
    scanf("%f %f %f %f", &a, &b, &c, &d);
    
    x = solution(a, b, c, d);
    
    printf("\n");
    
    printf("所求方程的根为:x=%f\n", x);

    return 0;
}