: Pracovní listy Pavel Ludvík, Zuzana Morávková Katedra matematiky a deskriptivní geometrie VŠB - Technická univerzita Ostrava K M D G
Řy - Nelineární rovnice 1. 1 Nelineární rovnice Nelineární rovnice Je dána spojitá funkce f (x). Hledáme x R, které je řešením rovnice Separace kořenů f (x) = 0. Grafická separace: Z grafu funkce f najdeme polohu průsečíků s x- ovou osou. Separace tabelací: Sestavíme tabulku funkčních hodnot funkce f a podle znaménkových změn určíme intervaly obsahující kořeny. Metoda půlení intervalu Bod x k určíme jako střed intervalu a k, b k podle vzorce x k = ak + b k. Další interval zvolíme podle znamének funkčních hodnot f (a k ), f (x k ), f (b k ). Je-li f (a k ) f (x k ) < 0, potom a k+1 := a k, b k+1 := x k ; A je-li f (x k ) f (b k ) < 0, potom a k+1 := x k, b k+1 := b k ; Intervaly tedy postupně půlíme a jejich středy tvořící posloupnost {x k } konvergují ke kořenu x. Výpočet ukončíme při dosažení zadané přesnosti ε, tj. když platí Newtonova metoda Nechť jsou splněny následující předpoklady: 1. f nemění znaménko na intervalu a, b ;. f nemění znaménko na intervalu a, b ; 3. platí f (a) f (b) < 0; 4. platí f (a) < b a a f (b) < b a. f (a) f (b) Potom posloupnost {x k } počítaná podle vzorce x k+1 = x k f (xk ) f (x k ) konverguje pro libovolnou počáteční aproximaci x 1 a, b. Výpočet ukončíme při dosažení zadané přesnosti ε, tj. když platí. x k x k+1 ε. b k a k ε a poslední střed x k je pak aproximací kořene x s přesností ε.
.Řy 3 - Metoda půlení intervalu Určete všechny kořeny rovnice x + e x = 0 s přesností ε = 10 metodou půlení intervalu. Provedeme separaci kořenů. Zadáme funkci a vykreslíme její graf. >> f=@(x)(*x+-exp(x)) >> fplot(f,[-5,5]) >> grid on Do proměnných a1 a b1 zadáme meze intervalu, které jsme zjistili separací. V těchto bodech zjistíme funkční hodnoty. >> a1=-1 >> b1=0 >> f(a1) >> f(b1) Spočítáme x1 jako polovinu intervalu (a 1, b 1 ) a v tomto bodě spočítáme funkční hodnotu. >> x1=(a1+b1)/ >> f(x1) Spočítáme chybu výpočtu, a pokud je větší než ε, výpočet pokračuje dál. >> abs(b1-a1)/ Podle znamének f (a 1 ), f (x 1 ), f (b 1 ) určíme nový interval (a, b ). >> a=a1 >> b=x1 Spočítáme x jako polovinu intervalu (a, b ) a v tomto bodě spočítáme funkční hodnotu. Spočítáme chybu výpočtu, a pokud je větší než ε, výpočet pokračuje dál. >> x=(a+b)/ >> f(x) >> abs(b-a)/ Podle znamének f (a ), f (x ), f (b ) určíme nový interval (a 3, b 3 ). >> a3=a >> b3=x Spočítáme x3 jako polovinu intervalu (a 3, b 3 ) a v tomto bodě spočítáme funkční hodnotu. Spočítáme chybu výpočtu, a pokud je větší než ε, výpočet pokračuje dál. >> x3=(a3+b3)/ >> f(x3) >> abs(b3-a3)/ Podle znamének f (a 3 ), f (x 3 ), f (b 3 ) určíme nový interval (a 4, b 4 ). >> a4=x3 >> b4=b3 Výpočet pokračuje dál, pokud je chyba větší než ε. Kořen je 0.77 ± 10. Ostatní kořeny spočítáme obdobným způsobem.
3.Řy 4 - Newtonova metoda Určete všechny kořeny rovnice x 4 cos (x) = 0 s přesností ε = 10 8 Newtonovou metodou. Provedeme separaci kořenů. >> f=@(x)x-4*cos(x).ˆ >> fplot(f,[-5,5]) >> grid on Zadáme meze nalezeného intervalu. >> a=3 >> b=4 Zadáme první a druhou derivaci. >> df=@(x)1+8*cos(x).*sin(x) >> ddf=@(x)-8*sin(x).ˆ+8*cos(x).ˆ Ověříme předpoklady. >> x=a:0.1:b >> df(x) >> ddf(x) >> f(a)*f(b) >> abs(f(a)/df(a)) >> abs(f(b)/df(b)) Předpoklady nejsou splněny, a tak je potřeba nalézt menší interval, ve kterém leží kořen. A opět ověříme předpoklady. >> fplot(f,[3,4]) >> a=3.4 >> b=3.6 >> x=a:0.01:b >> df(x) >> ddf(x) >> f(a)*f(b) >> abs(f(a)/df(a)) >> abs(f(b)/df(b)) Zadáme počáteční aproximaci. >> format long >> x0=a Vypočítáme další aproximaci a chybu, a pokud není menší než ε, výpočet pokračuje dál. >> x1=x0-f(x0)/df(x0) >> abs(x0-x1) Vypočítáme další aproximaci a chybu, a pokud není menší než ε, výpočet pokračuje dál. >> x=x1-f(x1)/df(x1) >> abs(x1-x) Výpočet pokračuje dál, dokud chyba není menší než ε. Kořen je 3.5014739 ± 10 8. Ostatní kořeny spočítáme obdobným způsobem.
. Numerická matematika Řy5 - Soustavy lineárních rovnic: iterační metody 4. Soustavy lineárních rovnic: iterační metody Soustava lineárních rovnic Je dána soustava lineárních rovnic A x = b s regulární čtvercovou maticí A. Pak má soustava lineárních rovnic právě jedno řešení x. Konvergenční kritérium Soustavu lineárních rovnic A x = b upravíme pomocí řádkově ekvivalentních úprav na tvar s ostře diagonální maticí. Poté soustavu přepíšeme do iteračního tvaru x = C x + d. Jacobiho metoda Nechť x (0) je daná počáteční aproximace. Iterační výpočet provádíme podle rekurentního vzorce x (k+1) = C x (k) + d, k = 0, 1,,.... Rozepíšeme maticové násobení po prvcích x (k+1) n i = c ij x (k) j + d i, i = 1,..., n k = 0, 1,,.... j=1 Jestliže posloupnost vektorů {x k } konverguje k vektoru x, pak x je řešením x = C x + d a tedy i A x = b. Vektor x (0) můžeme zvolit libovolně. Výpočet ukončíme, jestliže je splněno ukončovací kritérium x (k+1) x (k) ε, kde ε > 0 je dané malé číslo a je řádková norma. Gaussova-Seidelova metoda Nechť x (0) je daná počáteční aproximace. Iterační výpočet provádíme podle rekurentního vzorce x (k+1) i 1 i = j=1 c ij x (k+1) j + n c ij x (k) j + d i, i = 1,..., n j=i+1 Vektor x (0) můžeme zvolit libovolně. Výpočet ukončíme, jestliže je splněno ukončovací kritérium x (k+1) x (k) ε.
5.Řy 6 - Jacobiho metoda Vyřešte soustavu lineárních rovnic x 1 6x +7x 3 = 16, 4x 1 5x +3x 3 = 8, 3x 1 x +x 3 = 11 Jedna z možných úprav na soustavu s ostře diagonálně dominantní maticí. 3 1 1 11 1 4 x = 3 5 19 pomocí Jacobiho iterační metody s přesností ε = 10. Rekurentní vzorce napíšeme v maticové formě a definujeme matici C a vektor d. 0 1 x (k+1) 3 1 3 = 1 x (k) + 4 0 1 5 5 0 11 3 3 4 19 5 = C x (k) + d Začneme definicí potřebných objektů. >> C=[0 1/3-1/3;1/4 0 1/;/5 /5 0] >> d=[11/3;3/4;19/5] >> x=[0;0;0] Výpočet nového vektoru, chyby a uložení nového vektoru do proměnné xnovy provádíme zde: >> xnovy=c*x+d >> max(abs(xnovy-x)) >> x=xnovy Předchozí tři příkazy opakujeme, dokud chyba bude větší než 10. Hodnoty zaokrouhlíme na desetinná místa a řešení zapíšeme jako x 1 = 3 ± 10, x = 5 ± 10, x 3 = 7 ± 10.
6.Řy 7 - Gaussova-Seidelova metoda Vyřešte soustavu lineárních rovnic x 1 6x +7x 3 = 16, 4x 1 5x +3x 3 = 8, 3x 1 x +x 3 = 11 pomocí Jacobiho iterační metody s přesností ε = 10. Jedna z možných úprav na soustavu s ostře diagonálně dominantní maticí. 3 1 1 11 1 4 x = 3 5 19 Rekurentní vzorce napíšeme v maticové formě a definujeme matici C a vektor d. 0 1 x (k+1) 3 1 3 = 1 x (k) + = C x (k) + d 4 0 1 5 5 0 11 3 3 4 19 5 Začneme definicí potřebných objektů. >> C=[0 1/3-1/3;1/4 0 1/;/5 /5 0] >> d=[11/3;3/4;19/5] >> x=[0;0;0] Z technických důvodů inicializujeme proměnnou xnovy hodnotou proměnné x. >> xnovy=x Výpočet nového vektoru, chyby a uložení nového vektoru do proměnné xnovy provádíme zde: >> for i=1:3, xnovy(i)=c(i,:)*xnovy+d(i), end >> max(abs(xnovy-x)) >> x=xnovy Předchozí tři příkazy opakujeme, dokud chyba bude větší než 10. Hodnoty zaokrouhlíme na dvě desetinná místa a řešení zapíšeme jako x 1 = 3 ± 10, x = 5 ± 10, x 3 = 7 ± 10.
Řy8 - Interpolace a aproximace (interpolace) 7. 3 Interpolace a aproximace Úloha interpolace Jsou dány vzájemně různé uzly x i a funkční hodnoty y i, i = 0,..., n. Hledáme polynom splňující systém interpolačních rovností p n (x i ) = y i, i = 0,..., n, tedy polynom, jehož graf budete zadanými uzly procházet. Interpolační polynom v základním tvaru Jsou dány vzájemně různé uzly x i a funkční hodnoty y i, i = 0,..., n. Dosazením obecného tvaru polynomu p n (x) = a 0 + a 1 x + a x + + a n x n do interpolačních rovností dostaneme soustavu lineárních rovnic a 0 + a 1 x i + a x i + + a n x n i = y i, i = 0,..., n, Existuje právě jeden interpolační polynom stupně nejvýše n,. Dále popíšeme dva různé způsoby, jak tento polynom nalézt. kterou lze zapsat maticově jako 1 x 0 x0... x0 n 1 x 1 x1... x1 n 1 x x... x n....... a 0 a 1 a. = y 0 y 1 y.. 1 x n x n... x n n a n y n Vyřešením této soustavy lineárních rovnic nalezneme koeficienty a 0, a 1,..., a n R hledaného interpolačního polynomu. Interpolační polynom v Lagrangeově tvaru Interpolační polynom v Lagrangeově tvaru je určen předpisem p(x) = f y 0 ϕ 0 (x) + y 1 ϕ 1 (x) + + y n ϕ n (x), kde ϕ 0 (x), ϕ 1 (x), ϕ (x) jsou polynomy Lagrangeovy báze dané úlohy: ϕ i (x) = (x x 0) (x x i 1 )(x x i+1 ) (x x n ) (x i x 0 ) (x i x i 1 )(x i x i+1 ) (x i x n ).
Řy9 - Interpolace a aproximace (aproximace) 8. Úloha aproximace Jsou dány vzájemně různé uzly x i a funkční hodnoty y i, i = 1,..., n. Hledáme funkce splňující ϕ(x i ) y i, i = 0,..., n, tedy funkci, jejíž graf budete procházet blízko zadaných uzlů. Aproximace metodou nejmenších čtverců Nechť jsou dány funkce ϕ 1 (x) a ϕ (x). Chceme nalézt hodnoty c 1, c R tak, aby funkce tvaru ϕ(x) = c 1 ϕ 1 (x) + c ϕ (x) byla nejlepší aproximací dat ve smyslu nejmenších čtverců. K tomu je třeba nejprve sestavit normální rovnice. Ty mají tvar n c 1 (ϕ 1 (x i )) n + c ϕ 1 (x i ) ϕ (x i ) = i=1 i=1 n n c 1 ϕ (x i ) ϕ 1 (x i ) + c (ϕ (x i )) = i=1 i=1 n i=1 y i ϕ 1 (x i ), n y i ϕ (x i ). i=1 Takovou soustavu je pak snadné vyřešit a nalézt tak ty správné koeficienty c 1, c R. Poznámka Budeme-li hledat přímku, tedy lineární funkci ϕ(x) = c 1 + c x. Pak ϕ 1 (x) = 1, ϕ (x) = x a soustava normálních rovnic má tvar n n c 1 1 + c x i = i=1 i=1 n n c 1 x i + c xi = i=1 i=1 n i=1 y i, n y i x i. i=1
9.Řy 10 - Interpolační polynom v základním tvaru Pro uzly x i a funkční hodnoty y i dané následující tabulkou sestavte interpolační polynom v základním tvaru. i=0 i=1 i= x i 0 3 4 y i 1 5 Nejprve zadáme do vektoru xu uzly x i a do vektoru yu funkční hodnoty y i. >> xu=[0; 3; 4] >> yu=[; 1; 5] Koeficienty polynomu spočítáme jako řešení soustavy lineárních rovnic. >> M=[ones(3,1) xu xu.ˆ] >> a=m\yu Koeficienty a i jsou zjevně racionální čísla a proto si je vypíšeme ve tvaru zlomku. >> format rat >> a Nalezený interpolační polynom je p (x) = 43 1 x + 13 1 x. Pro vykreslení grafu nalezeného polynomu p (x) si vytvoříme body xg z intervalu x 0, x a spočítáme hodnotu interpolačního polynomu p (x) = a 0 + a 1 x + a x v těchto bodech. Vykreslíme graf nalezeného polynomu. >> xg=xu(1):0.01:xu(3) >> pg=a(1)+a()*xg+a(3)*xg.ˆ >> plot(x,f, o ) >> hold on >> plot(xg,pg) >> legend( uzly, polynom )
Řy11 - Interpolační polynom v Lagrangeově tvaru 10. Pro uzly x i a funkční hodnoty y i dané následující tabulkou i=0 i=1 i= x i 0 3 4 y i 1 5 sestavte interpolační polynom v Lagrangeově tvaru. Zadáme uzly. >> xu=[0; 3; 4] >> fu=[; 1; 5] Hledaný polynom má tvar p(x) = 1 6 (x 3)(x 4) 1 3 x(x 4) + 5 x(x 3). 4 Vykreslíme zadané body a nalezený polynom. >> xg=xu(1):0.01:xu(3) >> pg=1/6*(xg-3).*(xg-4)-1/3*xg.*(xg-4)+5/4*xg.*(xg-3) >> plot(xu,fu, o ) >> hold on >> plot(xg,pg) >> legend( uzly, polynom )
11. Řy 1 - Metoda nejmenších čtverců: přímka Aproximujte následující data lineární funkcí metodou nejmenších čtverců. i=0 i=1 i= i=3 i=4 x i 3 5 7 8 y i 5 4 4 3 0 ϕ(x) = c 1 + c x Nejprve zadáme data. >> x=[ 3 5 7 8] >> y=[5 4 4 3 0] Pro výpočet budeme potřebovat také matici soustavy normálních rovnic G a vektor pravé strany d. >> G(1,1)=5 >> G(1,)=sum(x) >> G(,1)=sum(x) >> G(,)=sum(x.ˆ) >> d(1,1)=sum(y) >> d(,1)=sum(x.*y) Soustavu normálních rovnic vyřešíme. >> c=g\d Hledaná aproximace nejlepší ve smyslu nejmenších čtverců má tedy tvar (koeficienty zaokrouhlujeme na čtyři desetinná místa) ϕ(x) = 6.4693 0.65385x. Získanou aproximaci nyní uložíme do proměnné f. >> f=@(x)c(1)+c()*x a vykreslíme její graf společně se znázorněním zadaných bodů. >> xg=:0.1:8 >> plot(x,y, go,xg,f(xg), b- ) >> legend( zadana data, primka )
1. Řy 13 - Metoda nejmenších čtverců Aproximujte následující data x i -5.5-4.1-3.5 1.3.6 3.5 5.8 7.3 10.6 14.9 y i -34-11 1 6-15 -19 5 41-7 -17 funkcí 1 ϕ(x) = c 1 cos(x) + c e x metodou nejmenších čtverců. Nejprve zadáme data. >> x=[-5.5-4.1-3.5 1.3.6 3.5 5.8 7.3 10.6 14.9] >> y=[-34-11 1 6-15 -19 5 41-7 -17] Následně definujeme funkce ϕ 1 (x) = cos x a ϕ (x) = e 1 x pod proměnnými f1, f. >> f1=@(x)cos(x) >> f=@(x)1./exp(x) Pro výpočet budeme potřebovat také matici soustavy normálních rovnic G a vektor pravé strany d. >> G(1,1)=sum(f1(x).ˆ) >> G(1,)=sum(f1(x).*f(x)) >> G(,1)=sum(f(x).*f1(x)) >> G(,)=sum(f(x).ˆ) >> d(1,1)=sum(f1(x).*y) >> d(,1)=sum(f(x).*y) Soustavu normálních rovnic vyřešíme. >> c=g\d Hledaná aproximace nejlepší ve smyslu nejmenších čtverců je ϕ(x) = 18.1137 cos x 0.1630 1 e x. Získanou aproximaci nyní uložíme do proměnné f >> f=@(x)c(1)*f1(x)+c()*f(x) a vykreslíme její graf společně se znázorněním zadaných bodů. >> xg=-5.5:0.1:14.9 >> plot(x,y, go,xg,f(xg), b- ) >> legend( zadana data, nalezena funkce )
Řy14 - Numerické integrování 13. 4 Numerické integrování Určitý integrál Počítáme hodnotu určitého integrálu Integrační formule b a f (x) dx. Lichoběžníková formule Funkci f interpolujeme lineární funkci. Po její integraci je a b a f (x) dx b a ( f (a) + f (b)). Simpsonova formule Funkci f interpolujeme kvadratickou funkci v uzlech a x 0 = a, x 1 = a+b, x = b. Dostáváme b f (x) dx b a ( ( ) ) a + b f (a) + 4 f + f (b). 6 Složená lichoběžníková formule Chceme-li integrovat funkci f na intervalu a, b složenou lichoběžníkovou formulí, musíme nejprve zadaný interval rozdělit na n N stejně dlouhých dílků. Dílky pak budou mít velikost h = (b a)/(n) a dostaneme uzly x i = a + ih, i = 0, 1,..., n. Složená lichoběžníková formule pro krok h pak má tvar [ ] I h = h n 1 f (x 0 ) + f (x i ) + f (x n ). i=1 Složená Simpsonova formule Chceme-li integrovat funkci f na intervalu a, b složenou Simpsonovou formulí, musíme nejprve zadaný interval rozdělit na m stejně dlouhých dílků, kde m N. Dílky pak budou mít velikost h = (b a)/(m) a dostaneme lichý počet uzlů x i = a + ih, i = 0, 1,..., m. Složená Simpsonova formule pro krok h pak má tvar I h = h 3 [ f (x 0 ) + 4 m i=1 ] m 1 f (x i 1 ) + f (x i ) + f (x m ). i=1 Výpočet integrálu se zadanou přesností Spočítáme hodnotu pomocí integrační formule pro krok h tj. I h. Dále spočítáme hodnotu pro poloviční krok h/, tj. I h/. Výpočet ukončíme, pokud platí I h I h/ ε.
14. Řy 15 - Lichoběžníková formule Vypočtěte integrál 3 složenou lichoběžníkovou formulí pro n = 8. 1 e x dx Nejprve definujeme funkci f a integrační meze uložíme do proměnných a, b. >> f=@(x)exp(x.ˆ) >> a=-1 >> b=3 Zadáme n = 8 a spočítáme velikost kroku h. Uzly uložíme jako vektor do proměnné x. >> n=8 >> h=(b-a)/n >> x=a:h:b Numerickou hodnotu integrálu spočteme a uložíme do proměnné I. >> I=h/*(f(x(1))+*sum(f(x(:n)))+f(x(n+1))) Výsledek je 30.64.
Řy16 - Složená Simpsonova formule 15. Vypočtěte integrál e 1 ln x 9 x dx složenou Simpsonovou formulí se zadanou přesností ε = 10 8. Nejprve definujeme funkci f a integrační meze uložíme do proměnných a, b. >> f=@(x)log(x)./sqrt(9-x.ˆ) >> a=1 >> b=exp(1) V prvním kroku zvolíme m =. Uzly uložíme jako vektor do proměnné x. >> m= >> h=(b-a)/(*m) >> x=a:h:b Numerickou hodnotu integrálu spočteme a uložíme do proměnné Inovy. >> Inovy=h/3*(f(x(1))+4*sum(f(x(::*m)))+*sum(f(x(3::*m)))+f(x(*m+1))) Spočtenou hodnotu integrálu pouze uložíme do proměnné I. Pak zdvojnásobíme hodnotu m a celý výpočet zopakujeme. Nakonec spočteme chybu I h I h >> I=Inovy; >> m=*m >> h=(b-a)/(*m) >> x=a:h:b; >> Inovy=h/3*(f(x(1))+4*sum(f(x(::*m)))+*sum(f(x(3::*m)))+f(x(*m+1))) >> abs(inovy-i) Všechny uvedené příkazy budeme opakovat, dokud je chyba větší než 10 8. Protože cílíme na přesnost 10 8, nebudou nám samozřejmě stačit čtyři desetinná místa, která MATLAB zobrazuje při formátu short. Je třeba přepnout formát výstupu na long. >> format long Výsledek zaokrouhlíme na osm desetinných míst a zapíšeme jako:. e 1 ln x dx = 0.50661191 ± 10 8 9 x
Řy17 - Počáteční úlohy pro ODR 16. 5 Počáteční úlohy pro ODR Počáteční úloha pro obyčejnou diferenciální rovnici Hledáme funkci y = y(x), která na intervalu a, b vyhovuje rovnici a počáteční podmínce y (x) = f (x, y(x)) y(a) = c. Eulerova metoda Interval a, b rozdělíme na ekvidistantní uzly s krokem h: x i = a + ih, i = 0, 1,..., n, kde n = b a h. Pak spočítáme čísla y 0 = c, y 1, y,..., y n, která aproximují hodnoty přesného řešení y(x 0 ), y(x 1 ), y(x ),..., y(x n ): y 0 = c, y i+1 = y i + h f (x i, y i ), i = 0, 1,..., n 1. Rungeova-Kuttova metoda Interval a, b rozdělíme na ekvidistantní uzly s krokem h:rungeova- Kuttova metoda x i = a + ih, i = 0, 1,..., n, kde n = b a h. Pak spočítáme čísla y 0 = c, y 1, y,..., y n, která aproximují hodnoty přesného řešení y(x 0 ), y(x 1 ), y(x ),..., y(x n ): y 0 = c, pro i = 0, 1,..., n 1 počítáme hodnotu y i+1 pomocí vzorce y i+1 = y i + 1 6 (k 1 + k + k 3 + k 4 ), k 1 = h f (x i, y i ), k = h f (x i + h, y i + k 1 ), k 3 = h f (x i + h, y i + k ), k 4 = h f (x i+1, y i + k 3 ).
17. Řy 18 - Eulerova metoda Počáteční úlohu y = y x +, y(0) = 1, řešte na intervalu 0, pomocí Eulerovy metody s krokem h = 0.5. Zadáme krajní meze intervalu a, b, hodnotu počáteční podmínky c a funkci pravé strany diferenciální rovnice f. >> a=0 >> b= >> c=-1 >> f=@(x,y)y-x.ˆ+ Zadáme velikost kroku h a vypočítáme počet dílů dělení n = b a h. >> h=0.5 >> n=(b-a)/h Pomocí dvojtečkové konvence vypočítáme hodnoty x i = a + ih pro i = 0,..., n. >> x=a:h:b Zadáme hodnotu y 0 a spočítáme ostatní hodnoty y. Připomeňme, že v MATLABu se indexuje od 1, tedy hodnoty y 0, y 1,..., y n se uloží do proměnných y(1), y(),..., y(n+1). >> y(1)=c >> for i=1:n, y(i+1)=y(i)+h*f(x(i),y(i)), end Hodnoty numerického řešení vypíšeme do tabulky a vykreslíme do grafu. >> [x;y] >> plot(x,y, b.- ) Nalezené numerické řešení diferenciální rovnice je: x i 0 0.5 1 1.5 y i -1-0.5 0.15 0.6875 0.9063
18. Řy 19 - Rungeova-Kuttova metoda Počáteční úlohu y = sin(x) + cos(3y), y( 1) = 1, řešte na intervalu 1, 4 pomocí Rungeovy-Kuttovy metody s krokem h = 1. Zadáme krajní meze intervalu a, b, hodnotu počáteční podmínky c a funkci pravé strany diferenciální rovnice f. >> a=-1 >> b=4 >> c=1 >> f=@(x,y)sin(x)+cos(3*y) Zadáme velikost kroku h a vypočítáme počet dělení n = b a h. >> h=1 >> n=(b-a)/h Pomocí dvojtečkové konvence vypočítáme hodnoty x i. >> x=a:h:b Zadáme hodnotu první hodnotu y 0 a spočítáme ostatní hodnoty y. V každém kroku se počítají hodnoty k 1, k, k 3, k 4 a y i+1. >> y(1)=c >> for i=1:n, k1=h*f(x(i),y(i)); k=h*f(x(i)+h/,y(i)+k1/); k3=h*f(x(i)+h/,y(i)+k/); k4=h*f(x(i+1),y(i)+k3); y(i+1)=y(i)+1/6*(k1+*k+*k3+k4), end Hodnoty numerického řešení vypíšeme do tabulky a vykreslíme do grafu. >> [x;y] >> plot(x,y) Nalezené numerické řešení diferenciální rovnice je: x i -1 0 1 3 4 y i 1 0.510 0.8468 0.93 0.6741 0.3465
Řy0 - MATLAB operace a funkce 19. Operace sčítání + odčítání - násobení * dělení / mocnina závorky ( ) Matematické funkce Priorita priorita operace 1.. * / 3. + - absolutní hodnota x abs( ) druhá odmocnina x sqrt( ) exponenciální funkce e x exp( ) přirozený logaritmus ln(x) log( ) dekadický logaritmus log(x) log10( ) sinus sin(x) sin( ) kosinus cos(x) cos( ) tangens tg(x) tan( ) kotangens cotg(x) cot() arkussinus arcsin(x) asin( ) arkuskosinus arccos(x) acos( ) arkustangens arctg(x) atan( ) arkuskotangens arctg(x) acot( ) operací Méně používané funkce signum sign( ) logaritmus o základu log( ) hyperbolický sinus sinh( ) hyperbolický kosinus cosh( ) hyperbolický tangens tanh( ) hyperbolický kotangens coth( ) Zaokrouhlování zaokrouhlování na celé číslo round( ) zaokrouhlování na nejbližší nižší celé číslo (dolů) floor( ) zaokrouhlování na nejbližší vyšší celé číslo (nahoru) ceil( ) zaokrouhlování na nejbližší celé číslo směrem k nule fix( ) Konstanty Ludolfovo číslo π = 3.14... nekonečno neurčitý výraz pi inf NaN Definice vlastní matematické funkce f=@(proměnné)předpis funkce f=@(x)sin(x)-3*x
Řy1 - MATLAB matice a vektory 0. Vektory a matice A(3,) prvek a 3, matice A A(3,:) třetí řádek matice A A(:,) druh sloupec matice A Základní informace o matici, vektoru rozměr matice A (počet řádků, počet sloupců počet prvků matice A počet prvků vektoru v Příkazy lineární algebry size(a) numel(a length(v) determinant matice A det(a) hodnost matice A rank(a) inverzní matice A 1 inv(a) převedení matice A na horní trojúhelníkový tvar rref(a) pomocí eliminace transponovaná atice k matici A A Další operace pro matice matice typu m n náhodných čísel z intervalu 0, 1 matice nul typu m n matice jedniček typu m n jednotková matice typu m n součet prvků ve sloupcích matice A součin prvků ve sloupcích matice A největší hodnota ve sloupcích matice A nejmenší hodnota ve sloupcích matice A rand(m,n) zeros(m,n) ones(m,n) eyes(m,n) sum(a) prod(a) max(a) min(a) Maticové operace součet matic + (např. A+B je matice s prvky a ij + b ij ) rozdíl matic - (např. A-B je matice s prvky a ij b ij ) součin matic * řádek krát sloupec pravé maticové dělení / (např. A/B je matice A B 1 ) levé maticové dělení \ (např. A\B je matice A 1 B) mocnina matic (např. A k je A A... A (k-kr ) Operace prvek po prvku součin matic prvek po prvku.* (např. A.*B je matice s prvky a ij b ij ) pravé dělení,prvek po prvku./ (např. A./B je matice s prvky a ij /b ij ) levé dělení,prvek po prvku.\ (např. A.\B je matice s prvky b ij /a ij ) mocnina. (např. A. k je matice s prvky (a ij ) k )
Řy - MATLAB programování 1. Programování záhlaví funkce function [výstupy ] = rozhodovací blok if podmínka 1 blok příkazů end rozhodovací blok if podmínka 1 blok příkazů elseif podmínka blok příkazů... else blok příkazů end jméno (vstupy) Relační operátory je rovno = == není ovno = = je menší < < je větší > > je menší nebo rovno <= je větší nebo rovno >= Logické operátory a (konjunkce) nebo (disjunkce) negace and(a,b) nebo a & b or(a,b) nebo a b not(a) nebo a cyklus se známým počtem opakování for rozsah hodnot blok příkazů end cyklus s podmínkou while podmínka blok příkazů end
Řy3 - MATLAB grafy a jiné. Grafy, ostatní příkazy plot(x,y) plot(x,y, specifikace ) fplot(funkce,[a,b]) Specifikace grafu Barvy Symboly Typy čar b modrá. tečky - plná g zelená o kroužky : tečkovaná r červená x křížky -. čerchovaná c světle modrá + křížky + -- tečkovaná m fialová * hvězdy y žlutá s čtverce k černá d kosočtverce v trojúhelníky (dolu) trojúhelníky (nahoru) < trojúhelníky (vlevo) > trojúhelníky (vpravo) p pěticípé hvězdy h šesticípé hvězdy Příkazy pro práci s proměnnými, programem smazání proměnných clear zavření okna s obrázkem close smazání obrazovky clc uložení textu z command window diary soubor.txt seznam proměnných who seznam proměnných s informacemi whos formát výpisu dlouhý format long formát výpisu krátký format short formát výpisu ve zlomku format rat Úprava grafu rozsah os axis([,,, ]) poměr os 1:1 axis equal nadpis obrázku title( text ) popis x-ové osy xlabel( text ) popis y-ové osy ylabel( text ) legenda legend( text1, text,... ) zobrazení mřížky do grafu grid on více grafů jednoho obrázku hold on