Copyright (c) 2016,
烟台大学计算机与控制学院 All ringts reserved.
文件名称:OJ总结<6>-牛顿迭代法
作 者:王兴振
完成日期:2016年11月14日
版 本 号:未知
题目描述
用牛顿迭代法求根。方程为ax3+bx2+cx+d=0。系数a,b,c,d的值一次为1,2,3,4,由主函数输入。
求x在1附近的一个实根。求出根后由主函数输出。结果保留两位小数。
输 入:
系数a,b,c,d的值
输 出:
x在1附近的一个实根
样例输入:
1 2 3 4
样例输出:
-1.65
提 示:
主函数已给定如下,提交时不需要包含下述主函数
/* C代码 */
int main()
{
double solut(double ,double ,double ,double );
double a,b,c,d;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
printf("%.2f",solut(a,b,c,d));;
return 0;
}
/* C++代码 */
int main()
{
double solut(double ,double ,double ,double );
double a,b,c,d;
cin>>a>>b>>c>>d;
cout<<setiosflags(ios::fixed);
cout<<setprecision(2);
cout<<solut(a,b,c,d)<<endl;
return 0;
}
答 案:
#include<math.h>
double solut(double a,double b,double c,double d);
int main()
{
double solut(double ,double ,double ,double );
double a,b,c,d;
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
printf("%.2f",solut(a,b,c,d));
return 0;
}
double solut(double a,double b,double c,double d)
{
double f,f1,x=1,x1=0;
while(fabs(x-x1)>(1e-5))
{
x1=x;
f=x*(x*(a*x+b)+c)+d;
f1=x*(3*a*x+2*b)+c;
x=x1-f/f1;
}
return x;
}