1 / 38

Přednáška 7 24.3.2014 Jiří Šebesta

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

osman
Download Presentation

Přednáška 7 24.3.2014 Jiří Šebesta

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Počítače a programování 2 Přednáška 7 24.3.2014 Jiří Šebesta

  2. TÉMA – Úvod do MATLABu Úvod do Matlabu Vektory a matice 2D grafické výstupy

  3. 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)

  4. Integrované prostředí Úvod do Matlabu (2/5)

  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)

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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)

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. >> 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

  24. 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

  25. 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

  26. 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

  27. 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)

  28. 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

  29. 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:*’)

  30. 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’)

  31. 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’

  32. 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’)

  33. 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ů

  34. 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

  35. 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 ……

  36. 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

  37. Výsledné grafy v jednom obrázku 2D grafické výstupy (11/11) Příklad: Ex112.m

  38. TÉMA NÁSLEDUJÍCÍ PŘEDNÁŠKY Příkazy v Matlabu, standardní funkce, 3D grafy DĚKUJI ZA POZORNOST

More Related