牛顿迭代法解一元三次方程

1、算法设计原理分析

使用牛顿迭代法求一元高次方程的解,设x是f(x) = 0的根,选取x0作为x初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f’(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f’(x0),称x1为x的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f’(x1),称x2为x的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f’(x (n)),称为x的n+1次近似值。

需要注意的是牛顿迭代法只能求解有解方程。

2、程序设计

//牛顿迭代法求解一元三次方程的近似解

#include<stdio.h>

#include<math.h>

void root(float a,float b,float c,float d,float num);

int main()

{

       double a,b,c,d,n=0,f,f0;

       int flag=0;

       printf("请依次输入一元三次方程的系数:\n");

       scanf("%lf%lf%lf%lf",&a,&b,&c,&d);

       do

       {

              printf("请你输入一个可能为方程解的数字:\n");

              scanf("%lf",&n);

              root(a,b,c,d,n);

              printf("请问是否想再输入一个可能的方程解:(想:1,不想:0)\n");

              scanf("%d",&flag);

       }while(flag==1);

       return 0;

 }



void root(float a,float b,float c,float d,float num)

{

        float x=num,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-6);

        printf( "该方程的一个解为%lf\n",x);

}

3、运行结果

《牛顿迭代法解一元三次方程》

 

4、算法分析(复杂度)

牛顿迭代法的时间复杂度与精确度以及近似解的估计值有关,这是一种通过收敛的方式求解方程解的方式,讨论时间复杂度很困难。

5、解题收获

学习了牛顿迭代法,牛顿法是采用了局部收敛的方式来求近似解,当初始点选择不当时,往往导致不收敛,而无法求出近似解。

    原文作者:余皛
    原文地址: https://blog.csdn.net/qq_52496633/article/details/122683238
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞