Implementacja metody gaussa-seidla
Ostatnio zmodyfikowano 2016-04-03 09:16
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. #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; }
|
|
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 |
|
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. |
|
« 1 » |