co byste měli umět po dnešní lekci: definovat matici, přistupovat k jejím prvkům provádět základní algebraické operace spočíst inverzní matici najít řešení soustavy lineárních rovnic určit vlastní čísla a vektory matice najít řešení soustavy nelineárních rovnic
matice v Octave/Matlabu: A=[1 2; 3 4] A = 1 2 3 4 prvky v řádku matice se oddělují mezerou nebo čárkou, jednotlivé řádky středníkem přístup k jednotlivým prvků matice: A(řádek, sloupec) A(1,1) = 1 A(1,2) = 2 A(2,1) = 3 A(2,2) = 4
základní operace s maticemi: sčítání: A+B odčítání: A B násobení: A*B octave:1> A=[1 2; 3 4]; octave:2> B=[1 0; 0 1]; octave:3> A+B ans = 2 2 3 5 octave:4> octave:4> A B ans = 0 2 3 3 octave:5> octave:5> A*B ans = 1 2 3 4 octave:6> A.*B ans = 1 0 0 4
matematické funkce a matice: všechny matematické funkce působí na každý prvek matice zvlášť: speciální maticové funkce: expm, sqrtm,... pouze pro čtvercové matice
řešení soustavy rovnic Gaussovou eliminací: Ax=b x=a\b nebo x=a 1 *b obrácené lomítko octave:6> x=a\b octave:7> x=inv(a)*b x = x = 8 8 2 2
užitečné funkce: B=zeros(m,n) vytvoří matici m x n s nulovými prvky octave:8> B=zeros(3,2) B = 0 0 0 0 0 0 B=ones(m,n) vytvoří matici m x n s jednotkovými prvky octave:9> B=ones(3,2) B = B=eye(m,n) vytvoří matici m x n s jedn.prvky na diagonále, ostatní 0 jednotkové matice B=eye(3,3) B = 1 0 0 0 1 0 0 0 1 1 1 1 1 1 1
užitečné funkce: transponovaná matice transa=a'; vektor diag.prvků diaga=diag(a); determinant matice inverzní matice stopa matice deta=det(a); inva=inv(a); tra=trace(a); součet prvků n tého ř. násobení n tého řádku sloupcovým vektorem submatice nradek=sum(a(n,:)) A(n,:)*x suba=a(r1:rn,s1:sn); Úkol: Vyřešte následující soustavu rovnic (tři závaží za sebou na stejných pružinách): m 1 = 2 kg, m 2 = 3 kg, m 3 = 2.5 kg, k=10 N/m, g je gravitační zrychlení
LU dekompozice: další metoda řešení soustav rovnic Ax=b U a L jsou takové matice, že platí: Ux=d L(Ux d)=ax b LU=A Ld=b Octave/Matlab: funkce lu [L,U]=lu(A)
Př: Řešte soustavu Ax=b pomocí LU dekompozice octave:82> [L,U]=lu(A) L = 0.14286 0.32836 1.00000 0.57143 1.00000 0.00000 1.00000 0.00000 0.00000 U = 7.00000 8.00000 9.00000 0.00000 9.57143 0.85714 0.00000 0.00000 1.43284 octave:83> octave:83> d=l\b d = 5.0000 5.8571 9.2090 octave:84> x=u\d x = 8.9062 1.1875 6.4271
výpočet inverzní matice pomocí LU dekompozice: Ax=b je li b jednotkový vektor, jsou řešení x sloupcem inverzní matice A
Podmíněnost matice: norma vektoru norma matice hodnota čísla Cond[A] udává tzv. podmíněnost matice (Cond 1) čím je hůře podmíněná matice A, tím jsou chyby řešení větší Cond[A]=10 c, koef A jsou známy na t desetinných míst, pak řešení jsou přesná jen na (t c) míst funkce norm(x,p) a cond(x,p) podívejte se do helpu co dělají
známé špatně podmíněné matice: Hilbertova Vandermonde A=hilb(n); c=[x 1 x 2 x 3 ]; A=vander(c);
Iterativní metoda řešení soustavy lineárních rovnic (Gauss Seidel) Ax=b, kde A je matice jejíž diagonální členy jsou nenulové. relaxace (urychlující konvergenci) (zkuste různě podmíněné matice) postačující podmínka konvergence Úkol: Napište skript (funkci), která bude řešit soustavu rovnic Gauss Seidelovou metodou
kořeny polynomu funkce na hledání jednoho kořene (viz minule) neefektivní kořeny polynomu = vlastní čísla A x=eig(a); [v,x]=eig(a); % i v.vektory x=roots([a 1 a 2...]); % koreny a=poly([x 1 x 2...]); % koef.polyn.
Soustava nelineárních rovnic (Newton Raphson): pro 1 rovnici pro soustavu 2 rovnic prvky Jacobiánu
Soustava nelineárních rovnic (Newton Raphson): kromě matice koef. soustavy rovnic potřebujeme ještě matici derivací, Jacobián obecně: [Jac]*x i+1 = f+[jac]*x i, kde [Jac] je matice Jacobiánu, x i+1 je vektor nových iterací, f je vektor hodnot funkcí (rovnic f(x 1, x 2,...)=0) a x i je vektor původních iterací Jacobián =
Soustava nelineárních rovnic (Newton Raphson): Příklad: Řešme soustavu nějaká funkce f v souboru f.m Napište funkci, která bude tuto soustavu řešit pomocí Newton Raphsonovy metody. Výsledek porovnejte s výsledkem funkce fsolve (Octave) nebo fzero (Matlab). fsolve('f',[1 1])
Úkol: e 1 =7V, e 2 =10V R 1 =100, R 2 =200, R 3 = 200 1. Určete proudy v jednotlivých větvích 2. Určete napětí U AB mezi uzly A a B Úkol: Rozdělení teploty úzkého pásku x=0 x=10 T a =10 2m T a =10 T 0 =40 T 5 =200 h' je koef. přenosu tepla, h'=0.05, x=2m
Úkol: Rozdělení teploty úzkého pásku x=0 x=10 T a =10 2m T a =10 T 0 =40 T 5 =200