Numerická lineární algebra 1 – cvičení 4
Soustavy lineárních rovnic Příklad 1.
1. Stáhněte si z http://homel.vsb.cz/~mer126/NLA1/Lectures/4/Cv/sit1d.m, prostudujte kód a otestujte metodu sítí.
2. Upravte funkci tak, aby fungovala i pro nenulové okrajové podmínky u(0) = u0, u(L) = un: sit1d(L, N, u0, un). Vzpomeňte si, že v takovém případě je třeba vhodně upravit první a poslední prvek vektoru pravé strany (viz přednáška). Výpočet chyby a vykreslení analytického řešení můžete zrušit.
Příklad 2.
1. Vygenerujte čtvercové matice náhodných čísel L (dolní trojúhelníková) a U (horní trojúhelníková) – použijte např. funkci rand a vzpomeňte si na příkazy z DÚ č. 1.
Vygenerujte také sloupcový vektor náhodných čísel b odpovídající velikosti.
Zaokrouhlete prvky matice a vektoru na tři desetinná čísla.
2. Vyjděte z následujícího kódu a vytvořte funkci fsubst, která bude řešit systém s čtvercovou dolní trojúhelníkovou maticí pomocí dopředné substituce. Doplňte test na počet vstupních argumentů, zda je vstupní matice čtvercová a test na nenulovost diagonálních prvků (pokud během výpočtu narazíte na nulový diagonální prvek, vypište chybovou hlášku a program ukončete).
function [ x ] = fsubst( L, b )
%FSUBST Resi soustavu s dolni trojuhelnikovou matici L a vekt. b
% Pouziti: x = fsubst( L, b )
% See also: lu
% zde doplnte test na pocet vstupnich argumentu (musi byt dva)
% zde otestuje, zda je matice ctvercova
x = zeros(m, 1);
x(1) = b(1) / L(1, 1);
for i = 2:m
% doplnte test na nenulovost diagonalniho prvku x(i) = (b(i) - L(i, 1:i-1)*x(1:i-1)) / L(i, i);
end
end
3. Podobně vytvořte funkci bsubst, která bude řešit systém se čtvercovou horní trojúhelníkovou maticí pomocí zpětné substituce. Nezapomeňte otestovat, zda má matice nenulové prvky na diagonále.
4. Pomocí funkcí fsubst a bsubst vyřešte soustavy Lx=b a Ux=b a porovnejte s řešením pomocí zpětného lomítka. K otestování můžete použít skript http://homel.vsb.cz/~mer126/NLA1/Lectures/4/Cv/test_subst.m