📄 埃特金.cpp
字号:
#include<math.h>
#include<stdio.h>
#define MaxK 100
#define EPS 0.5e-3
double g(double x)
{
return x*x*x-1;
}
int aitken(double &x,double eps)
{
double y,z,x0;
double x1=x;
int flag=0;//标记迭代次数
printf("x xk yk zk xk+1\n");
printf("-------------------------------------------------------------\n");
do{
x0=x1;
y=g(x0);
z=g(y);
if(z-2*y+x==0)
{flag=-2;break;//在break之后,以下的语句并不执行
}
else x1=x0-(y-x0)*(y-x0)/(z-2*y+x0);
printf("%d %f %f %f %f\n",flag,x0,y,z,x1);
flag++;
if(flag>MaxK)
{
flag=-1;break;
}
}while (fabs(x0-x1)>=eps);//精度控制
x=x1;
return flag;//如果flag的值为负数时,迭代不成功
}
void main()
{
double x=1.5;
int k;
k=aitken(x,EPS);
if(k==-1)
printf("迭代次数越界!\n");
else if(k==-2)
printf("除零错误!\n");
else printf("\n经k=%d迭代,所得方程根为:x=%f\n",k,x);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -