1,问题描述:
编写用牛顿迭代法求方程根的函数。方程为ax+bx’+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。
2.问题分析:
牛顿迭代法是取x之后,在这个基础上,找到比更接近的方程的根,一步一步迭代,从而找到更接近方程根的近似根。
3.算法设计
程序流程分析:
(1)在1附近找任一实数作为x。的初值,我们取1.5,即xo=1.5。
(2)用初值代入方程中计算此时的f(x)及f'(x);程序中用变量f描述方程的值用fd描述方程求导之后的值。
(3)计算增量 h=f/fd。
(4)计算下一个x:x=x0-h。
5)用新产生的x替换原来的xo,为下一次迭代做好准备。
(6)若|x-xo|>=le-5,则转到第(3)步继续执行,否则转到步骤(7)。
(7)所求x就是方程ax3+bx2+cx+d=0的根,将其输出。
4.确定程序框架:
该程序的主体结构如下:
#include<stdio.h>
#include<math.h>
main()
{/*输入方程的系数*/
/*用牛顿迭代法求方程的根*/
/*输出所求方程的根*/
5.源代码:
#include<stdio.h>
#include<math.h>
int main()
{
float solution(float a,float b,float c,float d);
float a,b,c,d,x;
printf("请输入方程的系数:");
scanf("%f %f %f %f",&a,&b,&c,&d);
x=solution(a,b,c,d);
printf("所求方程根为x=%f",x);
}
float solution(float a,float b,float c,float d)
{
float x0,x=1.5,f,fd,h;
do
{
x0=x;
f=a*x0*x0*x0+b*x0*x0+c*x0+d;
fd=3*a*x0*x0+2*b*x0+c;
h=f/fd;
x=x0-h;
}
while(fabs(x-x0)>=1e-5);
return x;
}
6.流程图:
标签:方程,迭代,float,牛顿,fd,x0,include,求根 From: https://www.cnblogs.com/tianpeisen/p/17334431.html