Итерационный метод Якоби. (Помогите мне с выводом)

Проблема в том, что на выходе должны отображаться значения x, y и z с первой и до последней итерации, где 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();

    }
}

person Boss Jeric    schedule 20.03.2012    source источник
comment
Вы взглянули на содержимое x в отладчике? Сколько предметов в нем содержится?   -  person    schedule 20.03.2012
comment
Я думаю, что проблема в последнем FOR LOOP. Но я не знаю, как это исправить. Извините, я только новичок в программировании. :(   -  person Boss Jeric    schedule 20.03.2012
comment
@BossJeric: Пожалуйста, отметьте свой вопрос как C или C++, а не оба сразу. (подробности см. в вики тегов)   -  person Timothy Jones    schedule 20.03.2012


Ответы (1)


Мне кажется, что ваши операторы печати находятся за пределами вашего цикла for. Если вы пытаетесь распечатать значения на каждой итерации, вам нужно что-то вроде следующего:

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

Если вы еще не используете IDE, такую ​​как Eclipse, Visual Studio или даже Emacs/Vi, я предлагаю вам начать. Эти редакторы часто имеют выделение/сопоставление скобок, поэтому вы можете легко уловить эти вещи.

person Mosby    schedule 20.03.2012
comment
да ты прав. Я действительно хочу печатать значения x, y и z на каждой итерации. - person Boss Jeric; 20.03.2012
comment
На самом деле, похоже, что он был отредактирован так, что оператор печати находится в вашем цикле итерации. У вас есть команда выхода, которую я не понимаю в вашей ветке if (big<=e), которая может быть вашей проблемой. У пользователя 120115, похоже, гораздо больше подробностей, я бы посмотрел на него. - person Mosby; 20.03.2012
comment
Я не знаю, как поместить его коды в мою программу. Ты мне поможешь? ПОЖАЛУЙСТА? :( - person Boss Jeric; 20.03.2012
comment
Используйте отладчик. Пройдитесь по своему коду. Выясните, где ваш алгоритм делает что-то не так. Я не могу написать ваш код для вас, извините. - person Mosby; 20.03.2012