Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic 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 ●
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.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
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic základní operace s maticemi: sčítání: 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
odčítání: AB
násobení: A*B
octave:4> AB ans =
octave:5> A*B ans =
0 2 3 3
1 2 3 4
octave:5>
octave:6> A.*B ans =
octave:4>
1 0 0 4
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic 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
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic řešení soustavy rovnic Gaussovou eliminací:
Ax=b ⇒ x=A\b nebo x=A1*b “obrácené” lomítko octave:6> x=A\b octave:7> x=inv(A)*b x = x =
8 8 2 2
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic 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 = 1 1 1 1 1 1
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 Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic užitečné funkce: transponovaná matice transA=A';
vektor diag.prvků diagA=diag(A);
determinant matice detA=det(A);
součet prvků ntého ř. nradek=sum(A(n,:))
inverzní matice invA=inv(A); stopa matice trA=trace(A);
násobení ntého řádku sloupcovým vektorem A(n,:)*x submatice 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):
m1= 2 kg, m2= 3 kg, m3= 2.5 kg, k=10 N/m, g je gravitační zrychlení
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic LU dekompozice: další metoda řešení soustav rovnic Ax=b
U a L jsou takové matice, že platí: Ux=d L(Uxd)=Axb
Octave/Matlab: funkce lu [L,U]=lu(A)
Úvod do programování v prostředích Octave, Scilab a Matlab
LU=A Ld=b
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic 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
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic výpočet inverzní matice pomocí LU dekompozice:
Ax=b
jeli b “jednotkový vektor”, jsou řešení x sloupcem inverzní matice A
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic 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]=10c, koef A jsou známy na t desetinných míst, pak řešení jsou přesná jen na (tc) míst funkce norm(X,p) a cond(X,p) – podívejte se do helpu co dělají
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic známé špatně podmíněné matice: Hilbertova Vandermonde
A=hilb(n);
c=[x1 x2 x3]; A=vander(c);
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic Iterativní metoda řešení soustavy lineárních rovnic (GaussSeidel) 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 GaussSeidelovou metodou Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic 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([a1 a2 ...]); % koreny a=poly([x1 x2 ...]); % koef.polyn.
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic Soustava nelineárních rovnic (NewtonRaphson): pro soustavu 2 rovnic
pro 1 rovnici
prvky Jacobiánu
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic Soustava nelineárních rovnic (NewtonRaphson): kromě matice koef. soustavy rovnic potřebujeme ještě matici derivací, Jacobián obecně: [Jac]*xi+1=f+[Jac]*xi, kde [Jac] je matice Jacobiánu, xi+1 je vektor nových iterací, f je vektor hodnot funkcí (rovnic f(x1, x2,...)=0) a xi je vektor původních iterací
Jacobián =
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic Soustava nelineárních rovnic (NewtonRaphson): Příklad: Řešme soustavu
nějaká funkce f v souboru f.m
Napište funkci, která bude tuto soustavu řešit pomocí NewtonRaphsonovy metody. Výsledek porovnejte s výsledkem funkce fsolve (Octave) nebo fzero (Matlab). fsolve('f',[1 1])
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic Úkol:
e1=7V, e2=10V R1=100 , R2=200 , R3 = 200 1. Určete proudy v jednotlivých větvích 2. Určete napětí UAB mezi uzly A a B
Úkol: Rozdělení teploty úzkého pásku x=0
x=10 Ta=10
2m T0=40
Ta=10 T5=200
h' je koef. přenosu tepla, h'=0.05, ∆x=2m
Úvod do programování v prostředích Octave, Scilab a Matlab
Matice a maticová algebra, soustavy lineárních rovnic, kořeny polynomu a soustava nelin.rovnic Úkol: Rozdělení teploty úzkého pásku x=0
x=10 Ta=10
2m T0=40
Ta=10 T5=200
Úvod do programování v prostředích Octave, Scilab a Matlab