用迭代法解一元三次方程的C++程序
学会放弃-关于教师的名言警句
#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(