#include "stdio.h"
#include "conio.h"
#include "math.h"
#define MaxK 100 /*最大迭代次数*/
#define EPS 0.5e-3
double g(double x){ return x*x*x-1;} /*迭代函数*/
int aitken(double (*g)(double), double &x, double eps)
{
double yk,zk,xk;
int i=0;
printf("k\t\t xk\t\t\t yk\t\t zk\t\t xk+1\n");
printf("--------------------------------------------------------------------------------");
printf("%d\t\t%f\t",i,x);
yk=g(x);
zk = g(yk);
xk=x - ( ((yk-x)*(yk-x)) / (zk - 2*yk +x) );
printf("\t%f\t%f\t%f",yk,zk,xk);
do
{
x=xk;
printf("%d\t\t%f",i+1,x);
yk=g(x);
zk = g(yk);
xk=x - ( ((yk-x)*(yk-x)) / (zk - 2*yk +x) );
printf("\t\t%f\t%f\t%f",yk,zk,xk);
i++;
}while( fabs(xk-x) > eps );
x = xk;
return i+1 ;
}
void main()
{
double x=0.6;
int k;
k = aitken(g,x,EPS);
if(k == -1) printf("迭代次数越界!\n");
else if(k == -2) printf("除零错误!\n");
else printf("\n\n经k=%d次迭代,所得方程根为:x=%f\n",k,x);
getch();
}