迭代法解一元三次方程

巡山小妖精
863次浏览
2020年08月04日 01:56
最佳经验
本文由作者推荐

路口作文-煽情话


第一题
1、用牛顿迭代法解方程
求解任意的三次方程:
ax
3
+bx
2
+cx+d=0
要求a,b,c,d从键盘输入,使用循环方法编程。

解法思路:
先把求与X轴交点坐标公式放着免得忘记了
x= x1f(x2)-x2f(x1)f(x2)-f(x1)
之后比较x1的y1值和x2的y2值,如果两个为异号,那么两个x之间一定有方
程的根
如果同号,那么继续输入直到异号为止
这个时候用求交点坐标公式求出交点坐标x,它的y值同样代入求出
再次比较y与y1值,如果异号那么x与x1之间必有方程根
如果同号那么x与x2之间必有方程根
循环以上直到y的绝对值小于一个非常小的数,也就近似为0的时候,输出x
值既为方程 根......
#include
#include
#include
float a,b,c,d; 定义外部变量,使全局可以调用
float f(float x) x函数
{
float y;
y=a*x*x*x+b*x*x+c*x+d;
return y;


}

float xpoint(float x1,float x2) 求弦与x轴交点坐标
{
float y;
y=(x1*f(x2)-x2*f(x1))(f(x2)-f(x1));
return y;
}

float root(float x1,float x2) 求根函数
{
float x,y,y1;
y1=f(x1); y1为x1纵坐标
do
{
x=xpoint(x1,x2); 求x1与x2之间弦与x轴交点赋值于x
y=f(x); 代入方程中求得y
if(y*y1>0) 判断y与y1是否同号
{
x1=x;
y1=y;
}
else
x2=x;
}
while(fabs(y)>=0.00001); 设定精度
return(x);
}

void main() 主函数
{
float x1,x2,f1,f2,x;
printf(请输入一元三次方程标准形式ax^3+bx^2+cx+d=0中
printf(的值,用空格隔开n
scanf(获取abcd值并赋值
do
{
printf(输入x1 x2值,用空格隔开:n
scanf(
f1=f(x1);
f2=f(x2);
if(f1*f2>=0)
printf(之间无方程根,请重新输入n
}


while(f1*f2>=0); do...while函数为了得到x1与x2的函数值为异号,这样x1 x2
中才有根
x=root(x1,x2); 将x1 x2送到求根函数中返回值赋到x中
printf(方程中的一个根为%gn
getch();
}
我们以a b c d 分别等于1,2,3,4为例子(在vc环境下)



四大火炉城市-幼儿园教育叙事


南怀瑾语录-福利院


山雨教学设计-小班音乐游戏


中医药大学排名-泉州泰山航海职业学院


广州大学历年分数线-音乐广播稿


感恩老师作文300字-护照延期


自动化专业就业方向-十八大什么时候开


余姚中考-七一中学