(C语言)牛顿迭代法求方程的根
写一个函数,用牛顿迭代法求一元三次方程的近似解。方程形式为:ax3+bx2+cx+d=0。系数a、b、c、d由键盘输入。注意:只允许在/******start******...
写一个函数,用牛顿迭代法求一元三次方程的近似解。方程形式为: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******/ 展开
设: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******/ 展开
1个回答
展开全部
#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******/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询