380 likes | 520 Views
Počítače a programování 2. Přednáška 7 24.3.2014 Jiří Šebesta. TÉMA – Ú vod do MATLAB u. Úvod do Matlabu Vektory a matice 2D grafické výstupy. Co je to MATLAB
E N D
Počítače a programování 2 Přednáška 7 24.3.2014 Jiří Šebesta
TÉMA – Úvod do MATLABu Úvod do Matlabu Vektory a matice 2D grafické výstupy
Co je to MATLAB • interaktivní programový systém The MathWorks, Inc., který umožňuje na základě kombinace programovacích technik (odvozených od základních programovacích jazyků) a široké nabídky funkcí rychlé řešení rozsáhlých technických výpočtů, počítačového modelování a simulace • základním datovým typem MATLABu je matice (n – rozměrné pole čísel), zkratka „MATrix LABoratory“ • jednotlivé výrazy, příkazy a volání funkcí lze provádět přímo v příkazovém okně nebo lze sekvenčně definovat v souboru s příponou m (***.m), který je možné definovat v libovolném textovém editoru nebo editoru, který je součástí balíku MATLABu • ve škole akademická licence (jen na PC v lab.) • na ulozto.cz je crack Úvod do Matlabu (1/5)
Integrované prostředí Úvod do Matlabu (2/5)
Příkazy v Matlabu ve tvaru • proměnná = výraz • Výrazy se skládají z operátorů, speciálních znaků, funkcí a proměnných. • - Pokud chybí přiřazení proměnné, zavádí se • systémová proměnná ans. • - Umístěním středníku za výrazem potlačíme výstup na obrazovku. • Výsledkem je obecně matice, která se zobrazí na obrazovce. • Jména proměnných a funkcí musí začínat písmenem. • Rozlišují se malá a velká písmena ve jménech proměnných, funkcí a konstant. • Šipkami v příkazovém okně lze listovat v historii příkazů • Klávesou ESC se maže aktuální příkazový řádek Úvod do Matlabu (3/5)
Příklad práce v příkazovém okně Úvod do Matlabu (4/5) >> 12458/45 ans = 276.8444 >> b = 1 + 1/8; >> b = b + 1 >> b = 2.1250 >> c = 1 + 8i; >> d = 5.5 - 3.3i; >> c + d ans = 6.500 + 4.700i >> e = 2e2; >> f = 3E-1; >> e + f ans = 200.300 Zápis číselných konstant: 3.14159 6.6345e23 9.12E-20 5.5 + 20.1i (komplexní číslo) Konstanty: pi = 3.141529…. i nebo j imaginární jednotka realmax maximální reálné číslo realmin minimální reálné číslo inf nekonečno nan nedefinovaná hodnota
Operátory v Matlabu + sčítání == rovno - Odečítání ~= nerovno * Násobení < menší než / pravé dělení > větší než \levé dělení <= menší nebo rovno ^umocňování >= větší nebo rovno () definice priority . operace prvek po prvku (v matici) && podmínkový logický součin || podmínkový logický součet (podmínkový) & logický součet po prvcích (matice) | logický součet po prvcích (matice) Úvod do Matlabu (5/5) >> u = 13*(2+3^3) u = 377
Generování vektoru Vektor v Matlabu se definuje výčtem prvků nebo definicí prvku vektoru na dané pozici, indexování je od 1. Pro generování vektoru s lineárně rostoucími (klesajícími) hodnotami lze použít notaci s dvojtečkou: vektor = od : <krok> : do Vektory a matice (1/19) Komentáře: - na řádku za % - celý blok %{ zakomentovaný blok %} >> u = [01234];% vycet prvku >> u(3) = 8;% definice jednoho prvku u = 0 1 8 3 4 >> x = 1:5 % notace s dvojteckou x = 1 2 3 4 5 >> y = 0:pi/4:pi y = 0.0000 0.7854 1.5708 2.3562 3.1416
Transpozice vektoru: u = u'. Vektory a matice (2/19) >> u = [012]’% vycet prvku a transp. do sloup. vekt. u = 0 1 2 Přístup k položkám specifikací indexu (v kulatých závorkách): >> x = [012 8 14 23] >> x(4) ans = 8 Výběr části vektoru (od indexu:po index): >> x(3:5) ans = 2 8 14
Generování tabulky - matice se dvěma sloupci pro funkci y = cos(x) Vektory a matice (3/19) >> x = [0.0:0.1:1.0]';%sloupcový vektor 0.0 0.1 0.2… >> y = cos(2*pi*x);%sloupcový vektor výsledků >> [x y]%spojení dvou sloupcových vektorů ans = 0 1.0000 0.1000 0.8090 0.2000 0.3090 0.3000 -0.3090 0.4000 -0.8090 0.5000-1.0000 0.6000 -0.8090 0.7000 -0.3090 0.8000 0.3090 0.9000 0.8090 1.0000 1.0000
Generování matice Matice se v Matlabu definuje podobně jako vektor: výčtem prvků matice nebo definicí prvku matice na dané pozici. U dvourozměrné matice je první index řádkový, druhý je sloupcový. Středník odděluje řádky. Vektory a matice (4/19) >> A = [1 2 3; 3 4 5; 5 6 7];% vycet prvku matice 3x3 >> A(3,1) = 0% definice jednoho prvku A = 1 2 3 3 4 5 0 6 7 >> B = [1:59; 2:3:17; 893:-1:0]% notace s dvojteckou B = 1 2 3 4 59 2 5 8 11 14 17 893 2 1 0
Výběr řádků resp. sloupců Výběr řádku nebo sloupce z matice lze provést dvojtečkovou notací použitou pro definici prvků matice: Výběr m-tého řádku matice A A(m, :) Výběr n-tého sloupce matice A A(:, n) Vektory a matice (5/19) >> A = [1 2 3; 3 4 5; 5 6 7];% vycet prvku matice 3x3 >> A(2,:)% vektor z druhého řádku ans = 34 5 >> A(:,1) % vektor z prvního sloupce ans = 1 3 5
Výběr části řádků resp. sloupců Výběr řádku nebo sloupce z matice lze provést dvojtečkovou notací s definicí odindexu:po index Vektory a matice (6/19) >> A = [11:16; 21:26; 31:36; 41:46] A = 11 12 13 14 15 16 21 22 23 24 25 26 31 32 33 34 35 36 41 42 43 44 45 46 >> A(2,3:5)% vektor z druhého řádku od sl. 3 po sl. 5 ans = 23 24 25 >> A(1:3,1:3) % vektor z prvního sloupce ans = 21 22 23 24 31 32 33 34 41 42 43 44
Nahrazení vybraného řádku (sloupce) Náhrada 2 a 4 sloupce z matice A (viz předchozí strana) sloupcem 2 a 3 z matice B: Vektory a matice (7/19) >> B = [99:-1:95; 89:-1:85; 79:-1:75; 69:-1:65] B = 9998979695 89 88 87 86 85 79 78 77 76 75 69 68 67 66 65 >> A(:,[2 4]) = B(:,2:3) %nahrazeni A = 11 98 13 97 15 16 218823 872526 317833 773536 416843 674546 %lze taky A(:,2)=B(:,2) a A(:,4)=B(:,3)
Prohození pořadí řádků (sloupců) Prohození pořadí sloupců z matice A (viz předchozí strana) sloupcem 2 a 3 z matice B: Vektory a matice (8/19) A = 11 98 13 97 15 16 21 88 23 87 2526 31 78 33 77 3536 41 68 43 67 4546 A = A(:, 6:-1:1) A = 16159713 9811 26 25 87 23 88 21 36 35 77 33 78 31 46 45 67 43 68 41
Maticové operace – maticový součin Vektory a matice (9/19) >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 78 9 >>B = [1 24; 2 34; 3 3 3] B = 1 24 2 34 3 3 3 >> A*B%maticový součin ans = 141721 324154 506587 % pro prvek (1,1): 1*1+2*2+3*3 = 1+4+9 = 14
Maticové operace – součin po prvcích (tečková notace) Vektory a matice (10/19) >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 78 9 >>B = [1 24; 2 34; 3 3 3] B = 1 24 2 34 3 3 3 >> A.*B% součin po prvcich – teckova notace ans = 1 4 12 8 15 24 21 24 27 % pro prvek (1,1): 1*1 = 1
Podobně – skalární součin a součin po prvcích (tečková notace) Vektory a matice (11/19) >> X = [1149 3] X = 1 149 3 >>Y = [28-53] Y = 2 8 -5 3 >> X*Y’ %skalarni soucin = radkovy * sloupcovy (Y je %transponovany, vysledkem je jedno cislo - skalar ans = 78 %1*2 + 14*8 - 9*5 + 3*3 = 2 + 112 – 45 + 9 = 78 >> X.*Y %součinpo prvcich – teckova notace– pozor %neni to vektorovy soucin ans = 2 112 -45 9 % pro prvek (1): 1*2 = 2
Pro vektorový součin dvou vektorů je v Matlabu připravena funkce cross() Vektory a matice (12/19) >> X = [4 56] X = 456 >>Y = [9-54] Y = 9 -5 4 >> cross(X, Y)%vektorovy soucin, vysledkem je vektor %kolmy na vektory X a Y ans = 50 38 -65 %pro (1): X(2)*Y(3)- X(3)*Y(2) = %5*4 –6*(-5) = 20 + 30 = 50
Transpozice matice – operátor’ Vektory a matice (13/19) >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 78 9 >>B = A’ B = 1 4 7 2 5 8 3 6 9 • Maticové dělení • pravé děleníZ = X/Yje řešenímZ*Y = X • levé děleníZ = X\Yje řešenímX*Z = Y
Př. Pravé maticové dělení Vektory a matice (14/19) >> X = [1:3; 4:6; 7:9] X = 1 2 3 4 5 6 78 9 >>Y =[2 2 3; 8 1 5; 3 -3 1] Y =2 2 3 8 1 5 3 -3 1 >> Z = X/Y Z = 1.4571 -0.3143 0.2000 1.8000 0.2000 -0.4000 2.1429 0.7143 -1.0000 >> Z*Y %kontrola Z*Y = X ans = 1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 7.0000 8.0000 9.0000
Rozměr vektoru a matice Rozměr vektoru zjistíme voláním funkce lenght(A), kde A je vektor Vektory a matice (15/19) >> A = 1:3.2:13% definice vektoru A = 0 3.2000 6.4000 9.6000 12.80005 >> length(A) % délka vektoru ans = 5 Rozměr matice zjistíme voláním funkce size(M), kde M je matice, funkce vrátí vektor o délce 2 (u 2D matice), první prvek udává počet řádků, druhý prvek počet sloupců >> M = [1:5;2:6]% definice matice M = 1 2 3 4 5 2 3 4 5 6
>> size(M)% rozměr matice ans = 25 %2 radky a 5 sloupcu Vektory a matice (16/19) Pokud chceme zjistit jen počet řádků: >> rows = size(M,1)% počet radku rows = 2 %2 radky Pokud chceme zjistit jen počet sloupců: >> cols = size(M,2)% počet sloupcu cols = 5 %5 sloupcu
Převod matice na vektor pomocí funkce reshape(M,1,[]), kde M je matice, druhý argument 1 definuje počet řádků po převodu a třetí argument počet sloupců, pokud je zadáno [],převede se na řádkový vektor celá matice (převádí se po sloup-cích), v příkladu je uveden i převod na dvouřádkovou matici. Vektory a matice (17/19) >> M = [1:4;5:8;9:12]%definice matice M = 1 2 3 4 5 6 7 8 9 10 11 12 >> V = reshape(M,1,[])%jednoradkovy vektor V = 1 5 9 2 6 10 3 7 11 4 8 12 >> N = reshape(M,2,[])%dvouradkova matice N = 1 9 6 3 11 8 5 2 10 7 4 12
Pokud potřebujeme převod na vektor po řádcích využijeme transpozici: Vektory a matice (18/19) >> M = [1:4;5:8;9:12]%definice matice M = 1 2 3 4 5 6 7 8 9 10 11 12 >> V = reshape(M’,1,[])%jednoradkovy vektor V = 1 2 3 4 5 6 7 8 9 10 11 12 >> N = reshape(M’,2,[])%dvouradkova matice N = 1 2 3 4 5 6 7 8 9 10 11 12
Funkce sum() u vektoru sečte všechny prvky vektoru, výstupem je číslo, u matice se sečtou všechny prvky ve sloupci, výstupem je vektor s délkou rovnou počtu sloupů původní matice, pokud je třeba sčítat prvky v řádcích lze opět použít transpozici. Vektory a matice (19/19) >> V = 0:2:10 V = 0 2 4 6 8 10 >> sum(V) ans = 30 >> M = [1:4;5:8;9:12] M = 1 2 3 4 5 6 7 8 9 10 11 12 >> sum(M) ans = 15 18 21 24
Základní funkcí pro vykreslování 2D grafů funkcí jeplot(): plot(x, y)vygeneruje standardní 2D graf, kde x a y jsou stejně dlouhé vektory generující n bodů v grafu o souřadnicích [x(1) y(1)], [x(2) y(2)], …[x(n) y(n)], tyto body jsou v grafu standardně spojeny plnou čarou Př. Graf funkce y = 2·sin(x)+cos(2x)naintervalu x<0; 2> 2D grafické výstupy (1/11) >> x = 0:0.01:2*pi; >>y = 2*sin(x) + cos(2*x); >> plot(x,y)
plot(x, y, s)vygeneruje standardní 2D graf (viz předchozí stránka, kde s je řetězec definující vizuální podobu vykreslované křivky. Řetězec s může obsahovat tyto specifické znaky: 2D grafické výstupy (2/11) 1) barva čáry: b = modrá g = zelená r = červená c = tyrkysová m = fialová y = žlutá k = černá w = bílá 2) styl čáry: - = plná -- = čárkovaná : = tečkovaná -. = čerchovaná bez znaku = bez čar (jen body) 3) styl bodu: . = tečka o = kroužek + = křížek * = hvězdička s = čtvereček d = kosočtverec
3) styl bodu (pokrač.): v = trojúhelník (vrchol dolů) ^= trojúhelník (vrchol nahoru) <= trojúhelník (vrchol vlevo) >= trojúhelník (vrchol vpravo) p= pentagramh = hexagram 2D grafické výstupy (3/11) Př.Model kružnice: x = R·cos() y = R·sin()naintervalu<0; 2>po 0.2 rad a pro R = 5 s vykreslením čer-venou tečkovanou čárou, body jako hvězdičky >> fi = 0:0.2:2*pi; >> R = 5; >>x = R*cos(fi); >> y = R*sin(fi); >> plot(x,y,’r:*’)
plot(x1, y1, s1, x2, y2, s2, … xn, yn, sn) vygeneruje více standardních 2D grafů (viz předchozí stránky) do jednoho společného grafu 2D grafické výstupy (4/11) Př. Kompozice dvou harmonických signálů s různou frekvencí a amplitudou (počáteční fáze je nulová) >> t = 0:0.001:1; %casova osa >> f1 = 4; % frekvence 1 >> f2 = 2.5; % frekvence 2 >> A1 = 0.5; %amplituda 1 >> A2 = 0.7; %amplituda 2 >> s1 = A1*sin(2*pi*f1*t); >>s2 = A2*sin(2*pi*f2*t); >> s = s1 + s2; >> plot(t,s1,’g’,t,s2,’b’,t,s,’r’)
Další příkazy pro úpravu grafů: 2D grafické výstupy (5/11) grid on a grid off - zobrazí resp. vypne mřížku hold on a hold off – do grafu se budou přidávat další křivky dalším voláním plot() resp. nové volání plot() překreslí celý graf (původní křivky se neobnoví) title(’řetězec’) – vloží do grafu titulek ’řetězec’ xlabel(’řetězec’) – vloží do grafu popis x-ové osy s tex-tem ’řetězec’ ylabel(’řetězec’) – vloží do grafu popis y-ové osy s tex-tem ’řetězec’
plot(x1, y1,’jméno_parametru_1’,hodnota_1, ’jméno_parametru_2’,hodnota_2, …) vygeneruje standardní 2D graf (viz předchozí stránky) se specifikací vybranýchparametrů (viz help), jako příklad uveďme šířku čáry - LineWidth nebo velikost bodu - MarkerSize 2D grafické výstupy (6/11) Př. Doplnění příkladu kompozice dvou harmonických signálů o tlustou čáru >> plot(t,s1,’g’,t,s2,’b’) >> hold on >> plot(t,s,’r’,’LineWidth’,3) >> grid on >> title(’2 signals’)
Více samostaných grafů v jednom obrázku: 2D grafické výstupy (7/11) subplot(m,n,p) – definuje společný obrázek pro m*n grafů, kde m je počet grafů nad sebou (řádky) a n je počet grafů vedle sebe (sloupců), hodnota p pak definuje pořadí příslušného podokna pro vykreslování grafu, např. subplot(3,4,2) následovaný vykreslením grafu plot() zobrazí tento graf ve druhém okně matice 3 x 4 grafů
Př. Kompozice pěti harmonických signálů se základní harmonickou 50 Hz – paramety harmonických uloženy v matici S 2D grafické výstupy (8/11) %{ Printing of six graphs into one figure using subplot function Graphs 1 to 5 display harmonic components generated from matrix S,where the 1st column represents frequency in Hz, 2nd amplitude in V, 3rd initialphase in deg. Graph 6 display composition of all five harmonic component %} S = [50 3.37 26.4 %parameters of the 1st harmonic component 100 1.23 33.4 %parameters of the 2nd -||- 150 0.56 123.0 %parameters of the 3rd -||- 200 0.13 22.5 %parameters of the 4th -||- 250 0.34 310.5] %parameters of the 5th -||- t = 0:0.0001:0.02; %time vector
2D grafické výstupy (9/11) %1st harmonic component sig1 = S(1,2)*sin(2*pi*S(1,1)*t+S(1,3)*pi/180); subplot(2,3,1) plot(t,sig1,'g') title('1st harmonic') xlabel('t [s]') ylabel('u1 [V]') grid on %2nd harmonic component sig2 = S(2,2)*sin(2*pi*S(2,1)*t+S(2,3)*pi/180); subplot(2,3,2) plot(t,sig2,'g') title('2nd harmonic') xlabel('t [s]') ylabel('u2 [V]') grid on ……
2D grafické výstupy (10/11) …… %5th harmonic component sig5 = S(5,2)*sin(2*pi*S(5,1)*t+S(5,3)*pi/180); subplot(2,3,5) plot(t,sig5,'g') title('5th harmonic') xlabel('t [s]') ylabel('u5 [V]') grid on %signal composition sigc = sig1+sig2+sig3+sig4+sig5; subplot(2,3,6) plot(t,sigc,'r') title('signal composition') xlabel('t [s]') ylabel('u [V]') grid on
Výsledné grafy v jednom obrázku 2D grafické výstupy (11/11) Příklad: Ex112.m
TÉMA NÁSLEDUJÍCÍ PŘEDNÁŠKY Příkazy v Matlabu, standardní funkce, 3D grafy DĚKUJI ZA POZORNOST