Příklad: Řešte soustavu lineárních algebraických rovnic 1x 1 + 5x 2 +7x 3 + 5x 4 + 5x 5 = 275 2x 1 + 7x 2 + 6x 3 + 9x 4 + 6x 5 = 1 A * x = b 8x 1 + 9x 2 + x 3 +45x 4 +22x 5 = 319 3x 1 +12x 2 + 6x 3 + 8x 4 +33x 5 = 242 2x 1 + 2x 2 +2x 3 +96x 4 +98x 5 = 958 A=[1, 5,7, 5, 5;... x=[ x1 b=[275;... 2, 7, 6, 9, 6;... x2 1;... 8, 9, 1,45,22;... x3 319;... 3,12, 6, 8,33;... x4 242;... 2, 2,2,96,98] x5] 958] kde A je matice koeficientů soustavy lineárních rovnic, x je sloupcový vektor neznámých (tj. [x1;x2;x3;x4;x5]), b=[275;1;319;242;958] je sloupcový vektor pravých stran (tj. vše, co je vpravo od =)
Platí: A * x = b A -1 * A * x = A -1 * b J * x = A -1 * b x = A -1 * b, kde J je jednotková matice. - podle tohoto vztahu počítáme x = inv(a) * b % * operace maticové násobení (5,1) = (5,5) * (5,1) počty řádků a sloupců souhlasí - nebo pomocí maticového dělení zleva x = A \ b % \ operace maticové dělení zleva
Platí: A * x = b A -1 * A * x = A -1 * b J * x = A -1 * b x = A -1 * b, Víme, že: A -1 * A = J J * x = x kde J je jednotková matice. - podle tohoto vztahu počítáme x = inv(a) * b % * operace maticové násobení (5,1) = (5,5) * (5,1) počty řádků a sloupců souhlasí - nebo pomocí maticového dělení zleva x = A \ b % \ operace maticové dělení zleva
A=[1,5,7,5,5;2,7,6,9,6;8,9,1,45,22;... 3,12,6,8,33; 2, 2,2,96,98]; b=[275;1;319;242;958]; Řešení pomocí výpočtu inverzní matice a maticového násobení ychlejší výpočet Řešení pomocí maticového dělení zleva x = inv(a) * b x = 1. 2. 3. 4. 5. x = A \ b x = 1. 2. 3. 4. 5.
Pozor na nepřesnosti způsobené zaokrouhlováním: (round zaokrouhluje na nejbližší celé číslo) x = round(inv(a)) * b x = 361 A to je opravdu špatně... x = round(inv(a).*1)./1 * b x = - zaokrouhlíme na tisíciny.324 2.411 3.3 3.586 5.24 Stále velmi nepřesné
round zaokrouhlení na nejbližší celé číslo floor zaokrouhlení na nejbližší nižší celé číslo, zaokrouhlení dolů ceil zaokrouhlení na nejbližší vyšší celé číslo, zaokrouhlení nahoru fix zaokrouhlení na nejbližší celá čísla směrem k nule. Příklad: a=[-.954, -1.231, 5.241, 6.896]; floor(a) ans = -1-2 5 6 round(a) ans = -1-1 5 7 ceil(a) ans = -1 6 7 fix(a) ans = -1 5 6
Příklad elektrický obvod se stejnosměrným zdrojem napětí Určete proudy 18, 23, 4, 5, 67 v obvodu na obr., je-li dáno: 1 = 1 Ω, 2 = 2 Ω, 3 = 3 Ω, 4 = 5 Ω, 5 = 3 Ω, 6 = 2 Ω, 7 = 4 Ω, 8 = 4,5 Ω, U = 6 V. Řešte pomocí přímé aplikace Kirchhoffových zákonů. 3 6 2 4 5 7 1 = + - U 8 U AC
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí 3 6 2 4 5 7 1 = + - U 8 1. K. z. pro uzel A: 1. K. z. pro uzel C: 2. K. z. pro smyčku s 1 : 2. K. z. pro smyčku s 2 : 2. K. z. pro smyčku s 3 : U AC 18 23 4 5 67 18 118 4 4 5 5 818 U 2 23 3 23 4 4 667 7 67 5 5
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí 1. K. z. pro uzel A: 1. K. z. pro uzel C: 2. K. z. pro smyčku s 1 : 2. K. z. pro smyčku s 2 : 2. K. z. pro smyčku s 3 : 18 23 4 5 67 18 U 1 18 4 4 5 5 8 18 2 23 3 23 4 4 667 7 67 5 5 ovnice upravíme, seřadíme proudy, na levé straně ponecháme členy s neznámými, ostatní členy převedeme na pravou stranu. 1. K. z. pro uzel A: 1* 18 1* 23 1* 4 * 5 * 67 1. K. z. pro uzel C: 1* 18 * 23 * 4 1* 5 1* 67 2. K. z. pro smyčku s 1 : 1 8 )* 18 * 23 4 * 4 5 * 5 * 67 2. K. z. pro smyčku s 2 : * 18 ( 2 3 )* 23 4 4 * 5 * 67 2. K. z. pro smyčku s 3 : * 18 * 23 * 4 5 5 ( 6 7 )* 67 ( U
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí Soustava rovnic: Řešíme soustavu 5 rovnic o 5 neznámých: * * 1* 1* * 1 67 5 4 23 18 1* 1* * * * 1 67 5 4 23 18 * * )* ( * 67 5 4 4 23 3 2 18 )* ( * * * 67 7 6 5 5 4 23 18 1 1 1 1 1 1 67 5 4 23 18 7 6 5 4 3 2 5 4 8 1 U 67 5 5 4 4 23 18 8 1 * * * * )* ( U
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí A=[ 1, -1, -1,, ;... -1,,, 1, 1;... 1+8,, 4, 5, ;...,2+3,-4,, ;...,,,-5,6+7]; b=[;;u;;]; 1 1 1 1 1 1 67 5 4 23 18 7 6 5 4 3 2 5 4 8 1 U
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí 1=1; 2=2; 3=3; 4=5; 5=3; 6=2; 7=4; 8=4.5; U=6; % jednotlivé hodnoty odporů a napětí A = [1,-1,-1,,;-1,,,1,1;1+8,,4,5,;...,2+3,-4,,;,,,-5,6+7]; % matice A b = [;;U;;]; % sloupcový vektor b x = A\b % maticová operace - dělení zleva x = Řešení soustavy rovnic je: 6. 18 6 A 3. 23 3 A 3. 4. 4 3 A 2. 5 4 A 67 2 A
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí Jiná možnost řešení soustavy rovnic: =[1,2,3,5,3,2,4,4.5]; % hodnoty odporů - vektor U=6; A=[1,-1,-1,,;-1,,,1,1;(1)+(8),,(4),(5),;,(2)+(3),-(4),,;,,,-(5),(6)+(7)]; b = [,,U,,]; % b zadán jako řádkový vektor x = A\b. % transpozice vektoru b x = 6. 3. 3. 4. 2.
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí Jiná možnost řešení soustavy rovnic: =[1,2,3,5,3,2,4,4.5]; % hodnoty odporů - vektor U=6; V matici A prvky vektoru A=[1,-1,-1,,;-1,,,1,1;(1)+(8),,(4),(5),;,(2)+(3),-(4),,;,,,-(5),(6)+(7)]; b = [,,U,,]; % b zadán jako řádkový vektor x = A\b. % transpozice vektoru b x = 6. 3. 3. 4. 2.
Pokračování příkladu elektrický obvod se stejnosměrným zdrojem napětí Jiná možnost řešení soustavy rovnic: =[1,2,3,5,3,2,4,4.5]; % hodnoty odporů - vektor U=6; V matici A prvky vektoru A=[1,-1,-1,,;-1,,,1,1;(1)+(8),,(4),(5),;,(2)+(3),-(4),,;,,,-(5),(6)+(7)]; b = [,,U,,]; % b zadán jako řádkový vektor x = A\b. % transpozice vektoru b x = 6. 3. Vektor b musí být 3. sloupcový, aby mohlo 4. proběhnout dělení zleva 2.
Příklad: Funkce pro výpočet obsahu kruhu function S = obsah(r) S = pi*(r.^2); % operace prvek po prvku end % konec funkce Volání funkce pro více poloměrů, vypočtou se obsahy všech kruhů najednou vstupní parametr vektor nutná operace prvek po prvku ve funkci polomery = [1,5,1,2]; % vstupni parametr vektor obsahy = obsah(polomery) obsahy = 3.1416 78.5398 314.1593 1256.6371
Příklad: Funkce pro výpočet objemu kvádru function V = objem(a,b,c) V = a.*b.*c; % operace prvek po prvku end % konec funkce Volání funkce pro 3 kvádry o stranách: a 1 = 1 mm, b 1 = 1 mm, c 1 = 1 mm (vlastně krychlička), a 2 = 2 mm, b 2 = 5 mm, c 2 = 7 mm, a 3 = 3 mm, b 3 = 6 mm, c 3 = 8 mm. Aby mohlo proběhnout násobení vektorů prvek po prvku, je nutná operace prvek po prvku ve funkci V = objem([1,2,3],[1,5,6],[1,7,8]) V = 1 7 144 % objemy jednotlivých kvádrů
Příklad: Funkce jednoduchá kalkulačka function kalkulacka(a,b,znak) switch (znak) case '+' disp(a+b); case '-' disp(a-b); case '*' disp(a.*b); % operace prvek po prvku case '/' disp(a./b); % operace prvek po prvku case '\' disp(a.\b); % operace prvek po prvku otherwise disp('toto nepocitam'); end % konec switch end % konec funkce Volání funkce: kalkulacka([8,4,6],[2,1,3],'*') 16 4 18
Příklad: Funkce pro řešení soustavy lineárních algebraických rovnic vstupní parametry: matice koeficientů soustavy a vektor pravých stran. function x = soustava_rovnic(a,b) x = A \ b; % operace maticová end % konec funkce Volání funkce pro soustavu: 3x 1 + 4x 2 = 11 2x 1 5x 2 = 8 x = soustava_rovnic([3,4;2,-5],[11;-8]) x = 1. 2. Ve funkci soustava_rovnic, aby výpočet mohl proběhnout je nutno použít maticovou operaci A \ b.
return ukončení funkce Příklad: Funkce pro řešení soustavy lineárních algebraických rovnic s ošetřením řešitelnosti soustavy vstupní parametry: matice koeficientů soustavy A a vektor pravých stran b. Bylo uvedeno: Matice, jejíž determinant je nenulový, se nazývá regulární. Je-li matice koeficientů soustavy regulární, tedy det(a), potom má soustava právě jedno řešení. nverzní matici lze vytvořit pouze ke čtvercové matici, která je regulární a tedy lze pro výpočet soustavy užít vztahy: x = inv(a) * b, resp. x = A \ b Pozn.: Později si ukážeme techniky, jak dále rozpoznat, zda má soustava nekonečně mnoho řešení či žádné řešení.
return ukončení funkce Příklad: Funkce pro řešení soustavy lineárních algebraických rovnic s ošetřením řešitelnosti soustavy vstupní parametry: matice koeficientů soustavy A a vektor pravých stran b. function soust_rov_det(a,b) if(det(a)==) disp('determinant se rovna nule => konec!') return % konec běhu funkce else x = A \ b; disp('eseni soustavy') disp(x) end end
soust_rov_det([1,1;2,2],[11;-8]) Determinant se rovna nule => konec! Pokračování příkladu: Volání funkce pro soustavu: 3x 1 + 4x 2 = 11 2x 1 5x 2 = 8 det([3,4;2,-5]) ans = -23 soust_rov_det([3,4;2,-5],[11;-8]) eseni soustavy 1 2 x 1 + x 2 = 11 2x 1 + 2x 2 = 8 det([1,1;2,2]) ans =
linspace(od, do, počet_prvků_mezi_od_do) vytvoří řádkový vektor se zadaným počtem prvků rovnoměrně rozložených mezi počáteční a koncovou hodnotou Např.: linspace(,1,5) 5 prvků mezi a 1 ans = 2.5 5. 7.5 1. logspace(exp_od, exp_do, počet_prvků) vytvoří řádkový vektor, avšak se zadaným počtem prvků logaritmicky rozložených mezi 1 exp_od a 1 exp_do. Např.: logspace(,1,5) 5 prvků mezi 1 a 1 1, tj. 5 bodů mezi 1 a 1 ans = 1. 1.7783 3.1623 5.6234 1.
:2:4 prvky mezi a 4 s krokem 2 ans = 2 4 linspace(,4,3) 3 prvky mezi a 4 (nezadán krok) ans = lineární rozložení prvků 2 4 logspace(,4,3) 3 prvky mezi 1 a 1 4, tj. mezi 1 a 1 ans = logaritmické rozložení prvků 1 1 1
:2:4 prvky mezi a 4 s krokem 2 ans = 2 4 není zadán počet prvků linspace(,4,3) 3 prvky mezi a 4 (nezadán krok) ans = lineární rozložení prvků 2 4 není zadán krok logspace(,4,3) 3 prvky mezi 1 a 1 4, tj. mezi 1 a 1 ans = logaritmické rozložení prvků 1 1 1 není zadán krok
plot() vytváří dvou-dimenzionální grafy, mnoho různých kombinací vstupních argumentů, nejjednodušší formou je plot(y), plot(x,y). plot(y) vykreslí hodnoty vektoru y v závislosti na jejich indexu (pořadí ve vektoru) plot (x, y) vykreslí hodnoty vektoru y v závislosti na hodnotách vektoru x. plot (x, y,'řetězec') vykreslí hodnoty vektoru y v závislosti na hodnotách vektoru x, řetězec svým složením příslušných znaků nastaví barvu křivky, příp. značky, typ značky a styl čáry
Příklad: vykreslení grafu funkce y=sin(t) pro t z intervalu od do 2π Použití :, příp. linspace(), potom sin() a plot() t = [:.1:2*pi]; y = sin(t); plot(t,y,'r') lze nastavit barvu křivky: k (black), r (red), g (green),b (blue), m (magenta), c (cyan), w (white), y (yellow) řetězec se píše do apostrofů např. plot(t,y,'m') nebo plot(t,y,'k') nebo celým názvem plot(t,y,'green')
t = [:.1:2*pi]; y = sin(t); plot(t,y,'--g') % čárkovaná zelená křivka lze nastavit styl čáry: '-' plná čára '-.' čerchovaná čára '--' čárkovaná ':' tečkovaná viz help plot Např. plot(t,y,'-.k') (Pozn. platí pro MATLAB, v jiných výpočetních systémech jiné možnosti)
lze nastavit typ bodu: v,^, <, > trojúhelník (různě orientovaný), o kolečko,. bod, + plus, * hvězdička, x křížek, s čtverec, apod. t = [:.2:2*pi]; y = sin(t); plot(t,y,'o') t = [:.4:2*pi]; y = sin(t); plot(t,y,'^') Další typy značek bodů - viz help plot
lze nastavit typ bodu: v,^, <, > trojúhelník (různě orientovaný), o kolečko,. bod, + plus, * hvězdička, x křížek, s čtverec, apod. t = [:.2:2*pi]; y = sin(t); plot(t,y,'o') krok => rozložení bodů v grafu t = [:.4:2*pi]; y = sin(t); plot(t,y,'^') Další typy značek bodů - viz help plot
při vykreslování křivky je důležitá velikost kroku, příp. počet prvků, ve vektoru t (na ose x). t = [:.1:2*pi]; t = [:1:2*pi]; y = sin(t); y = sin(t); plot(t,y,'r') plot(t,y,'m')
při vykreslování křivky je důležitá velikost kroku, příp. počet prvků, ve vektoru t (na ose x). t = [:.1:2*pi]; t = [:1:2*pi]; y = sin(t); y = sin(t); plot(t,y,'r') plot(t,y,'m') krok
při vykreslování křivky je důležitá velikost kroku, příp. počet prvků, ve vektoru t (na ose x). t = [:.1:2*pi]; t = [:1:2*pi]; y = sin(t); y = sin(t); plot(t,y,'r') plot(t,y,'m') krok length(t) ans = 629 length(t) ans = 7
při vykreslování křivky je důležitá velikost kroku, příp. počet prvků, ve vektoru t (na ose x). t = linspace(,2*pi,5); y = sin(t); t = linspace(,2*pi,5); plot(t,y,'b') y = sin(t); plot(t,y,'c')
při vykreslování křivky je důležitá velikost kroku, příp. počet prvků, ve vektoru t (na ose x). t = linspace(,2*pi,5); y = sin(t); plot(t,y,'b') počet prvků ve vektoru t t = linspace(,2*pi,5); y = sin(t); plot(t,y,'c')
název grafu parametr řetězec v apostrofech title('graf sin') popis os parametr řetězec v apostrofech xlabel('t') ylabel('y') zlabel('z') pro 3D grafy
název grafu parametr řetězec v apostrofech title('graf sin') popis os parametr řetězec v apostrofech xlabel('t') ylabel('y') zlabel('z') pro 3D grafy
název grafu parametr řetězec v apostrofech title('graf sin') popis os parametr řetězec v apostrofech xlabel('t') ylabel('y') zlabel('z') pro 3D grafy
název grafu parametr řetězec v apostrofech title('graf sin') popis os parametr řetězec v apostrofech xlabel('t') ylabel('y') zlabel('z') pro 3D grafy
více křivek v jednom grafu plot(x 1,y 1,x 2,y 2,,x n,y n ) Např. y 1 =sin(t), y 2 =cos(t) t = linspace(,2*pi,8); y1 = sin(t); y2 = cos(t); plot(t,y1,'ok',t,y2,'xg') xlabel('t') ylabel('y') title('graf sin a cos') legend('sin(t)','cos(t)')
více křivek v jednom grafu plot(x 1,y 1,x 2,y 2,,x n,y n ) Např. y 1 =sin(t), y 2 =cos(t) t = linspace(,2*pi,8); y1 = sin(t); y2 = cos(t); plot(t,y1,'ok',t,y2,'xg') xlabel('t') ylabel('y') title('graf sin a cos') legend('sin(t)','cos(t)') křivka sin(t) zobrazena černými kolečky ('ok'), křivka cos(t) zelenými křížky ('xg')
více křivek v jednom grafu plot(x 1,y 1,x 2,y 2,,x n,y n ) Např. y 1 =sin(t), y 2 =cos(t) t = linspace(,2*pi,8); y1 = sin(t); y2 = cos(t); plot(t,y1,'ok',t,y2,'xg') xlabel('t') ylabel('y') title('graf sin a cos') legend('sin(t)','cos(t)') křivka sin(t) zobrazena černými kolečky ('ok'), křivka cos(t) zelenými křížky ('xg')
více křivek v jednom grafu plot(x 1,y 1,x 2,y 2,,x n,y n ) Např. y 1 =sin(t), y 2 =cos(t) t = linspace(,2*pi,8); y1 = sin(t); y2 = cos(t); plot(t,y1,'ok',t,y2,'xg') xlabel('t') ylabel('y') title('graf sin a cos') legend('sin(t)','cos(t)') křivka sin(t) zobrazena černými kolečky ('ok'), křivka cos(t) zelenými křížky ('xg') legend ('řetězec 1 ',..., 'řetězec n ') umístí legendu podle pořadí uvedených řetězců (nutno dodržet pořadí jednotlivých křivek, jak byly kresleny, např. příkazem plot)