1. 程式人生 > 實用技巧 >c語言 牛頓迭代法求解高階一元方程

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站的一個視訊,視訊中已經給出了思路,程式碼還需要自行思考