» »

Matrika- Determinanta

Matrika- Determinanta

Poletnik ::

Mene pa zanima kak se izracuna determinanta kvadratne matrike 4x4?

pro2c ::

..da uporabnik vnese stevilke v matriko in pol program izracuna?

...naredil sem ti to z VB6, tu imas izvorno kodo: link
--- www.DrinkProg.com ---

Zgodovina sprememb…

  • spremenil: darh ()

Thomas ::

Sem v tem oddelku že dal link.

Poišči ...

|O
Man muss immer generalisieren - Carl Jacobi

noraguta ::

uporabis gauss jordanovo metodo. pa zmnozis diagonalo. kako pa drgac.

alyF ::

Ej, pro2c, mal si falu, pa brez zamere :D Za matriko 4x4 ne morš uporabit Sarussove metode, ampak samo za 3x3 ali manj. Tako tvoj program računa narobe. Tole je source moje rešitve za vaje pr programiranju, ki zagotovo deluje pravilno sicer ima primitiven vnos in izpis...:D:

// Program za kvadratno matriko 4x4 z realnimi števili izračuna determinantno

#include

const int vel = 4;

/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniDet3
// V: Matrika velikosti 3*3
// I: determinanta matrike 3*3

float VrniDet3(float m[3][3])
{
float det = 0.0; // determinanta
float d[6] = { 1, 1, 1, 1, 1, 1 }; // delni izracuni determinante po Sarussovem pravilu

for(int i = 0; i < 3; i++) // stevec, na podlagi katerega se racunajo indeksi clenov
{
d[0] *= m[i][i]; // indeksi 00, 11, 22
d[1] *= m[i][(i + 1) % 3]; // indeksi 01, 12, 20
d[2] *= m[i][(i + 2) % 3]; // indeksi 02, 10, 21
d[3] *= m[i][2-i]; // indeksi 02, 11, 20
d[4] *= m[i][(4 - i) % 3]; // indeksi 01, 10, 22
d[5] *= m[(i + 1) % 3][2 - i]; // indeksi 12, 21, 00
}

for(int j = 0; j < 6; j++)
{
if(j < 3) det += d[j]; // prvi trije izracuni so v smeri od levo zgoraj, zato imajo predznak +
else det -= d[j]; // drugi trije pa so iz desne zgoraj, zato imajo predznak -
}

return det; // vracanje determinante
}

/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniClenRazvoja
// Funkcija izvaja razvoj determinante. Indeks izbere elemnt, nato pa se izracuna za eno stopnjo zmanjsana matrika t, katere determinanto nato funkcija vrne
// V: Matrika velikosti 4x4
// V: indeks po katerem se izvaja razvoj
// I: determinanta zmanjsane matrike 3x3

float VrniClenRazvoja(float m[4][4], int indeks)
{
float t[3][3]; // za eno stopnjo zmanjsana matrika m[4][4]

// zmanjsevanje stopnje matrike
int i1 = 0, j1 = 0; // indeksa elementov v t[3][3], kamor se prekopira ustrezno stevilo iz m[4][4]

for(int i = 0; i < 4; i++) // i pretece vse vrstice
{
if(i != 0) // *** ce se nahajamo v vrstici, ki je nismo "precrtali" (katerikoli, razen prvi), poiscemo vse elemente, ki jih tudi nismo "precrtali"
{
for(int j = 0; j < 4; j++) // j pretece vse vrstice
if(j != indeks) // ce elementa v vrstici nismo "precrtali" ...
{
t[i1][j1] = m[i][j]; // ... se le ta prekopira v zmanjsano matriko t
j1++; // povecujemo stevec elementov v vrstici zmanjsane matrike
}

j1 = 0; // stevec elementov v vrstici zmanjsane matrike postavimo na nic, ker smo zakljucili z eno vrstico
i1++; // povecujemo stevec vrstic zmanjsane matrike
}
}

return VrniDet3(t); // vracanje determinante zmanjsane matrike
}
/////////////////////////////////////////////////////////////////////////////////
// FUNKCIJA VrniDet4
// V: Matrika velikosti 4x4
// I: determinanta matrike 4x4

float VrniDet4(float m[4][4])
{
float det = 0.0;

for(int indeks = 0; indeks < 4; indeks++) // indeks izbira element a[0][indeks], po karterem razvijamo determinanto
if((indeks % 2 == 0)) det += m[0][indeks] * VrniClenRazvoja(m, indeks);
else det -= m[0][indeks] * VrniClenRazvoja(m, indeks); // pristevanje oz. odstevanje clena determinanti po razvoju

return det; // vracanje determinante celotne matrike 4x4
}

/////////////////////////////////////////////////////////////////////////////////
int main(void)
{
float matrika[vel][vel]; // matrika
int i;

cout << "Vnesite " << vel * vel << " stevil iz kvadratne matrike:" << endl;

for(i = 0; i < vel; i++)
for(int j = 0; j < vel; j++)
{
cout << "a[" << i + 1 << "][" << j + 1 << "]: ";
cin >> matrika[i][j]; // branje matrike
}

cout << "\n\nDeterminanta matrike\n" << endl;

for(i = 0; i < vel; i++)
{
cout << "| ";
for(int j = 0; j < vel; j++)
cout << matrika[i][j] << " ";
cout << "|" << endl; // izpis matrike
}

cout << "\nje " << VrniDet4(matrika) << "." << endl; // izpis determinante matrike

return 0;
}

Zgodovina sprememb…

  • spremenil: alyF ()

NoUse4AName ::

kako bos te kolokvij v sredo pisal ce imas probleme pri takem programu...

pro2c ::

aja..ehh :) tocno..no sej..formule samo spremenis v progu pa bo :)
--- www.DrinkProg.com ---


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Vsota določenih elementov matrike [C]

Oddelek: Programiranje
10929 (617) RatedR
»

Python - pomoč!

Oddelek: Programiranje
71114 (950) lknix
»

[c#] Vstavljanje vrednosti v tabelo

Oddelek: Programiranje
111524 (1346) Cvenemir
»

[C++] velikost matrike

Oddelek: Programiranje
191636 (1448) Jean-Paul
»

[Naloga][C++] Sestevanje matrike

Oddelek: Programiranje
93153 (2980) snow

Več podobnih tem