C程序设计案例(牛顿迭代法求高次方程的根)

版权声明:本文由 Micheal 超 博客 创作,转载请附带链接,有问题欢迎交流。 https://blog.csdn.net/qq_42887760/article/details/84039135

牛顿迭代法求方程的根

1. 牛顿迭代法的几何解释

在这里插入图片描述

  • 注解: r r f ( x ) = 0 f(x)=0 的根,选取 x 0 x_0 作为 r r 的初始近似值,过点 ( x 0 , f ( x 0 ) ) (x_0,f(x_0)) 做曲线 y = f ( x ) y=f(x) 的切线 L L L : y = f ( x 0 ) + f ( x 0 ) ( x x 0 ) L:y=f(x_0)+f'(x_0)(x-x_0) ,则 L L x x 轴交点的横坐标 x 1 = x 0 f ( x 0 ) f ( x 0 ) x_1=x_0-\frac{f(x_0)}{f'(x_0)} ,称 x 1 x_1 r r 的一次近似值。过点 ( x 1 , f ( x 1 ) ) (x_1,f(x_1)) 做曲线 y = f ( x ) y=f(x) 的切线,并求该切线与 x x 轴交点的横坐标 x 2 = x 1 f ( x 1 ) f ( x 1 ) x_2=x_1-\frac{f(x_1)}{f'(x_1)} ,称 x 2 x_2 r r 的二次近似值。重复以上过程,得 r r 的近似值序列,其中, x x n+1 = x n f ( x n ) f ( x n ) =x_n-\frac{f(x_n)}{f'(x_n)} 称为 r r n + 1 n+1 次近似值,上式称为牛顿迭代公式
    以下是部分图片(本人选自百度图片),帮助理解:
    在这里插入图片描述
    在这里插入图片描述

2. 案例

题目:用牛顿迭代法求根。方程为 a x 3 + b x 2 + c x + d = 0 ax^3+bx^2+cx+d=0 ,系数 a b c d a,b,c,d 的值依次为 1,2,3,4,由主函数输入。求 x x 在 1 附近的一个实根。求出根后由主函数输出。

3. 案例分析

牛顿迭代公式为: x x n+1 = x n f ( x n ) f ( x n ) =x_n-\frac{f(x_n)}{f'(x_n)}
其中, x 0 x_0 是上一次求出的近似根,在开始是根据题设 x 0 = 1 x_0=1 (题目希望求x在1附近的一个实根,因此第一次的近似值可以设定为1)。 f ( x ) = x 3 + 2 x 2 + 3 x + 4 f(x)=x^3+2x^2+3x+4 f ( x ) f'(x) f ( x ) f(x) 的导数,所以 f ( x ) = 3 x 2 + 6 x + 3 f'(x)=3x^2+6x+3
第一次迭代, x = 1 f ( 1 ) f ( 1 ) x=1-\frac{f(1)}{f'(1)} ;第二次迭代 。。。依次类推;
一直迭代到 x x 0 < = 10 |x-x_0|<=10 -3时结束。

4.代码实现

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

float solution(float a,float b,float c,float d);

int main()
{
     float a,b,c,d;
	 printf("请输入系数a,b,c,d: ");
     scanf("%f%f%f%f",&a,&b,&c,&d);

     printf("x=%10.7f\n",solution(a,b,c,d));
     return 0;
}

float solution(float a, float b, float c,float d)
{
    float x = 1;
    float x0, f, f1;
    do
    {
        x0 = x;
        f = ((a * x0 + b)* x0 +c) * x0 + d;
        f1 = (3 * a * x0  + 2 * b) * x0 +c;
        x = x0 - f / f1;  
    }while(fabs(x - x0)>= 1e-3);

    return x;
}

参考文章
  1. https://blog.csdn.net/yyzsir/article/details/78712887
  2. https://blog.csdn.net/qq_41928880/article/details/80023335
  3. https://blog.csdn.net/qq_31029351/article/details/53311285

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42887760/article/details/84039135
今日推荐