Macierze Symetryczne, Rozkład Choleskyego

by Jerry Sky

2020-12-08



1. Macierze Symetryczne

Problem pozostaje taki sam — mamy do policzenia wynik równania Ax=b, Ax = b, przy czym mamy AT=A. A^T = A.

1.1. Zmodyfikowany rozkład LULU

Stosujemy rozkład LULU tak jak wcześniej:

A=L×U A = L \times U

przy czym teraz zapisujemy to samo nieco inaczej:

LU=LDU L U = L D \overline{U}

gdzie

Warto zauważyć, że w takiej konfiguracji mamy: AT=UTDLT=LDU=A A^T = \overline{U}^T D L^T = L D \overline{U} = A jako, że macierz AA jest symetryczna.

1.2. Sposób liczenia wektora xx

Jesteśmy uzbrojeni w rozkład macierzy: A=LDLT A = L D L^T

taki, że

$$ LD =

\[10pt]

L^T =

\[10pt]

A =

$$

Czyli liczymy po kolei:

  1. mamy d1=a11d_{1} = a_{11}, czyli wiemy ile wynosi d1d_{1}

  2. mamy:

  3. mamy:

  4. itd.

  5. aż w końcu:

Możemy dodatkowo określić ciąg rj=diln,jr_j = d_i l_{n,j} i go zastosować w obliczeniach.

Powyższy algorytm w formie programu:

  1. for k:=1k := 1 to nn:
    1. for j:=1j := 1 to k1k-1:
      1. rj:=ak,jq=1j1lj,qrqr_{j} := a_{k,j} - \sum_{q=1}^{j-1} l_{j,q} \cdot r_{q}
      2. lk,j:=rjdjl_{k,j} := \frac{r_j}{d_j}
    2. dk:=ak,kq=1k1lk,qrqd_k := a_{k,k} - \sum_{q=1}^{k-1} l_{k,q} \cdot r_q

W faktycznej implementacji przechowywanie danych wyglądałoby następująco:


1.3. Ostatecznie

Czyli mając Ax=b Ax = b robimy LDLTx=b L D L^T x = b i podstawiamy {z=LTxO(12n2)Dz=yO(n)Ly=bO(12n2) \begin{cases} z = L^T x & O\left( \frac{1}{2} n^2 \right)\\ D z = y & O\left( n \right)\\ L y = b & O\left( \frac{1}{2} n^2 \right)\\ \end{cases}

Złożoność obliczeniowa: O(16n3)+O(n2)+O(n)O\left( \frac{1}{6} n^3 \right) + O\left( n^2 \right) + O(n).


2. Rozkład Choleskyego

Mamy

Ax=b Ax = b

i tak jak wcześniej macierz AA jest symetryczna, ale tym razem macierz AA jest dodatnio określona.


2.1. DEF: Macierz symetryczna dodatnio określona

Macierzą symetryczną AT=ARn×nA^T = A \in \mathbb{R}^{n\times n} nazywamy dodatnio określoną,
jeśli dla dowolnego niezerowego wektora xRnx \in \mathbb{R}^n spełniona jest nierówność xTAx>0x^T A x > 0


2.2. Kolejny zmodyfikowany rozkład LULU

Wprowadzamy małą modyfikację do wcześniej określonego rozkładu: A=LU=LDLT=LDL^DLTL^T=L^L^T A = L U = L D L^T = \overbrace{L \sqrt{D}}^{\hat{L}} \overbrace{\sqrt{D} L^T}^{\hat{L}^T} = \hat{L} \hat{L}^T

gdzie

(robimy pierwiastki, więc potrzebujemy macierzy dodatnio określonych)


Implementacja

Mamy: [l^11l^21l^22l^n1l^n2l^nn]×[l^11l^21l^n1l^22l^n2l^nn]=[a11a21an1a21a22an2an1an2ann] \begin{bmatrix} \hat{l}_{11}\\ \hat{l}_{21} & \hat{l}_{22}\\ \vdots && \ddots\\ \hat{l}_{n1} & \hat{l}_{n2} & \dots &\hat{l}_{nn} \end{bmatrix} \times \begin{bmatrix} \hat{l}_{11} & \hat{l}_{21} & \dots & \hat{l}_{n1}\\ & \hat{l}_{22} & \dots & \hat{l}_{n2}\\ && \ddots & \vdots\\ &&& \hat{l}_{nn}\\ \end{bmatrix} = \begin{bmatrix} a_{11} & a_{21} & \dots & a_{n1}\\ a_{21} & a_{22} & \dots & a_{n2}\\ \vdots &&& \vdots\\ a_{n1} & a_{n2} & \dots & a_{nn}\\ \end{bmatrix}

I podobnie jak wcześniej mamy równania postaci:

  1. (jj-ta kolumna):

Program:

  1. for j:=1j := 1 to nn:
    1. l^jj:=ajjk=1j1l^jk2\hat{l}_{jj} := \sqrt{a_{jj} - \sum_{k=1}^{j-1} \hat{l}_{jk}^2}
    2. for i:=j+1i := j+1 to nn:
      1. l^ij:=aijk=1j1l^ikl^jkl^jj\hat{l}_{ij} := \frac{a_{ij} - \sum_{k=1}^{j-1} \hat{l}_{ik} - \hat{l}_{jk}}{\hat{l}_{jj}}

W pamięci przechowujemy:

Dostajemy układ równań:

{L^y=bO(12n2)L^x=yO(12n2) \begin{cases} \hat{L} y = b & O\left( \frac{1}{2}n^2 \right)\\ \hat{L} x = y & O\left( \frac{1}{2}n^2 \right)\\ \end{cases}

Złożoność obliczeniowa: O(16n3)+O(n2)O\left(\frac{1}{6} n^3\right) + O(n^2).