Macierze

0

Mam do napisania program, który liczy parę rzeczy na macierzach. macierz na głównej diagonali ma 4, pod tą diagonalą i nad nią ma 1 a reszta elementów to 0. Chcę obliczyć wyznacznik i stosuję eliminację Gaussa (bardzo uproszczoną dla mojej macierzy). Mam taki oto kod:

for(i = 0,j =0; i,j <N; ++i,++j)
 {
 Macierz [i+1][j] = (Macierz[i][j] * (-1/Macierz[i][j])) + Macierz[i+1][j];
wynik = wynik * Macierz[i][j];
}

Jednak działa on tylko w pierwszej iteracji a później już nie i za bardzo nie wiem dlaczego, ale wydaje mi się, że po obrocie nie zamienia tej pozycji, którą zerowałem tylko znowu jest na niej 4.
Pewnie to jakaś głupota ale będę wdzięczny za pomoc.

1
i,j <N

to jest dokładnie to samo co

j < N

Pokaż więcej kodu. Nie wychodzisz przypadkiem poza zakres w i+1?

(Macierz[i][j] * (-1/Macierz[i][j]))

Czy to jakiś nowatorski sposób zapisania -1?

0

#include <iostream>
#include <cmath>
#define N 9

using namespace std;


int main()
{

    double Macierz [N][N];
    double tab [N][N];
    double Wektor[N];
    int i,j,k;
    double wynik = 1;

    for(i=0;i<N;i++)
    {
        Wektor[i] = i+1;
        cout<<"| "<<Wektor[i]<<" |"<<endl;
    }

    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
            tab[i][j] = 0;
    }

    for(i=0;i<N;++i)
    {
        for(j=0;j<N;++j)
        {
           if(i == j)
           Macierz[i][j] = 4;
           else if(i+1 == j)
            Macierz[i][j] = 1;
           else if(j+1 == i)
            Macierz[i][j] = 1;
           else
            Macierz[i][j]  = 0;
        }
    }

    for(i = 0,j =0; i,j <N; ++i,++j)
    {
                Macierz [i+1][j] = (Macierz[i][j] * (-1/Macierz[i][j])) + Macierz[i+1][j];
                wynik = wynik * Macierz[i+1][j];
    }

    cout<<wynik<<endl;

    for(i=0;i<N;++i)
    {
        cout<<"| ";
        for(j=0;j<N;++j)
        {
            cout<<Macierz[i][j]<<" ";
        }
        cout<<"|";
        cout<<"\n";
    }

    return 0;
}

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