用迭代法怎么解一元三次方程

 我来答
星敬夕夏山
2019-11-01 · TA获得超过3755个赞
知道大有可为答主
回答量:3197
采纳率:31%
帮助的人:435万
展开全部
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
<stdio.h>
#include
<math.h>
#include
<conio.h>
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("a
b
c
d
的值,用空格隔开
\n");
scanf("%f
%f
%f
%f",&a,&b,&c,&d);
//
获取
abcd
值并赋值
do
{
printf("
输入
x1
x2
值,用空格隔开
:\n");
scanf("%f
%f",&x1,&x2);
f1=f(x1);
f2=f(x2);
if(f1*f2>=0)
printf("x1
x2
之间无方程根,请重新输入
\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式