přednáška 7 24.3.2014 jiří Šebesta

37
OSNOVA: a) Úvod do Matlabu b) Vektory a matice c) 2D grafické výstupy Jiří Šebesta Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 7

Upload: osman

Post on 13-Jan-2016

56 views

Category:

Documents


2 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

OSNOVA:

a) Úvod do Matlabub) Vektory a matice c) 2D grafické výstupy

Jiří ŠebestaJiří ŠebestaÚstav radioelektroniky, FEKT VUT v BrněÚstav radioelektroniky, FEKT VUT v Brně

Počítače a programování 2 pro obor ESTBPC2E

PŘEDNÁŠKA 7

ÚÚvod do Matlabu (1/5)vod do Matlabu (1/5)

• 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ěr-né 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.)

ÚÚvod do Matlabu (2/5)vod do Matlabu (2/5)

• Integrované prostředí

ÚÚvod do Matlabu (3/5)vod do Matlabu (3/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 (4/5)vod do Matlabu (4/5)

>> 12458 / 45ans = 276.8444

>> b = 1 + 1 / 8;>> b = b + 1>> b = 2.1250

>> c = 1 + 8i;>> d = 5.5 - 3.3i;>> c + dans = 6.500 + 4.700i

>> e = 2e2;>> f = 3E-1;>> e + fans = 200.300

• Příklad práce v příkazovém okně:

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

ÚÚvod do Matlabu (5/5)vod do Matlabu (5/5)

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)

>> u = 13*(2+3^3)u = 377

Vektory a matice (1/1Vektory a matice (1/199))

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

>> u = [0 1 2 3 4]; % vycet prvku>> u(3) = 8; % definice jednoho prvku u = 0 1 8 3 4

>> x = 1:5 % notace s dvojteckoux = 1 2 3 4 5

>> y = 0:pi/4:piy = 0.0000 0.7854 1.5708 2.3562 3.1416

Komentáře:

- na řádku za %

- celý blok

%{ zakomentovaný

blok

%}

Vektory a matice (2/1Vektory a matice (2/199))

Transpozice vektoru: u = u'

>> u = [0 1 2]’ % 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 = [0 1 2 8 14 23]>> x(4) ans = 8

Výběr části vektoru (od indexu:po index):

>> x(3:5) ans = 2 8 14

Vektory a matice (3/1Vektory a matice (3/199))

Generování tabulky

- matice se dvěma sloupci pro funkci y = cos(x)

>> 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.80900.2000 0.30900.3000 -0.30900.4000 -0.80900.5000 -1.00000.6000 -0.80900.7000 -0.30900.8000 0.30900.9000 0.80901.0000 1.0000

Vektory a matice (Vektory a matice (44/1/199))

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 sloupco-vý.

Středník odděluje řádky.

>> A = [1 2 3; 3 4 5; 5 6 7]; % vycet prvku matice 3x3>> A(3,1) = 0 % definice jednoho prvkuA = 1 2 3 3 4 5 0 6 7 >> B = [1:5 9; 2:3:17; 8 9 3:-1:0] % notace s dvojteckouB = 1 2 3 4 5 9 2 5 8 11 14 17 8 9 3 2 1 0

Vektory a matice (Vektory a matice (55/1/199))

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)

>> A = [1 2 3; 3 4 5; 5 6 7]; % vycet prvku matice 3x3

>> A(2,:) % vektor z druhého řádkuans = 3 4 5

>> A(:,1) % vektor z prvního sloupce ans = 1

35

Vektory a matice (Vektory a matice (66/1/199))

Výběr části řádků resp. sloupců

Výběr řádku nebo sloupce z matice lze provést dvojtečkovou notací s definicí od indexu:po index

>> A = [11:16; 21:26; 31:36; 41:46]A = 11 12 13 14 15 16

21 22 23 24 25 2631 32 33 34 35 3641 42 43 44 45 46

>> A(2,3:5) % vektor z druhého řádku od sl. 3 po sl. 5ans = 23 24 25

>> A(2:4,1:4) % matice bez prvního řádku a posledních % dvou sloupců

ans = 21 22 23 24 31 32 33 34

41 42 43 44

Vektory a matice (Vektory a matice (77/1/199))

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:

>> B = [99:-1:95; 89:-1:85; 79:-1:75; 69:-1:65]B = 99 98 97 96 95

89 88 87 86 8579 78 77 76 7569 68 67 66 65

>> A(:,[2 4]) = B(:,2:3) %nahrazeniA = 11 98 13 97 15 16

21 88 23 87 25 2631 78 33 77 35 3641 68 43 67 45 46

% lze taky A(:,2)=B(:,2) a A(:,4)=B(:,3)

Vektory a matice (8/1Vektory a matice (8/199))

Prohození pořadí řádků (sloupců)

Prohození pořadí sloupců z matice A (viz předchozí strana) sloupcem 2 a 3 z matice B:

A = 11 98 13 97 15 1621 88 23 87 25 2631 78 33 77 35 3641 68 43 67 45 46

A = A(:, 6:-1:1)

A = 16 15 97 13 98 1126 25 87 23 88 2136 35 77 33 78 3146 45 67 43 68 41

Vektory a matice (9/1Vektory a matice (9/199))

Maticové operace – maticový součin (netečková notace)

>> A = [1:3; 4:6; 7:9]A =

1 2 34 5 67 8 9

>> B = [1 2 4; 2 3 4; 3 3 3]B = 1 2 4

2 3 43 3 3

>> A*B % maticový součin ans =

14 17 21 32 41 54

50 65 87 % pro prvek (1,1): 1*1+2*2+3*3 = 1+4+9 = 14

Vektory a matice (10/1Vektory a matice (10/199))

Maticové operace – součin po prvcích (tečková notace)

>> A = [1:3; 4:6; 7:9]A =

1 2 34 5 67 8 9

>> B = [1 2 4; 2 3 4; 3 3 3]B = 1 2 4

2 3 43 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

Vektory a matice (1Vektory a matice (111/1/199))

Podobně – skalární součin a součin po prvcích (tečková notace)

>> X = [1 14 9 3]X =

1 14 9 3>> Y = [2 8 -5 3]Y = 2 8 -5 3>> X*Y’ %skalarni soucin = radkovy * sloupcovy (Y je %transponovany, vysledkem je jedno cislo - skalarans =

78 %1*2 + 14*8 - 9*5 + 3*3 = 2 + 112 – 45 + 9 = 78

>> X.*Y %součin po prvcich – teckova notace – pozor %neni to vektorovy soucin

ans = 2 112 -45 9

% pro prvek (1): 1*2 = 2

Vektory a matice (1Vektory a matice (122/1/199))

Pro vektorový součin dvou vek-torů je v Matlabu připravena funkce cross()

>> X = [4 5 6]X =

4 5 6>> Y = [9 -5 4]Y = 9 -5 4>> cross(X, Y) %vektorovy soucin, vysledkem je vektor

%kolmy na vektory X a Yans =

50 38 -65 %pro (1): X(2)*Y(3)- X(3)*Y(2) = %5*4 –6*(-5) = 20 + 30 = 50

Vektory a matice (13/1Vektory a matice (13/199))

Transpozice matice – operátor ’

>> A = [1:3; 4:6; 7:9]A =

1 2 34 5 67 8 9

>> B = A’B = 1 4 7

2 5 83 6 9

Maticové dělení- pravé dělení Z = X/Y je řešením Z*Y = X- levé dělení Z = X\Y je řešením X*Z = Y

Vektory a matice (14/1Vektory a matice (14/199))

Příklad: Pravé maticové dělení:

>> X = [1:3; 4:6; 7:9]X = 1 2 3

4 5 67 8 9

>> Y = [2 2 3; 8 1 5; 3 -3 1]Y = 2 2 3

8 1 53 -3 1

>> Z = X/YZ = 1.4571 -0.3143 0.2000

1.8000 0.2000 -0.4000 2.1429 0.7143 -1.0000>> Z*Y %kontrola Z*Y = Xans = 1.0000 2.0000 3.0000

4.0000 5.0000 6.00007.0000 8.0000 9.0000

Vektory a matice (Vektory a matice (1515/1/199))

Rozměr vektoru a matice

Rozměr vektoru zjistíme voláním funkce lenght(A), kde A je vektor:

>> A = 0:3.2:13 % definice vektoruA = 0 3.2000 6.4000 9.6000 12.8000

>> 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 maticeM = 1 2 3 4 5

2 3 4 5 6

Vektory a matice (Vektory a matice (1616/1/199))

Pokud chceme zjistit jen počet řádků:

>> size(M) % rozměr maticeans = 2 5 %2 radky a 5 sloupcu

>> rows = size(M,1) % počet radkurows = 2 %2 radky

Pokud chceme zjistit jen počet sloupců:

>> cols = size(M,2) % počet sloupcucols = 5 %5 sloupcu

Vektory a matice (Vektory a matice (1717/1/199))

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 sloupcích), v pří-kladu je uveden i převod na dvouřádkovou matici:

>> M = [1:4;5:8;9:12] %definice maticeM = 1 2 3 4

5 6 7 89 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 maticeN = 1 9 6 3 11 8 5 2 10 7 4 12

Vektory a matice (Vektory a matice (1818/1/199))

Pokud potřebujeme převod na vektor po řádcích využijeme transpozici:

>> M = [1:4;5:8;9:12] %definice maticeM = 1 2 3 4

5 6 7 89 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 maticeN =

1 2 3 4 5 6 7 8 9 10 11 12

Vektory a matice (Vektory a matice (1919/1/199))

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.

>> 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 89 10 11 12

>> sum(M)ans = 15 18 21 24

2D grafick2D grafickéé výstupy ( výstupy (11//1111))

Základní funkcí pro vykreslování 2D grafů funkcí je plot():

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říklad: Graf funkce y = 2·sin(x)+cos(2x)na intervalu x<0; 2>

>> x = 0:0.01:2*pi;>> y = 2*sin(x) + cos(2*x);>> plot(x,y)

2D grafick2D grafickéé výstupy ( výstupy (22//1111))

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:

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

2D grafick2D grafickéé výstupy ( výstupy (33//1111))

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 = pentagram h = hexagram

Příklad: Model kružnice (parametri-cká definice): x = R·cos() y = R·sin()na intervalu <0; 2> po 0.2 rad a pro R = 5 s vy-kreslením červenou 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:*')

2D grafick2D grafickéé výstupy ( výstupy (44//1111))

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 grafuPříklad: Kompozice dvou harmonic-ký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')

2D grafick2D grafickéé výstupy ( výstupy (55//1111))

Další příkazy pro úpravu grafů:

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 textem 'řetězec'

ylabel('řetězec') – vloží do grafu popis y-ové osy s textem 'řetězec'

2D grafick2D grafickéé výstupy ( výstupy (66//1111))

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ých parametrů (viz help), jako příklad uveďme šířku čáry - LineWidth nebo velikost bodu - MarkerSize

Příklad: Doplnění příkladu kom-pozice dvou harmonických sig-nálů o tlustou čáru

>> plot(t,s1, 'g',t,s2, 'b')>> hold on>> plot(t,s, 'r','LineWidth',3)>> grid on>> title('2 signals')

2D grafick2D grafickéé výstupy ( výstupy (77//1111))

Více samostaných grafů v jednom obrázku:

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ů

2D grafick2D grafickéé výstupy ( výstupy (88//1111))

Příklad: Kompozice pěti harmonických signálů se základní har-monickou 50 Hz – parametry harmonických uloženy v matici S

%{Printing of six graphs into one figure using subplot functionGraphs 1 to 5 display harmonic components generated from matrix S, where the 1st column represents frequency in Hz, 2nd amplitude in V, 3rd initial phase in deg.Graph 6 display composition of all five harmonic component %}

S = [50 3.37 26.4 %parameters of the 1st harm. component 100 1.23 33.4 %parameters of the 2nd harm. component 150 0.56 123.0 %parameters of the 3rd harm. component 200 0.13 22.5 %parameters of the 4th harm. component 250 0.34 310.5] %parameters of the 5th harm. component

t = 0:0.0001:0.02; %time vector

2D grafick2D grafickéé výstupy ( výstupy (99//1111))

%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 grafick2D grafickéé výstupy ( výstupy (1010//1111))

…… %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

2D grafick2D grafickéé výstupy ( výstupy (1111//1111))

Výsledné grafy v jednom obrázku:

Příklad: BPC2E_Ex118.m

Téma následující přednášky

– Příkazy v Matlabu, standardní funkce, 3D grafy

DĚKUJI ZA POZORNOST