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

algorytm Banachiewicza-Choleskiego

Ostatnio zmodyfikowano 2015-05-06 22:04
Autor Wiadomość
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:
C/C++
...
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()
{
    ...// Wprowadzanie macierzy A i B (A*X=B).
    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;
}
P-131832
« 1 »
  Strona 1 z 1