LU rozklad
Tato práce vznikla jako zápočtový projekt na předmětu Algoritmy a datové struktury 1, MFF UK. Pojí se k ní ještě tato implementace v C#.
Jak je vidět, pro takovýto rozklad matice bychom našli spoustu využití.

Při řešení soustavy rovnic je třeba dopočítat vektor Ux dopřednou a x zpětnou substitucí (obojí má složitost O(n2)). Nezískali jsme tedy žádné zrychlení oproti Gaussově eliminaci (složitost O(n3)). Zrychlení ale získáme ve chvíli, kdy máme vyřešit stejnou soustavu A pro více pravých stran. Když už jednou spočítáme LU rozklad, vyřešení soustavy pro libovolnou pravou stranu má složitost O(n2).
Efektivnost výpočtu determinantu dle definice musíme sečíst n! členů, v každém z nich vynásobit n čísel, složitost je tedy O(n∗n!). Determinant lze vypočítat pomocí gaussovy eliminace v čase O(n3). Náš algoritmus funguje také v čase O(n3), jelikož LU rozklad je jiný způsob přístupu ke gaussově eliminaci.
Výpočet inverzní matice gaussovou eliminací má složitost O(n3). Nezískali jsme tedy žádné zrychlení.
Efektivní maticové operace s využitím LU rozkladu
LU rozklad nám říká, že čtvercovou regulární matici lze rozložit na součin matic A=L∗U, kde L je dolní a U je horní trojúhelníkova matice. Zatím nezkoumejme tuto větu do hloubky a pojďme na to postupně.Využití:
Řešení soustavy rovnic
Mějme soustavu lineárních rovnic A∗x=b, která se dá řešit gaussovou eliminací. Pokud se nám však podaří převést matici A na součin L∗U, tedy L∗U∗x=b (mějme na paměti, že matice L a U jsou trojúhelníkové), vektor U∗x snadno spočteme dopřednou a vektor x zpětnou substitucí.Výpočet determinantu
Mějme za úkol určit determinant matice A, det(A). Pokud se nám podaří převést A na součin L∗U, pak det(A)=det(L∗U)=det(L)∗det(U), což je součin prvků na diagonále L a U, jelikož to jsou matice trojúhelníkové.Inverze matice
Mějme za úkol určit inverzní matici k A, A−1. Hledáme tedy řešení rovnice A∗A−1=I. K tomuto můžeme přistupovat jako k řešení n soustav rovnic, tj. A∗xi=ei, kde ei je jednotkový vektor s 1 na i-tém místě a xi je sloupec námi hledané matice.Jak je vidět, pro takovýto rozklad matice bychom našli spoustu využití.
Algoritmus:
Idea
Uvažujme normální gaussovu eliminaci. V první fázi je zde snaha převést matici na horní trojúhelníkovou, v našem případě by to mohla být matice U. Zde vyplývají na povrch dvě zajímavé otázky - zda by se nedaly elementární úpravy reprezentovat násobením maticí zleva a zda by součin těchto matic elementárních úprav nebyl dolní trojúhelníkovou maticí. Odpověď je ano. Převod na horní trojúhelníkovou matici je možné realizovat přičítáním alfa-násobku prvního vhodného řádku k řádkům pod ním, abychom vynulovali daný sloupec pod pivotem. Tato elementární úprava se dá reprezentovat násobením zleva maticí, kterou vyrobíme z jednotkové tak, že pod pivot umístíme potřebné koeficienty.Příklad
Úskalí
Při tomto postupu se může stát, že se na diagonále objeví nula. Při běžné gaussově eliminaci tyto dva řádky (i. a j.) prohodíme. Tuto úpravu můžeme emulovat prohozením i. a j. řádku v matici L, ovšem potom L už nebude trojúhelníková. Vyřešíme to tzv. “permutační maticí” P, která bude na začátku jednotková a které budeme prohazovat řádky. Rozklad tedy bude A=PLU.Vliv permutační matice na operace:
- řešení soustavy rovnic - PLUx=b - ve vstupním vektoru b pouze prohodíme hodnoty podle matice P.
- determinant - det(PLU) - někde si evidujeme počet prohození řádků v P, podle kterého výsledný determinant vynásobíme +1 / -1.
- inverze - ve výsledné inverzní matici prohodíme řádky podle matice P
Složitost:
V cyklu musíme probrat řádky matice a od každého z nich odečteme násobek prvního řádku, to vše pro každý ze sloupců. Jsou to tedy 3 vnořené cykly a složitost LU rozkladu je tedy O(n3).Při řešení soustavy rovnic je třeba dopočítat vektor Ux dopřednou a x zpětnou substitucí (obojí má složitost O(n2)). Nezískali jsme tedy žádné zrychlení oproti Gaussově eliminaci (složitost O(n3)). Zrychlení ale získáme ve chvíli, kdy máme vyřešit stejnou soustavu A pro více pravých stran. Když už jednou spočítáme LU rozklad, vyřešení soustavy pro libovolnou pravou stranu má složitost O(n2).
Efektivnost výpočtu determinantu dle definice musíme sečíst n! členů, v každém z nich vynásobit n čísel, složitost je tedy O(n∗n!). Determinant lze vypočítat pomocí gaussovy eliminace v čase O(n3). Náš algoritmus funguje také v čase O(n3), jelikož LU rozklad je jiný způsob přístupu ke gaussově eliminaci.
Výpočet inverzní matice gaussovou eliminací má složitost O(n3). Nezískali jsme tedy žádné zrychlení.
Okomentovat