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"); }