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

Z GeoWikiCZ
mBez shrnutí editace
mBez shrnutí editace
 
(Není zobrazeno 9 mezilehlých verzí od 2 dalších uživatelů.)
Řádek 1: Řádek 1:
__NOEDITSECTION__
;[http://en.wikipedia.org/wiki/Cholesky_decomposition Choleskyho rozklad]
== Choleskyho rozklad ==


Napište funkci, která počítá  
Napište funkci, která počítá ''Choleskyho rozklad'' pozitivně semidefinitní matice.
[http://en.wikipedia.org/wiki/Cholesky_decomposition choleskyho rozklad]
pozitivně semidefinitní matice.


Matice <math>\mathbf A</math> je pozitivně definitní, pokud pro každý nenulový vektor <math>\mathbf x</math> platí <math>\mathbf x^t \mathbf A \mathbf x > 0.</math> Pro každou pozitivně definitní matici existuje jednoznačný symetrický rozklad (Choleskyho rozklad) <math>\mathbf A = \mathbf L \mathbf L^t,</math> kde <math>\mathbf L</math> je dolní trojúhelníková matice. Například
Matice <math>\mathbf A</math> je pozitivně definitní, pokud pro každý nenulový vektor <math>\mathbf x</math> platí <math>\mathbf x^t \mathbf A \mathbf x > 0</math>. Pro každou pozitivně definitní matici existuje jednoznačný symetrický rozklad (Choleskyho rozklad) <math>\mathbf A = \mathbf L \mathbf L^t,</math> kde <math>\mathbf L</math> je dolní trojúhelníková matice. Například


<math>\begin{pmatrix}
<math>\begin{pmatrix}
Řádek 29: Řádek 26:
   0 &  0 &  0 &  0 &  1
   0 &  0 &  0 &  0 &  1
\end{pmatrix}
\end{pmatrix}
</math>
</math>


Řádek 36: Řádek 32:
<math>
<math>
\mathbf A = \mathbf A^{(1)} = \begin{pmatrix}
\mathbf A = \mathbf A^{(1)} = \begin{pmatrix}
a_{11} & a_{*1}^t \\
a_{11} & \mathbf a_{*1}^t \\
a_{*1} & A^{(2)}
\mathbf a_{*1} & \mathbf A^{(2)}
\end{pmatrix}
\end{pmatrix}
\longrightarrow
\longrightarrow
\begin{pmatrix}
\begin{pmatrix}
\sqrt{a_{11}} & 0 \\
\sqrt{a_{11}} & \mathbf 0 \\
b_{*1}     & B^{(2)}
\mathbf b_{*1} & \mathbf B^{(2)}
\end{pmatrix},</math>
\end{pmatrix},</math>


kde <math>b_{*1} = {1\over \sqrt{a_{11}}} a_{*1}</math> (tj. prvky pod diagonálou vydělíme odmocninou z diagonálnho prvku) a
kde <math>\mathbf b_{*1} = {1\over \sqrt{a_{11}}} \mathbf a_{*1}</math> (tj. prvky pod diagonálou vydělíme odmocninou z diagonálního prvku) a
<math>\mathbf B^{(2)} = \mathbf A^{(2)} - b_{*1}b_{*1}^t</math>. V našem příkladu tedy
<math>\mathbf B^{(2)} = \mathbf A^{(2)} - \mathbf b_{*1} \mathbf b_{*1}^t</math>. V našem příkladu tedy


<math>\mathbf B^{(2)} =
<math>\mathbf B^{(2)} =
\begin{pmatrix}
\begin{pmatrix}
          15 & 0 & 0 & 0 & 0 \\
  169 & 143 & 104 & 52 \\
\underline{14} 365 & 311 & 230 & 122 \\
  143 & 221 & 158 & 74 \\
\underline{12} &  311 & 365 & 266 & 134 \\
  104 & 158 & 149 &  65 \\
\underline{ 9} &  230 & 266 & 230 & 110 \\
  52 &  74 &  65 &  30
\underline{ 5} &  122 & 134 & 110 55 \\
\end{pmatrix} =
\end{pmatrix},
\begin{pmatrix}
</math> prvky vektoru <math>b_{*1}</math> jsou podtrženy. Submatice <math>B^{(2)}</math> je také pozitivně definitní a stejným způsobem můžeme vypočítat druhý sloupec choleskyho rozkladu a obdobně i zbývající sloupce.
  365 & 311 & 230 & 122 \\
  311 & 365 & 266 & 134 \\
  230 & 266 & 230 & 110 \\
  122 & 134 & 110 &  55
\end{pmatrix} -
\begin{pmatrix}
  14\times14 & 14\times12 & 14\times9 &  14\times5 \\
  12\times14 & 12\times12 & 12\times9 12\times5 \\
  9\times14 &  9\times12 &  9\times9 &   9\times5 \\
  5\times14 & 5\times12 5\times9 &  5\times5
\end{pmatrix}.
</math>  
 
Submatice <math>\mathbf B^{(2)}</math> je také pozitivně definitní a stejným způsobem můžeme vypočítat druhý sloupec Choleskyho rozkladu a obdobně i zbývající sloupce.
 
Explicitní vzorce pro výpočet koeficentů matice <math>\mathbf L</math> Choleskyho rozkladu jsou
 
<math> l_{i,j} = \frac{1}{l_{j,j}} \left( a_{i,j} - \sum_{k=1}^{j-1} l_{i,k} l_{j,k} \right), \qquad\mbox{pro } i>j. </math>
 
<math> l_{i,i} = \sqrt{ a_{i,i} - \sum_{k=1}^{i-1} l_{i,k}^2 }. </math>





Aktuální verze z 15. 1. 2009, 16:09

Choleskyho rozklad

Napište funkci, která počítá Choleskyho rozklad pozitivně semidefinitní matice.

Matice je pozitivně definitní, pokud pro každý nenulový vektor platí . Pro každou pozitivně definitní matici existuje jednoznačný symetrický rozklad (Choleskyho rozklad) kde je dolní trojúhelníková matice. Například

První sloupec Choleskyho rozkladu můžeme vypočítat jako

kde (tj. prvky pod diagonálou vydělíme odmocninou z diagonálního prvku) a . V našem příkladu tedy

Submatice je také pozitivně definitní a stejným způsobem můžeme vypočítat druhý sloupec Choleskyho rozkladu a obdobně i zbývající sloupce.

Explicitní vzorce pro výpočet koeficentů matice Choleskyho rozkladu jsou


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