C++ Bc. 10: Porovnání verzí

Z GeoWikiCZ
Skočit na navigaci Skočit na vyhledávání
m (odkaz na wikipedii)
 
(Není zobrazeno 9 mezilehlých verzí od 2 dalších uživatelů.)
Řádek 1: Řádek 1:
'''Determinant'''
+
;[http://en.wikipedia.org/wiki/Determinant Determinant]
  
Napište funkcí, která počítá determinant matice
+
Napište funkci, která počítá determinant matice
  
 
  double determinant(GNU_gama::Mat<>& A);
 
  double determinant(GNU_gama::Mat<>& A);
Řádek 7: Řádek 7:
 
'''Řešení'''
 
'''Řešení'''
  
Výpočet determimnántu je triviální v případě trojúhelníkové matice, kdy determinant je roven součinu prvků na hlavní diagonále. Speciálně, pokud je se na hlavní diagonále vyskytuje nula, je determinant nulový.
+
Výpočet determinantu je triviální v případě trojúhelníkové matice, kdy determinant je roven součinu prvků na hlavní diagonále. Speciálně, pokud je se na hlavní diagonále vyskytuje nula, je determinant nulový.
  
 
Funkce <tt>determinant()</tt> proto převádí danou matici na horní trojuúhelníkovou matici pomocí elementárních operací, které nemění hodnotu determinantu:
 
Funkce <tt>determinant()</tt> proto převádí danou matici na horní trojuúhelníkovou matici pomocí elementárních operací, které nemění hodnotu determinantu:
  
 
* pokud k libovolnému řádku matice přičteme <math>p</math>-násobek jiného řádku, hodnota determinantu se tím nemění
 
* pokud k libovolnému řádku matice přičteme <math>p</math>-násobek jiného řádku, hodnota determinantu se tím nemění
* výměna dvou různých řádků matice změní pouze znaménkou determinantu, nemění ale jeho absolutní hodnotu
+
* výměna dvou různých řádků matice změní pouze znaménko determinantu, nemění ale jeho absolutní hodnotu
  
Převod na horní trojúhelníkovou matici proto probíhá v <math>k</math> krocích, <math>k=1,2,\ldots</math> V každém kroku hledáme pivotní prvek, tj. prvek s největší absolutní hodnotou. V <math>k</math>-tém kroku pak vyměníme <math>k</math>-tý řádek s ''pivotním řádkem.'' Tato výměna změní znaménko determinantu, každou změnu znaménka je pochopitelně třeba zaznamenat.  
+
Převod na horní trojúhelníkovou matici proto probíhá v <math>k</math> krocích, <math>k=1,2,\ldots</math> V každém kroku hledáme pivotní prvek, tj. prvek s největší absolutní hodnotou. V <math>k</math>-tém kroku pak vyměníme <math>k</math>-tý řádek s ''pivotním řádkem''. Tato výměna změní znaménko determinantu, každou změnu znaménka je pochopitelně třeba zaznamenat.  
  
Po zpracování pivotního prvku, přičítáme k řádkům <math>i=k+1,\ldots N</math> <math>p</math>-násobky pivotního řádku, kde <math>p = -A(i,k)/A(k,k).</math> Tak dojde k vynulování prvků pod pivotním prvkem <math>A(k,k).</math>
+
Po zpracování pivotního řádku, přičítáme k řádkům <math>i=k+1,\ldots N</math> <math>p</math>-násobky pivotního řádku, kde <math>p = -A(i,k)/A(k,k).</math> Tak dojde k vynulování prvků pod pivotním prvkem <math>A(k,k).</math>
  
 
'''Příklad'''
 
'''Příklad'''
Řádek 30: Řádek 30:
 
</math>
 
</math>
  
[ [[C plus plus Bc.|Zpět]] | [[C_plus_plus_Bc._10_cpp|C++]] ]
+
[ [[C++ Bc.|Zpět]] | [[C++ Bc. 10 cpp|C++]] | [[C++ Bc. 11|Další]] ]
 +
 
 +
[[Kategorie:Programování]]

Aktuální verze z 10. 10. 2006, 21:55

Determinant

Napište funkci, která počítá determinant matice

double determinant(GNU_gama::Mat<>& A);

Řešení

Výpočet determinantu je triviální v případě trojúhelníkové matice, kdy determinant je roven součinu prvků na hlavní diagonále. Speciálně, pokud je se na hlavní diagonále vyskytuje nula, je determinant nulový.

Funkce determinant() proto převádí danou matici na horní trojuúhelníkovou matici pomocí elementárních operací, které nemění hodnotu determinantu:

  • pokud k libovolnému řádku matice přičteme -násobek jiného řádku, hodnota determinantu se tím nemění
  • výměna dvou různých řádků matice změní pouze znaménko determinantu, nemění ale jeho absolutní hodnotu

Převod na horní trojúhelníkovou matici proto probíhá v krocích, V každém kroku hledáme pivotní prvek, tj. prvek s největší absolutní hodnotou. V -tém kroku pak vyměníme -tý řádek s pivotním řádkem. Tato výměna změní znaménko determinantu, každou změnu znaménka je pochopitelně třeba zaznamenat.

Po zpracování pivotního řádku, přičítáme k řádkům -násobky pivotního řádku, kde Tak dojde k vynulování prvků pod pivotním prvkem

Příklad

[ Zpět | C++ | Další ]