Metoda eliminacji Gaussa

0

Witam wszystkich.

Poniżej jest algorytm rozwiązywania układu równań liniowych metodą eliminacji Gaaussa:

Lista zmiennych:
Calkowite: n,i,p,j
Tablice: a[1..n, 1..n+1], x[1..n]

Podaj n

Dla i=1,2,...,n
{
  Dla j=1,2,...,n+1
  {
     Podaj a[i][j]
  }
}


Dla p=1,2,...,n
{
  Dla i=p+1,p+2,...,n
  {
    Dla j=p+1,p+2,...,n+1 //realizacja układu trójkątnego
    {
      a[i][j]=a[i][j]-a[i][p]/a[p][p]*a[p][j]
    }
  }
}  

x[n]=a[n][n+1]/a[n][n]

Dla i=n-1,n-2,...,1
{
  w=0;
  Dla p=i+1,1+2,...,1
  {
    w=w+a[i][p]*x[p]
  }
}
x[i]=a[i][n+1]-w/a[i][i]

Dla i==1,2,...,n
{
  Drukuj x[i]
}

Napisany przeze mnie program w C++ wygląda tak:

int main(int argc, char *argv[])
{
    int n,i,p,j;
    double m,w;
    
    
    
    /*cout<<"Podaj n: "<<endl;
    cin>>n;*/
    n=3;
    double a[3][4];
    double x[3];
    
    a[0][0]=4;
    a[0][1]=2;
    a[0][2]=-1;
    a[0][3]=7;
    a[1][0]=2;
    a[1][1]=2;
    a[1][2]=1;
    a[1][3]=9;
    a[2][0]=1;
    a[2][1]=-1;
    a[2][2]=1;
    a[2][3]=4;
    /*for(i=0;i<n;i++)
    {
         for(j=0;j<=n;j++)
         {
             cout<<"Podaj a["<<i<<"]["<<j<<"]"<<endl;
             cin>>a[i][j];
         }
    }*/
    for (p=0;p<n;p++)
    {
        for(i=p+1;i<n;i++)
        {
           for(j=p+1;j<=n;j++)
           {
              m=(a[i][p]/a[p][p]);
              a[i][j]=a[i][j]-a[p][j]*m;
              cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
           }
        }
    }
    x[n-1]=a[n-1][n]/a[n-1][n-1];
    
    for (i=n-2;i>=0;i--)
    {
        w=0;
        for(p=i+1;p<n;p++)
        {
                          
                          
                 cout<<"i="<<i<<endl;
                 cout<<"p="<<p<<endl;
                 w=w+a[i][p]*x[p];
                 cout<<"w="<<w<<endl<<endl;
                 
        }
        
        x[i]=a[i][n]-w/a[i][i];
    }
    
    for(i=0;i<n;i++)
    {
        cout<<"x"<<i+1<<"="<<x[i]<<endl;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}

Jednak daje nieprawidłowy wynik przy x[0], wynik powinien wynosić 5.75. wydaaj mi się że petla wwykonnuje o jeden obrót za dużo? . Proszę pomóżcie coś bo męcze się z tym już tydzień.

// chyba zacina Ci się literka "a" - Ł

0

A mi się wydaje, że wynik to:
x1 = 2
x2 = 1
x3 = 3

:p coś musiałeś kompletnie pomieszać

1 użytkowników online, w tym zalogowanych: 0, gości: 1