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

Z GeoWikiCZ
Bez shrnutí editace
m (zjednodušeno)
 
(Není zobrazeno 32 mezilehlých verzí od 2 dalších uživatelů.)
Řádek 1: Řádek 1:
Napište funkci, která pro zadanou čtvercovou (pozitivně definitní) matici <math>\mathbf{A}</math> vypočítá odhad jejího maximálního vlastního čísla <math>\lambda_\max</math>.
;[http://en.wikipedia.org/wiki/Power_method Mocninná metoda]
 
Napište funkci, která pro zadanou čtvercovou diagonalizovatelnou matici <math>\mathbf{A} \in R^{n\times n} </math> vypočítá odhad jejího dominantního vlastního čísla <math>\lambda_\max</math>.
 
double dominantni_vlastni_cislo_matice(const GNU_gama::Mat<>& A, double rel_chyba = 1e-5);


'''Algoritmus:'''
'''Algoritmus:'''


# zvolíme libovolný nenulový vektor <math>v_0</math> stejné dimenze, jako je rozměr matice <math>\mathbf{A}</math>
# zvolíme libovolný jednotkový vektor <math>q_0 \in R^n</math> &nbsp; (můžeme zvolit libovolný nenulový vektor)
# vypočteme vektor <math>w_i = \mathbf{A}v_{i-1}</math> vypočteme vektor
# vypočteme vektor <math>z_i = \mathbf{A}q_{i-1}</math>
# vypočteme euklidovskou normu <math>\lambda_i = ||w_i||</math>
# <math>\lambda_i = ||z_i||,\,</math> kde <math>||z_i||\,</math> označuje euklidovskou normu vektoru <math>z_i</math>.
# vypočteme vektor <math>v_i = w_i \times (1/\lambda_i), </math> tj. normujeme wektor <math>w_i</math> na velikost 1
# vypočteme vektor <math>q_i = z_i / \lambda_i</math> (tj. <math>q_i</math> je normovaný vektor <math>z_i</math>)
# posloupnost <math>\lambda_1, \lambda_2, \lambda_3, ... </math> konverguje k hodnotě <math>\lambda_\max.</math> Opakujeme krok 2, dokud neni dosažena požadovaná relativní přesnost odhadu (např. na 4 dekadické cifry).
# posloupnost <math>\lambda_1,\,\lambda_2, \lambda_3, ... </math> konverguje k hodnotě <math>\lambda_\max.</math> Opakujeme krok 2, dokud není dosažena požadovaná relativní přesnost odhadu <math>\lambda_\max</math> (např. na 4 dekadické cifry).
 
 
'''Příklad:''' 
 
Pro matici
<math>\begin{pmatrix}
-261 & 209 & -49\\
-530 & 422 & -98\\
-800 & 631 & -144
\end{pmatrix}</math>
je <math>\lambda_\max = 10</math>
 
Pro matici <math>\begin{pmatrix}
-261 &  0 &  -49 \\
-530 & 422 &  -98 \\
-800 & 631 & -144
\end{pmatrix}</math>
je <math>\lambda_\max = 339.3771</math>
 
[ [[C++ Bc.|Zpět]] | [[C++ Bc. 2 cpp|C++]] | [[C++ Bc. 3|Další]] ]


'''Příklad:'''  Pro matici
[[Kategorie:Programování]]
  226  99  204  88  116
  99  131  171  55  45
  204  171  279  108  97
  88  55  108  106  44
  116  45  97  44  71
je <math>\lambda_\max = 639.6488</math>

Aktuální verze z 27. 11. 2006, 20:50

Mocninná metoda

Napište funkci, která pro zadanou čtvercovou diagonalizovatelnou matici vypočítá odhad jejího dominantního vlastního čísla .

double dominantni_vlastni_cislo_matice(const GNU_gama::Mat<>& A, double rel_chyba = 1e-5);

Algoritmus:

  1. zvolíme libovolný jednotkový vektor   (můžeme zvolit libovolný nenulový vektor)
  2. vypočteme vektor
  3. kde označuje euklidovskou normu vektoru .
  4. vypočteme vektor (tj. je normovaný vektor )
  5. posloupnost konverguje k hodnotě Opakujeme krok 2, dokud není dosažena požadovaná relativní přesnost odhadu (např. na 4 dekadické cifry).


Příklad:

Pro matici je

Pro matici je

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