用迭代法怎么解一元三次方程
展开全部
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");
}
、用牛顿迭代法解方程
求解任意的三次方程:
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");
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |