c语言 牛顿迭代法求解高阶一元方程

现在有一个任意的高阶一元方程,x的幂可以任意数,求解该方程的解

例如,现在有x的三次方+2x+3,求解其根

首先直接放解法代码

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

double func(double x) //函数
{
    return x*x*x+2*x+3.0;
}
double func1(double x) //导函数
{
    return 3*x*x+2.0;
}
int newton(double *x,double precision,int maxcycle) //迭代次数
{
    double x0;
    for(int i=0;i<maxcycle;i++)//迭代次数要低于规定次数
    {
        if(func1(*x)==0.0)//若通过初值,函数返回值为0
        {
            printf("迭代过程中导数为0,存在极值!\n");
            return 0;
        }
        x0=*x-func(*x)/func1(*x);//进行牛顿迭代计算,这个是迭代公式
        if(fabs(x0-*x)<precision || fabs(func(x0))<precision) //达到结束条件
            return 1;
        else //未达到结束条件
            *x=x0; //准备下一次迭代
    }
    printf("次数超过预期!\n"); //迭代次数达到,仍没有达到精度
    return 0;
}

int main()
{
    double x,precision;
    int maxcyc;//迭代次数
    printf("输入初始值x0:");
    scanf("%lf",&x);
    printf("输入最大迭代次数:");
    scanf("%d",&maxcyc);
    printf("精度:");
    scanf("%lf",&precision);
    if(newton(&x,precision,maxcyc)==1) //若函数返回值为1
        printf("该值附近的根为:%lf\n",x);
    else //若函数返回值为0
        printf("error!\n");
}

该方法采用牛顿迭代法求解,理论上可以求解任意幂次的方程,但是首先需要自行判断出一个初始点

具体的解法可以参考b站的一个视频,视频中已经给出了思路,代码还需要自行思考

posted @ 2020-12-09 20:40  雾漫大武汉  阅读(854)  评论(0编辑  收藏  举报