Algoritmus na výpočet determinantu matice

Markéta

Algoritmus na výpočet determinantu matice
« kdy: 15. 02. 2012, 22:34:05 »
Jak vyřešit v C++  úkol zapsat algoritmus na výpočet determinantu matice řádu 3 Sarrusovým pravidlem?
« Poslední změna: 15. 02. 2012, 22:42:46 od Petr Krčmář »


Logik

  • *****
  • 993
    • Zobrazit profil
    • E-mail
Re:Algoritmus na výpočet determinantu matice
« Odpověď #1 kdy: 15. 02. 2012, 22:45:34 »
To si myslíš, že Ti tu za Tebe vyřešíme domácí úkol? :-)
Napiš co máš a co konkrétního nevíš a rádi poradíme, ale školu za Tebe studovat nebudem.

Jenda

Re:Algoritmus na výpočet determinantu matice
« Odpověď #2 kdy: 15. 02. 2012, 22:50:58 »
Matici máš v poli 3×3? Tak to je přece jenom posčítání a pronásobení. https://secure.wikimedia.org/wikipedia/cs/wiki/Sarrusovo_pravidlo

hu

Re:Algoritmus na výpočet determinantu matice
« Odpověď #3 kdy: 15. 02. 2012, 22:51:56 »
Kód: [Vybrat]
float m[3][3] = { { 1,2,3 }, {3,4,5}, {100,200,300} };
float D;

D = m[0][0]*m[1][1]*m[2][2] + m[1][0]*m[2][1]*m[0][2] + m[2][1]*m[0][1]*m[1][2] - m[0][2]*m[1][1]*m[2][0] - m[1][2]*m[2][1]*m[0][0] - m[2][2]*m[0][1]*m[1][0];

Kit

Re:Algoritmus na výpočet determinantu matice
« Odpověď #4 kdy: 15. 02. 2012, 22:55:47 »
Pro výpočet determinantu se mnohem lépe hodí třeba Octave. Je to mnohem jednodušší, než to patlat v C++:
Kód: [Vybrat]
octave:1> A=[0,2,0,1;2,2,3,2;4,-3,0,1.;6,1,-6,-5]                                                                 
A =                                                                                                               
                                                                                                                 
   0   2   0   1                                                                                                 
   2   2   3   2                                                                                                 
   4  -3   0   1                                                                                                 
   6   1  -6  -5                                                                                                 
                                                                                                                 
octave:2> det(A)                                                                                                 
ans = -234.00                                                                                                     
octave:3>


hu

Re:Algoritmus na výpočet determinantu matice
« Odpověď #5 kdy: 15. 02. 2012, 22:58:39 »
Pro výpočet determinantu se mnohem lépe hodí třeba Octave. Je to mnohem jednodušší, než to patlat v C++:

Jak presne souvisi toto sdeleni s dotazem autorky? Proc je na tomto foru standardem udelat z vlakna off-topic prumerne ve 3. prispevku?

Re:Algoritmus na výpočet determinantu matice
« Odpověď #6 kdy: 15. 02. 2012, 23:57:33 »
Použil bych pivotovou metodu
např. máme matici

a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44


v každém kroku vytvoříme pomocí subdeterminantů (2x2 - výpočet triviální Sarusovým pravidlem) prvků původní maice novou matici, která má stejný determinant jako matice původní ale je o jeden řád nižší
neboli v prvním kroku vytvoříme matici B takto

b11 = det(a11 a12; a21 a22)
b12 = det(a11 a13; a21 a23)
b13 = det(a11 a14; a21 a24)
b21 = det(a11 a12; a31 a32)
b22 = det(a11 a13; a31 a33)
b23 = det(a11 a14; a31 a34)
b31 = det(a11 a12; a41 a42)
b32 = det(a11 a13; a41 a43)
b33 = det(a11 a14; a41 a44)

V dalším kroku vytvoříme obdobně matici C (2x2) a determinant tedy bude možné určit snadno
při praktickém numerickém použití této metody je nutné aby prvek a11, b11, ... (tzv. pivot) matice byl roven 1, jinak hrozí numerická nestabilita výpočtu - před každým krokem je tedy nutné matici vydělit/vynásobit vhodným číslem (a nezapomenou pak zpětně upravit determinant, aby zahrnoval tento "neekvivalentní" krok)

Re:Algoritmus na výpočet determinantu matice
« Odpověď #7 kdy: 16. 02. 2012, 00:04:21 »
Použil bych pivotovou metodu
např. máme matici

a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

...
sry irelevantníé rada teď čtu Sarusovým pravidlem 3x3  :)

neboli prvně celou matici načíst do pole 3x3 (postup záleží na tom, jak zní zadání, buď ručně načíst čísla z klávesníce cin >> pole[1][1], cin >> pole [1][2], .. nebo obdobn2 ze souboru) a potom tupě vypsat cout <<  pole [1][1]*pole[2][2] ...

Re:Algoritmus na výpočet determinantu matice
« Odpověď #8 kdy: 16. 02. 2012, 08:07:59 »
Nojo, je to tady zase. Touhle dobou se vždy objeví nějaké vtipné komentáře pod mým starým blogpostem. :)