(C语言)牛顿迭代法求方程的根

写一个函数,用牛顿迭代法求一元三次方程的近似解。方程形式为:ax3+bx2+cx+d=0。系数a、b、c、d由键盘输入。注意:只允许在/******start******/和/******end******/之间添加代码。牛顿迭代法(又称为牛顿切线法,牛顿下山法)算法如图:

设:f(x) = ax3+bx2+cx+d1. 对任意选择的x0,求出对应的方程值f(x0)和曲线上该点的切线的斜率(一阶导数)f'(x0)。 f(x)的一阶导数方程为: f'(x) = 3ax2+2bx+c2. 根据f(x0)和f'(x0),求x1:x1=X0-f(x0)/f'(x0)。3. 求f(x1), 当该值小于10-5时,x1为方程的近似解。否则继续求x2, x3, ...。本题计算中,取x0=1。图示中1 2 3 4是键盘输入。

题:
#include <stdio.h> #include <math.h>
/******start******/
/******end******/
int main(){ double a,b,c,d=0; double y;
printf("input a b c d:"); scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
y = Resolve(a,b,c,d);
printf("output:\n%.4lf\n", y);
return 0;}
/******start******/
/******end******/

#include <stdio.h> 
#include <math.h>
/******start******/
double Resolve( double,double,double,double );
/******end******/
int main()
{
    double a,b,c,d=0;
    double y;
    printf("input a b c d:");
    scanf("%lf%lf%lf%lf", &a, &b, &c, &d);
    y = Resolve(a,b,c,d);
    printf("output:\n%.4lf\n", y);
    return 0;
}
/******start******/
double f(double a,double b,double c,double d,double x)
{
return a*x*x*x + b*x*x + c*x +d ;
}
double f1(double a,double b,double c,double x)
{
return 3*a*x*x + 2*b*x + c ;
}

double Resolve( double a,double b,double c,double d )
{
double x0,x1,e;
x0=1;
e=f(a,b,c,d,x0);
do {
x1=x0-e/f1(a,b,c,x0) ;
x0=x1;
e=f(a,b,c,d,x0);
}while( e >= 1e-5 );
return x1 ;
}
/******end******/

温馨提示:内容为网友见解,仅供参考
无其他回答

C语言编程:牛顿迭代法求方程的根
① 赋值x0=1.5,即迭代初值;② 用初值x0代入方程中计算此时的f(x0)及f’(x0),程序中用变量f描述方程的值,用fd描述方程求导之后的值;③ 计算增量d=f\/fd;④ 计算下一个x,x=x0-d;⑤ 把新产生的x替换x0,为下一次迭代做好准备;⑥ 若d绝对值大于1e-3,则重复②③④⑤步。源程...

C语言编程——内容:用牛顿迭代法求一元三次方程的根。要求:由主函数调...
x=root(a,b,c,d);printf("%.1fX^3+%.1fX^2+%.1fX+%.1f=0 its root near x=1.5 is :%.4f\\n",a,b,c,d,x);getch();}

C语言 用牛顿迭代法求方程的根,并且输出迭代的次数
printf("the time is d%\\n",i,);printf("附近的根是:%5.2f\\n",x1);

求C语言 牛顿迭代法 程序~~~
用牛顿迭代法求方程 x*x*x-2*x*x-5*x+6=0在0附近的实根.程序如下:#include<math.h>#include<stdio.h>float f(float x){ return (x*x*x-2*x*x-5*x+6);}float f1(float x){ return (3*x*x-4*x-5);}void main(){ float x1=0,x; clrscr(); do { x=x1; x1=x-f(x)\/f1(x)...

C语言用牛顿迭代法求方程的根,运行正常但是输出结果错误,求助
if((fabs(x)-fabs(y))<1e-5)\/\/应该是这句错了,逻辑上不对。\/*应该改为:*\/if (fabs(x - y) < 1e-5)

C语言编程 牛顿迭代法是什么 求解
牛顿迭代法是一种常用的计算方法,这个大学大三应该学过。具体为:设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)\/f'(x0),称x1为r的一次近似值。...

牛顿迭代法的求方程的根(用C实现)
void main(){ float root(float a,float b,float c,float d);float a,b,c,d,x;printf("please input a,b,c,d:");scanf("%f%f%f",&a,&b,&c,&d); \/\/\/原来的输入格式不好,我换一下 x=root(a,b,c,d);printf("x=%10.7f\\n",x);} float root(float a,float b,float...

用牛顿迭代法编写c语言程序求方程x-e^-x=0的根
include <stdio.h> include <math.h> int main(void){ double x, x0, d;x0 = 0;do { x = x0 - (x0 - exp(-x0)) \/ (1 + exp(-x0));d = x - x0;x0 = x;} while (d >= 1e-10);printf("%.10f", x);return 0;} ...

牛顿迭代法 c语言求2xxx-4xx+3x-6=0在1. 5 附近的根
{ x0=x;x=x0-(2*pow(x0,3)-4*pow(x0,2)+3*x0-6)\/(6*pow(x0,2)-8*x0+3);} while (fabs(x-x0)>1e-5);printf("x=%f",x);return 0 } 牛顿迭代法是先给定方程f(x)=0的一个较好的近似根x,然后用迭代公示:xn+1=xn-f(xn)\/f'(xn)直至xn与xn+1相差很小为止 ...

在C#中利用牛顿迭代法求解一元二次方程的根
注意:a、b、c三个变量由一条输入语句输入,中间用逗号分隔,无需考虑虚根情况。输入输出示例 include <stdio.h> include <math.h> int main(void){ float a,b,c,x,p,q,x1,x2;scanf("%f,%f,%f",&a,&b,&c);b*b-4*a*c>=0;p = (-b)\/(2*a);q = sqrt(b*b-4*a*c)\/(...

相似回答