用迭代法解一元三次方程的C++程序

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

学会放弃-关于教师的名言警句



#include
#include
void main()
{
double a[3],r[3],x0,x1, f0,f1,fd,x2,x3,f2,f3;a[i]是系数,x0,x1,f0,f1是迭代法的工具,fd 是
判别二次方程根存在性的中间量。x2,x3是驻点,f2,f3是驻点的函数值。
int i,j=0;
printf(
for(i=0;i<3;i++)
{
printf(
scanf(
}
printf(
printf(
raise the question
3*x*x+2*a[0]*x+a[1]
fd=4*a[0]*a[0]-12*a[1];
if(fd<0)方程无驻点
{
x1=0;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
printf(
if(fabs(x1*x1*x1+a[0]*x1*x1+a[1]*x1+a[2])<1e-7)
printf(
}




else方程有驻点(驻点全部大于零,驻点全部小于零,驻点一个大于零一个小于零,
驻点有零点)
{
x2=(-2*a[0]-sqrt(fd))6;
x3=(-2*a[0]+sqrt(fd))6;
f2=x2*x2*x2+a[0]*x2*x2+a[1]*x2+a[2];
f3=x3*x3*x3+a[0]*x3*x3+a[1]*x3+a[2];
printf(






























































if(f2>0&&f3>0)驻点全部大于零
{
x1=x2-1;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
printf(
if(fabs(x1*x1*x1+a[0]*x1*x1+a[1]*x1+a[2])<1e-7)
printf(
}
















else if(f2<0&&f3<0)驻点全部小于零
{
x1=x3+1;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
printf(
if(fabs(x1*x1*x1+a[0]*x1*x1+a[1]*x1+a[2])<1e-7)
printf(
else
printf(
}
else if(f2>0&&f3<0)驻点一个大于零一个小于零























































































{
x1=x2-1;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
r[0]=x1;
x1=(x2+x3)2;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
r[1]=x1;
x1=x3+1;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
r[2]=x1;










}
printf(
for(i=0;i<3;i++)
printf(
for(i=0;i<3;i++)
if(fabs(r[i]*r[i] *r[i]+a[0]*r[i]*r[i]+a[1]*r[i]+a[2])<1e-7)
j++;
if(j==3)
printf(
else
printf(































































else驻点有零点,有重根
{
if(f2==0&&f3!=0)x2是二重根
{
r[0]=r[1]=x2;
x1=x3+1;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
r[2]=x1;
}

















else if(f3==0&&f2!=0)x3是二重根
{
r[1]=r[2]=x3;
x1=x2-1;
do
{
x0=x1;
f0=x0*x0*x0+a[0]*x0*x0+a[1]*x0+a[2];
f1=3*x0*x0+2*a[0]*x0+a[1];
x1=x0-(f0f1);
}while(fabs(x0-x1)>1e-9);
r[0]=x1;
}














elsef2=f3=0,x2是三重根
{
r[1]=r[2]=r[0]=x2;
}















}
}
}


输出功能
printf(
for(i=0;i<3;i++)
printf(
检测功能
for(i=0;i<3;i++)
if(fabs( r[i]*r[i]*r[i]+a[0]*r[i]*r[i]+a[1]*r[i]+a[2])<1e-7 )
j++;
if(j==3)
printf(
else
printf(

预科是什么意思-生物技术专业排名


记一次游戏作文-周工作总结怎么写


乒乓球事件-笑死人的中考零分作文


关于借物喻人的作文-考试后的感受


眉山职业技术学院-大会总结


中秋节银行放假吗-高一英语教学工作总结


为什么冬至要吃饺子-教师节的来历


感恩的歌-雨说教案