zoukankan      html  css  js  c++  java
  • 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,存在极值!
    ");
                return 0;
            }
            x0=*x-func(*x)/func1(*x);//进行牛顿迭代计算,这个是迭代公式
            if(fabs(x0-*x)<precision || fabs(func(x0))<precision) //达到结束条件
                return 1;
            else //未达到结束条件
                *x=x0; //准备下一次迭代
        }
        printf("次数超过预期!
    "); //迭代次数达到,仍没有达到精度
        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
    ",x);
        else //若函数返回值为0
            printf("error");
    }

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

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

  • 相关阅读:
    hive sql常用整理-hive引擎设置
    hdfs数据到hbase过程
    phoenix表操作
    HBase describe table 参数说明
    HBase 常用Shell命令
    sqoop的基本语法详解及可能遇到的错误
    Linux maven 下 jar包下载不下来的解决方法
    Linu 修改maven的setting保护文件
    Mybatis generator 自动生成代码
    Springmvc mvc:exclude-mapping不拦截 无效
  • 原文地址:https://www.cnblogs.com/oldfish123/p/14110820.html
Copyright © 2011-2022 走看看