algorytm Banachiewicza-Choleskiego
Ostatnio zmodyfikowano 2015-05-06 22:04
fokusx Temat założony przez niniejszego użytkownika |
algorytm Banachiewicza-Choleskiego » 2015-05-06 22:04:45 Witam, z jakiegoś powodu nie działa mi algorytm zaimplementowany w c++. Z tego co wiem obliczone L * L(transponowane) powinno dać wynik A ale tak się nie dzieje. Mógłby mi ktoś powiedzieć co robię źle? kod: ... matrix LiczL( matrix mat ) { matrix l( mat.nRx, mat.nRy ); double suml = 0.0; for( int i = 0; i < mat.nRy; i++ ) { suml = 0.0; for( int k = 0; k < i + 1; k++ ) { for( int j = 0; j < k - 1; j++ ) { suml += l.mat[ i ][ j ] * l.mat[ k ][ j ]; } l.mat[ i ][ k ] =( i == k ) ? sqrt( mat.mat[ k ][ k ] - suml ) : 1.0 / l.mat[ k ][ k ] *( mat.mat[ i ][ k ] - suml ); } } return l; } matrix LiczY( matrix matL, matrix b ) { matrix y( 1, b.nRy ); double suml = 0.0; for( int i = 0; i < b.nRy; i++ ) { for( int j = 0; j < i - 1; j++ ) { suml += matL.mat[ i ][ j ] * y.mat[ j ][ 0 ]; } y.mat[ i ][ 0 ] =( b.mat[ i ][ 0 ] - suml ) / matL.mat[ i ][ i ]; suml = 0.0; } return y; } matrix LiczX( matrix matL, matrix y ) { matrix Nx( 1, y.nRy ); double suml = 0.0; for( int i = y.nRy - 1; i >= 0; i-- ) { for( int j = i + 1; j < y.nRy; j++ ) { suml += matL.mat[ i ][ j ] * Nx.mat[ j ][ 0 ]; } Nx.mat[ i ][ 0 ] =( y.mat[ i ][ 0 ] - suml ) / matL.mat[ i ][ i ]; suml = 0.0; } return Nx; } int main() { ... matrix L = LiczL( A ); cout << endl << endl << "\n\nMacierz L:\n"; L.print(); matrix y = LiczY( L, B ); matrix x = LiczX( L, y ); cout << "\n\nL(transponowane): \n\n"; L.transpose(); L.print(); cout << "\n\nY = L(transponowane) * X: \n\n"; y.print(); cout << "\n\nObliczone niewiadome (x): \n\n"; x.print(); return 1; }
|
|
« 1 » |