5-埃特金加速迭代算法

作者在 2008-05-10 21:10:15 发布以下内容

#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();

}

大小: 1.07 KB
版本: V1.0
出品: 本站原创
来源: 本地
语言: 简体中文
授权: 免费
默认分类 | 阅读 868 次
文章评论,共0条
游客请输入验证码
文章分类
文章归档