Macierze

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 221
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:

Kopiuj
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.

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1
Kopiuj
i,j <N

to jest dokładnie to samo co

Kopiuj
j < N

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

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

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

M4
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 221
0
Kopiuj

#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;
}

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5023

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.