Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Implementacja metody gaussa-seidla

Ostatnio zmodyfikowano 2016-04-03 09:16
Autor Wiadomość
Malina94
Temat założony przez niniejszego użytkownika
Implementacja metody gaussa-seidla
» 2016-04-03 01:28:51
Witam! Próbowałam zaimplementować gaussa-seidla na postawie algorytmu zawartego na wikipedii. Niestety, algorytm działa niepoprawnie, po każdej iteracji wektor z wynikiem zawiera te same dane i nie mam pojęcia dlaczego.

C/C++
#include <iostream>

using namespace std;
#define R 4

void gaussSeidel( double ** macierz )
{
    double m = 0;
    double * X = new double[ R ];
    double * Xprev = new double[ R ];
    int iteracje = 5;
   
    for( int i = 0; i < R; i++ ) X[ i ] = 0, Xprev[ i ] = 0;
   
    while( iteracje-- ) {
       
        for( int i = 0; i < R; i++ ) {
            m = 0;
            for( int j = 0; j < i; j++ )
                 m += macierz[ i ][ j ] * X[ j ];
           
            for( int j = i + 1; j < R; j++ )
                 m -= macierz[ i ][ j ] * Xprev[ j ];
           
            X[ i ] =( macierz[ i ][ R ] - m ) / macierz[ i ][ i ];
           
        }
       
        for( int i = 0; i < R; i++ ) {
            Xprev[ i ] = X[ i ];
        }
       
        for( int k = 0; k < R; k++ ) {
            cout << "x" << k << " " << X[ k ] << endl;
        }
        cout << endl;
       
       
    }
   
    delete[] X;
    delete[] Xprev;
}

int _tmain( int argc, _TCHAR * argv[] )
{
   
    double ** macierz = NULL;
    int k = 0;
   
    macierz = new double *[ R ];
    for( int i = 0; i < R; i++ )
         macierz[ i ] = new double[ R + 1 ];
   
    double tab[] = { - 1.0, 1 / 10, - 1 / 5, 0, - 3 / 5,
        1 / 11, - 1.0, 1 / 11, - 3 / 11, - 25 / 11,
        - 1 / 5, 1 / 10, - 1.0, 1 / 10, 11 / 10,
        0, - 3 / 8, 1 / 8, - 1.0, - 15 / 8 };
   
    for( int i = 0; i < R; i++ ) {
        for( int j = 0; j < R + 1; j++ ) {
            macierz[ i ][ j ] = tab[ k ];
            k++;
        }
    }
   
    gaussSeidel( macierz );
   
    for( int i = 0; i < R; i++ )
         delete[] macierz[ i ];
   
    delete[] macierz;
    return 0;
}
P-146922
mateczek
» 2016-04-03 02:27:54
Rozumiesz algorytm?? wiesz co ma robić ??
Jeśli odpowiedzi na te pytania są twierdzące to debugger i praca krokowa. Szybko znajdziesz gdzie popełniłeś błąd. Jeśli nie rozumiesz algorytmu to gorzej.

Debugger to bardzo przydatne narzędzie https://www.youtube.com/watch?v=L9JvSHYLvuw
P-146923
Malina94
Temat założony przez niniejszego użytkownika
» 2016-04-03 09:16:10
Bez bicia się przyznam, że go jakoś bardzo nie analizowałam, po prostu próbowałam go zaimplementować. Spędziłam nad tym trochę czasu i nie umiem znaleźć błędu.

Zamykam. Troszkę zmieniłam kod i działa.
P-146931
« 1 »
  Strona 1 z 1