Choleského rozklad

Z testwiki
Skočit na navigaci Skočit na vyhledávání
Choleského rozklad matice 𝑨 na součin dolní trojúhelníkové matice 𝑳 a její transpozice.

Choleského rozklad (také Choleského dekompozice nebo Choleského faktorizace) je metoda lineární algebry, kterou lze každou reálnou pozitivně definitní matici rozložit na součin dolní trojúhelníkové matice a její transpozice. Obecněji lze pojem zavést i pro komplexní matice.

Rozklad je pojmenován po francouzském matematikovi André-Louisovi Choleském (1875–1918, výslovnost [šoleski], Šablona:IPA2), který jej vyvinul před rokem 1914 při triangulaci Kréty francouzskou Service géographique de l’armée.

Pro řešení soustav lineárních rovnic s pozitivně definitní maticí je Choleského rozklad zhruba dvakrát efektivnější než LU rozklad.

Definice

Pro každou pozitivně semidefinitní komplexní matici 𝑳 existuje dolní trojúhelníková matice 𝑳 taková, že platí:

𝑨=𝑳𝑳H

Uvedený zápis matice 𝑨 jako součin 𝑳𝑳H se nazývá Choleského rozklad matice 𝑨. Dolní trojúhelníková matice 𝑳 se nazývá Choleského faktor matice 𝑨. Symbol 𝑳H značí matici hermitovsky sdruženou k matici 𝑳 (též nazývanou hermitovská transpozice).

Ten samý rozklad lze zapsat ve tvaru 𝑨=𝑼H𝑼, kde 𝑼 je horní trojúhelníková, neboť 𝑼=𝑳H.

Reálné pozitivně definitní matice mají Choleského faktory reálné. Pro ně platí: 𝑳H=𝑳T, a proto lze rozklad zapsat ve tvaru:

𝑨=𝑳𝑳T

Ukázka

Symetrická reálná matice

𝑨=(41216123743164398)

má Choleského rozklad 𝑳𝑳T:

(41216123743164398)=(200610853)(268015003)

Vlastnosti

  • Choleského faktor 𝑳 je regulární právě když je daná matice 𝑨 regulární.
  • Má-li matice 𝑨 Choleského rozklad 𝑳𝑳H, je hermitovská, resp. u reálných symetrická, protože 𝑨H=(𝑳𝑳H)H=(𝑳H)H𝑳H=𝑳𝑳H=𝑨.
  • Má-li matice 𝑨 Choleského rozklad s regulárním Choleského faktorem 𝑳 je pozitivně definitní. Pro libovolné 𝒙0 vyplývá z regularity matice 𝑳, že také 𝑳H𝒙0, a potom
𝒙H𝑨𝒙=𝒙H𝑳𝑳H𝒙=(𝑳H𝒙)H𝑳H𝒙=𝑳H𝒙|𝑳H𝒙>0, přičemž v předposlední výraz | značí standardní skalární součin na n.
  • Choleského rozklad není jednoznačný, např. matici (1112) lze rozložit čtyřmi způsoby s Choleského faktory: (1011),(1011),(1011) a (1011).
  • Choleského faktory pozitivně semidefinitních (i komplexních) matic mají na diagonále vždy reálná čísla.
  • Pouze jeden z Choleského faktorů pozitivně definitních matic má všechny prvky na diagonále kladné.
  • Pokud je hermitovská matice 𝑨 pouze pozitivně semidefinitní, a nikoli pozitivně definitní, pak má stále Choleského rozklad, kde alespoň jeden prvek na diagonále 𝑳 je nulový. Choleského faktorů může být i nekonečně mnoho, například rozkladem matice (0001) je každá matice (00cosφsinφ), kde φ(0,π).
  • Mezi Choleského faktory pozitivně semidefinitních matic hodnosti r lze nalézt právě jeden takový, že má r kladných prvků na diagonále a nr sloupců se samými nulami. Jinak řečeno, v tomto případě existuje alespoň jedna permutační matice 𝑷 taková, že matice 𝑷𝑨𝑷T má jednoznačný Choleského rozklad ve tvaru 𝑳=(𝑳10𝑳20), kde 𝑳1 je dolní trojúhelníková matice hodnosti r s kladnou diagonálou.

LDL rozklad

S Choleského rozkladem úzce souvisí rozklad dané matice na součin:

𝑨=𝑳𝑫𝑳H,

kde 𝑳 je dolní trojúhelníková s 1 na diagonále a 𝑫 je diagonální.

LDL rozklad lze vypočítat a použít v podstatě stejnými algoritmy jako klasický Choleského rozklad, ovšem bez použití odmocnin.

Ukázka

Matice 𝑨 z předchozí ukázky má LDL rozklad:

(41216123743164398)=(100310451)(400010009)(134015001)

Choleského faktor z předchozí ukázky lze spočítat pomocí součinu s odmocninou z diagonální matice:

(200610853)=(100310451)(200010003)

LDL rozklad může mít například i matice, která je negativně semidefinitní.

(242494242)=(100210101)(200010000)(121010001)

Vlastnosti

  • Je-li 𝑨 pozitivně definitní, pak jsou všechny prvky na diagonále 𝑫 kladné. Z LDL rozkladu lze pak odvodit klasický Choleského rozklad s faktorem 𝑪=𝑳𝑫1/2 pomocí vztahu:
𝑨=𝑳𝑫𝑳H=𝑳𝑫1/2(𝑫1/2)H𝑳H=𝑳𝑫1/2(𝑳𝑫1/2)H=𝑪𝑪H
  • Naopak, má-li pozitivně definitní matice klasický Choleského rozklad 𝑨=𝑪𝑪H, a matice 𝑺 je diagonální matice, která obsahuje hlavní diagonálu 𝑪, pak 𝑨 lze rozložit jako 𝑳𝑫𝑳H, kde:
𝑳=𝑪𝑺1, tím se sloupce naškálují tak, aby prvky na diagonále byly rovny 1,
𝑫=𝑺2.
  • Pozitivně semidefinitní matice mají LDL rozklad právě když se hodnosti matic 𝑫 a 𝑨 shodují.
  • Pro existenci LDL rozkladu hermitovské (ne nutně pozitivně definitní) matice například stačí, aby prvních n1 hlavních vedoucích minorů matice 𝑨 bylo nenulových.
  • Není-li matice pozitivně semidefinitní, čili je negativně (semi)definitní nebo indefinitní, a přitom má LDL rozklad, potom se na diagonále 𝑫 vyskytne alespoň jedno záporné číslo.
  • Matice 𝑨 a 𝑫 mají shodný determinant a ten je roven součinu prvků na diagonále matice 𝑫.

Výpočet

Z rozepsání součinu pro matice řádu 3

𝑨=𝑳𝑳T=(l1100l21l220l31l32l33)(l11l21l310l22l3200l33)=(l112(symetricky)l21l11l212+l222l31l11l31l21+l32L22l312+l322+l332),

vyplývá, že Choleského faktor s kladnou diagonálou je dán výrazem:

𝑳=(a1100a21/l11a22l2120a31/l11(a32l31l21)/l22a33l312l322)

Obecně je možné prvky matice 𝑳 počítat po sloupcích zleva doprava a v každém sloupci odshora dolů.

Pro první sloupec platí následující.

a11=l11l11  l11=a11
a21=l21l11  l21=a21/l11
 
an1=ln1l11  ln1=an1/l11

Pro druhý sloupec platí:

a22=l21l21+l22l22  l22=a22l212
a32=l31l21+l32l22  l32=(a32l31l21)/l22
 
an2=ln1l21+ln2l22  ln2=(an2ln1l21)/l22

Pro prvky na diagonále lze, vzhledem ke znalosti celého řádku vlevo od prvku, odvodit následující vzorec:

aii=k=1ilik2  lii=(±)aiik=1i1lik2

Pro prvky pod diagonálou vyplývá podobně následující vztah:

aij=k=1jlikljk  lij=1ljj(aijk=1j1likljk) pro i>j

U prvků na diagonále je možné vzít hodnotu odmocniny se záporným znaménkem, což vyvolá změnu na nich závisejících prvků mimo diagonálu.

Pro komplexní pozitivně definitní matice platí analogické vztahy (pruhem je značeno komplexně sdružené číslo):

aii=k=1iliklik  lii=(±)aiik=1i1liklik
aij=k=1jlikljk  lij=1ljj(aijk=1j1likljk) pro i>j

Výraz pod odmocninou je pro pozitivně definitní matice vždy kladný.

Vzor čtení (bíle) a zápisu (žlutě) pro výpočet Choleského rozkladu na místě podle Choleského–Banachiewiczova algoritmu pro matici řádu 5

Pseudokód

Výpočty ve výše uvedených vzorcích lze provádět různými způsoby. Varianta pojmenovaná po Tadeuszi Banachiewiczovi vypočte dolní trojúhelníkovou matici řádek po řádku a přitom na místě. V pseudokódu je uveden postup rozkladu matice 𝑨 do tvaru 𝑳𝑳H:

  Input: hermitovská matice A řádu n reprezentovaná svou dolní trojúhelníkovou polovinou
  Output: dolní trojúhelníková část Choleského faktoru L 
  For i = 1 To n
    For j = 1 To i
      Suma = a(i, j)
      For k = 1 To j-1
        Suma = Suma - a(i, k) * conj(a(j, k))
      If i > j Then
        a(i, j) = Suma / a(j, j)  // Prvek je pod diagonálou.
      Else If Suma > 0 Then       // Prvek na diagonále
        a(i, i) = Sqrt(Suma)      // … musí být vždy nezáporný.
      Else
        ERROR("Matice není pozitivně definitní.")
  Return: L=A

Algoritmus pracuje na místě: postupně mění matici 𝑨 na 𝑳, aniž by bylo třeba alokovat další paměť pro zápis výsledné matice. Navíc využívá pouze dolní trojúhelníkovou matici, protože hodnoty prvků nad diagonálou lze dopočítat s využitím vlastnosti, že daná matice 𝑨 je hermitovská. Výsledný Choleského faktor 𝑳 je třeba vzít tak, že má prvky nad diagonálou nulové.

Výpočetní složitost

Časová složitost běžně používaných algoritmů pro výpočet Choleského rozkladu je obecně O(n3).  Přesněji, na reálných maticích jde o 13n3+O(n2) aritmetických operací s prvky dané matice, konkrétně n36 součinů i součtů, n22 dělení a n odmocnin. Komplexní matice oproti tomu vyžadují 46n3 součinů i součtů.

Pro srovnání, LU rozklad coby implementace Gaussovy eliminace, vyžaduje přibližně dvakrát více aritmetických operací.

Numerické záležitosti

Choleského rozklad je bezpodmínečně zpětně stabilní.

Je-li daná matice pozitivně definitní, jsou čísla pod odmocninami vždy kladná v přesné aritmetice. Zaokrouhlovací chyby mohou tuto vlastnost porušit a v takovém případě algoritmus nemůže pokračovat. Tento případ však může nastat, jen je-li matice velmi špatně podmíněna.

LDL rozklad

Výpočtu odmocnin se lze vyhnout ve výpočtu LDL rozkladu. Ten lze spočítat i v přesné zlomkové aritmetice, jak lze odvodit následovně. Pro rozklad reálné matice řádu 3 platí:

𝑨=𝑳𝑫𝑳T=(100l2110l31l321)(d11000d22000d33)(1l21l3101l32001)=(d11(symetricky)l21d11l212d11+d22l31d11l31l21d11+l32d22l312d11+l322d22+d33.).

Obecně jsou prvky matic 𝑫 a 𝑳 i vyšších řádů dány následujícími rekurentními vzorci:

djj=ajjk=1j1ljk2dkk,
lij=1djj(aijk=1j1likljkdkk) pro i>j.

Pro komplexní matice je třeba výrazy na pravé straně upravit následovně:

djj=Ajjk=1j1ljkljkdkk,
lij=1djj(aijk=1j1likljkdkk) pro i>j.

Vzorec přístupu k prvkům matice opět umožňuje, aby byl v případě potřeby celý výpočet proveden na místě.

Aplikace

Numerické řešení soustavy lineárních rovnic

Choleského rozklad se používá především pro numerické řešení lineárních rovnic 𝑨𝒙=𝒃 s pozitivně definitní maticí soustavy a to tak, že se nejprve provede Choleského rozklad 𝑨=𝑳𝑳H, potom se dopřednou substitucí určí řešení 𝒚 soustavy 𝑳𝒚=𝒃 a nakonec se zpětnou substitucí vyřeší soustava 𝑳H𝒙=𝒚.

Vzhledem k tomu, že matice obou soustav jsou trojúhelníkové, je řešení uvedených soustav snadné. Choleského rozklad (nebo jeho LDL varianta, kde ani není třeba odmocňovat) je u těchto soustav oblíbenou pro svou účinnost a numerickou stabilitu. Ve srovnání s LU rozkladem je zhruba dvakrát efektivnější.

Inverzní matice

Matici inverzní k pozitivně definitní matici lze spočítat pomocí Choleského rozkladu podobným způsobem jako při řešení soustav lineárních rovnic v čase O(n3). Postup lze provést i na místě.

Libovolná komplexní regulární matice 𝑩 může být invertována pomocí následující identity, protože 𝑩𝑩H je vždy pozitivně definitní:

𝑩1=𝑩H(𝑩𝑩H)1

Metoda nejmenších čtverců

Soustavy 𝑨𝒙=𝒃 s pozitivně definitní maticí soustavy se v aplikacích objevují poměrně často. Například normálové rovnice v lineárních úlohách nejmenších čtverců mají tento tvar a ostatně i vedly k objevu Choleského rozkladu.

Může se také stát, že matice 𝑨 pochází z energetického funkcionálu, který musí být z fyzikálních důvodů kladný. Podobný případ často nastává při numerickém řešení parciálních diferenciálních rovnic .

Nelineární optimalizace

Nelineární vícerozměrné funkce mohou být minimalizovány přes jejich parametry pomocí variant Newtonovy metody nazývané kvazi-Newtonovy metody. Při k-té iteraci se postupuje k řešení ve směru 𝒑k definovaným řešením soustavy 𝑩k𝒑k=𝒈k, kde 𝒈k je gradient a 𝑩k je pozitivně definitní aproximace Hessovy matice.

Další aplikace

Mimo matematiku se Choleského rozklad využívá také v ekonometrickém výzkumu makroekonomických vztahů. V tzv. vektorových autoregresních modelech (VAR) se určuje pořadí, ve kterém se endogenní proměnné navzájem ovlivňují.

Kromě toho se také používá v metodě Monte Carlo k přenesení předem určených korelací do nezávisle generovaných sekvencí náhodných čísel jako diskretizace náhodných procesů.

Implementace

V jazyku C lze výpočet rozkladu zapsat následovně:

for (c=0; c<n; c++) {
  for (sum=0, i=c-1; i>=0; i--)
    sum += sqr(L[c][i]);
  L[c][c] = sqrt(A[c][c] - sum);
  for (r=c+1; r<n; r++) {
    for (sum=0, i=c-1; i>=0; i--)
      sum += L[r][i]*L[c][i];
    L[r][c] = (A[r][c] - sum) / L[c][c];
  }
}

Implementace v programovacích knihovnách

  • Programovací jazyk C : Vědecká knihovna GNU poskytuje několik implementací Choleského rozkladu.
  • Systém počítačové algebry Maxima : funkce cholesky počítá Choleského rozklad.
  • Systém numerických výpočtů GNU Octave poskytuje několik funkcí pro výpočet, aktualizaci a aplikaci Choleského rozkladu.
  • Knihovna LAPACK poskytuje vysoce výkonnou implementaci Choleského rozkladu, která je přístupná z Fortranu, C a většiny jazyků.
  • V Pythonu provádí funkce cholesky z modulu numpy.linalg Choleského rozklad.
  • V Matlabu dává funkce chol Choleského rozklad. Všimněte si, že chol standardně vrací Choleského faktor 𝑼 v horním trojúhelníkovém tvaru, tj. počítá rozklad 𝑨=𝑼H𝑼. Lze předat příznak, aby se místo toho použil dolní trojúhelníkový faktor.
  • V R dává funkce chol Choleského rozklad.
  • V Julia poskytuje funkce cholesky ze standardní knihovny LinearAlgebra Choleského rozklad.
  • V Mathematice lze na matici aplikovat funkci „CholeskyDecomposition“.
  • V C++ podporuje tento rozklad několik knihoven lineární algebry:
    • Armadillo (knihovna C++) poskytuje příkaz chol k provedení Choleského rozkladu.
    • Knihovna Eigen poskytuje Choleského rozklady pro řídké i husté matice.
    • V balíčku ROOT je k dispozici třída TDecompChol .

Odkazy

Reference

Šablona:Překlad

Literatura

Související články

Šablona:Autoritní data