雅可比迭代法。 (帮我输出)

时间:2012-03-20 02:19:53

标签: c++ c iteration

问题是输出应显示xyz从第一次迭代到big小于或等于的最后一次迭代的值e。但问题是它只显示最后一次迭代。如何输出其他迭代?  这是我的代码:

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
void main()
{
    float a[50][50],x[50],e=0.0010,big,temp,relerror,sum;
    int n=3,i,j,maxit=50,itr;
    char ch;
    clrscr();
    for(i=1;i<=n;i++)
    {
        clrscr();
        printf("\n\t\t\t  ----EQUATION %d-----",i);
        printf("\n\tEnter your desired numerical coefficients for x, y and z\n\t\t\tthen the constant's value.\n\t   (Press enter each time you are done on your input.)\n");
        for(j=1;j<=n+1;j++)
            scanf("%f",&a[i][j]);
    }
    clrscr();
    for(i=1;i<=n;i++)
    x[i]=0;
    for(itr=1;itr<=maxit;itr++)
    {
        big=0;
        for(i=1;i<=n;i++)
        {
            sum=0;
            for(j=1;j<=n;j++)
            {
                if(i!=j)
                    sum=sum+a[i][j]*x[j];
            }
            temp=(a[i][n+1]-sum)/a[i][i];
            relerror=fabs((x[i]-temp)/temp);
            if(relerror>big)
                big=relerror;
            x[i]=temp;

        }

        if(big<=e)
        {
            printf("\t  k\t      x\t    y\t    z\t    xe\t    ye\t    et\n");
            printf("\t  %d",itr);
            for(i=1;i<=n;i++)
            printf("\t %.4f",x[i]);
            printf(" %.4f",sum);

            printf(" %.4f",big);

            while(itr>1)
            {
                itr=--itr;
                printf("\n\t  %d",itr);}
                getch();
                exit(1);

            }

        }
        printf("Does not converge in %d iteration \n",maxit);
        getch();

    }
}

1 个答案:

答案 0 :(得分:0)

在我看来,您的打印语句不在for循环中。如果您尝试在每次迭代时打印值,则需要具有以下内容:

for(int iter; iter<maxit; iter++){
  /*** DO STUFF ***/
  if(big <= e){
      /*** PRINT STUFF ***/
  }
}/* end of for iter<maxit */

如果您还没有使用Eclipse,Visual Studio甚至Emacs / Vi等IDE,我建议您开始使用。这些编辑经常会有突出显示/匹配的父母,因此您可以轻松捕捉到这些内容。