【问题标题】:Jacobi Iterative Method. (Help me with the output)Jacobi 迭代法。 (帮助我输出)
【发布时间】:2012-03-20 02:19:53
【问题描述】:

问题是输出应该显示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();

    }
}

【问题讨论】:

  • 您在调试器中查看过 x 的内容吗?它包含多少项?
  • 我认为问题出在最后一个 FOR LOOP。但我不知道如何解决它。对不起,我只是编程的初学者。:(
  • @BossJeric:请将您的问题标记为 C 或 C++,而不是两者。 (see the tag wiki for details)

标签: c++ c iteration


【解决方案1】:

在我看来,您的打印语句在您的 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,我建议您开始使用。这些编辑器通常有括号突出显示/匹配,因此您可以轻松捕捉这些内容。

【讨论】:

  • 是的,你是对的。我实际上想在每次迭代时打印 x、y 和 z 的值。
  • 实际上,它看起来可能已被编辑,以便打印语句在您的迭代循环中。您在if (big&lt;=e) 分支中有一个我不理解的退出命令,这可能是您的问题。用户 120115 似乎有更多的细节,我会看看它。
  • 我不知道如何将他的代码放入我的程序中。你会帮我吗?请? :(
  • 使用调试器。单步执行您的代码。找出你的算法在哪里做错了。抱歉,我无法为您编写代码。
猜你喜欢
  • 2022-01-08
  • 2014-03-07
  • 1970-01-01
  • 2013-02-12
  • 2018-10-13
  • 2010-10-24
  • 2013-11-14
  • 2019-05-11
  • 2021-05-21
相关资源
最近更新 更多