Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Počítače a programování 2 pro obor EST KPC2E TUTORIÁL 4
OSNOVA: a) Úvod do Matlabu b) Vektory a matice c) 2D grafické výstupy d) Příkazy Matlabu e) 3D grafické výstupy Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně
2
Ú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.) 2
3
Úvod do Matlabu (2/5) Integrované prostředí 3
4
Ú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 4
5
Úvod do Matlabu (4/5) Příklad práce v příkazovém okně:
Zápis číselných konstant: 6.6345e23 9.12E-20 i (komplexní číslo) Konstanty: pi = …. i nebo j imaginární jednotka realmax maximální reálné číslo realmin minimální reálné číslo inf nekonečno nan nedefinovaná hodnota >> / 45 ans = >> b = / 8; >> b = b + 1 >> b = >> c = 1 + 8i; >> d = i; >> c + d ans = i >> e = 2e2; >> f = 3E-1; >> e + f ans = 5
6
Ú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 6
7
Vektory a matice (1/19) 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 Komentáře: - na řádku za % - celý blok %{ zakomentovaný blok %} >> u = [ ]; % vycet prvku >> u(3) = 8; % definice jednoho prvku u = >> x = 1:5 % notace s dvojteckou x = >> y = 0:pi/4:pi y = 7
8
Vektory a matice (2/19) 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 = [ ] >> x(4) ans = 8 Výběr části vektoru (od indexu:po index): >> x(3:5) ans = 8
9
Vektory a matice (3/19) Generování tabulky
- matice se dvěma sloupci pro funkci y = cos(x) >> x = [0.0:0.1:1.0]'; %sloupcový vektor … >> y = cos(2*pi*x); %sloupcový vektor výsledků >> [x y] %spojení dvou sloupcových vektorů ans = 9
10
Vektory a matice (4/19) 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 prvku A = >> B = [1:5 9; 2:3:17; 8 9 3:-1:0] % notace s dvojteckou B = 10
11
Vektory a matice (5/19) 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 řádku ans = >> A(:,1) % vektor z prvního sloupce ans = 1 3 5 11
12
Vektory a matice (6/19) 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 = >> A(2,3:5) % vektor z druhého řádku od sl. 3 po sl. 5 ans = >> A(2:4,1:4) % matice bez prvního řádku a posledních % dvou sloupců ans = 12
13
Vektory a matice (7/19) 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 = >> A(:,[2 4]) = B(:,2:3) %nahrazeni A = % lze taky A(:,2)=B(:,2) a A(:,4)=B(:,3) 13
14
Vektory a matice (8/19) Prohození pořadí řádků (sloupců)
Prohození pořadí sloupců z matice A (viz předchozí strana) sloupcem 2 a 3 z matice B: A = A = A(:, 6:-1:1) A = 14
15
Vektory a matice (9/19) Maticové operace – maticový součin (netečková notace) >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 7 8 9 >> B = [1 2 4; 2 3 4; 3 3 3] B = 1 2 4 2 3 4 3 3 3 >> A*B % maticový součin ans = % pro prvek (1,1): 1*1+2*2+3*3 = = 14 15
16
Vektory a matice (10/19) Maticové operace – součin po prvcích (tečková notace) >> A = [1:3; 4:6; 7:9] A = 1 2 3 4 5 6 7 8 9 >> B = [1 2 4; 2 3 4; 3 3 3] B = 1 2 4 2 3 4 3 3 3 >> A.*B % součin po prvcich – teckova notace ans = % pro prvek (1,1): 1*1 = 1 16
17
Vektory a matice (11/19) Podobně – skalární součin a součin po prvcích (tečková notace) >> X = [ ] X = >> Y = [ ] Y = >> X*Y’ %skalarni soucin = radkovy * sloupcovy (Y je %transponovany, vysledkem je jedno cislo - skalar ans = 78 %1*2 + 14*8 - 9*5 + 3*3 = – = 78 >> X.*Y %součin po prvcich – teckova notace – pozor %neni to vektorovy soucin % pro prvek (1): 1*2 = 2 17
18
Vektory a matice (12/19) 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 Y ans = %pro (1): X(2)*Y(3)- X(3)*Y(2) = %5*4 –6*(-5) = = 50 18
19
Vektory a matice (13/19) Transpozice matice – operátor ’
1 2 3 4 5 6 7 8 9 >> B = A’ B = 1 4 7 2 5 8 3 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 19
20
Vektory a matice (14/19) Příklad: Pravé maticové dělení:
>> X = [1:3; 4:6; 7:9] X = 1 2 3 4 5 6 7 8 9 >> Y = [2 2 3; 8 1 5; ] Y = >> Z = X/Y Z = >> Z*Y %kontrola Z*Y = X ans = 20
21
Vektory a matice (15/19) 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 vektoru A = >> 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 = 21
22
Vektory a matice (16/19) Pokud chceme zjistit jen počet řádků:
>> size(M) % rozměr matice ans = 2 5 %2 radky a 5 sloupcu 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 22
23
Vektory a matice (17/19) 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 matice M = >> V = reshape(M,1,[]) %jednoradkovy vektor V = >> N = reshape(M,2,[]) %dvouradkova matice N = 23
24
Vektory a matice (18/19) Pokud potřebujeme převod na vektor po řádcích využijeme transpozici: >> M = [1:4;5:8;9:12] %definice matice M = >> V = reshape(M’,1,[]) %jednoradkovy vektor V = >> N = reshape(M’,2,[]) %dvouradkova matice N = 24
25
Vektory a matice (19/19) 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 = >> sum(V) ans = 30 >> M = [1:4;5:8;9:12] M = >> sum(M) ans = 25
26
2D grafické výstupy (1/24) 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) 26
27
2D grafické výstupy (2/24) 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 27
28
2D grafické výstupy (3/24) 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:*') 28
29
2D grafické výstupy (4/24) 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 Pří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') 29
30
2D grafické výstupy (5/24) 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' 30
31
2D grafické výstupy (6/24) 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') 31
32
2D grafické výstupy (7/24) 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ů 32
33
2D grafické výstupy (8/24) 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 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 initial phase in deg. Graph 6 display composition of all five harmonic component %} S = [ %parameters of the 1st harm. component %parameters of the 2nd harm. component %parameters of the 3rd harm. component %parameters of the 4th harm. component ] %parameters of the 5th harm. component t = 0:0.0001:0.02; %time vector 33
34
2D grafické výstupy (9/24) %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') ylabel('u2 [V]') …… 34
35
2D grafické výstupy (10/24) …… %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') ylabel('u [V]') 35
36
2D grafické výstupy (11/24) Výsledné grafy v jednom obrázku:
Příklad: KPC2E_Ex113.m 36
37
2D grafické výstupy (12/24) Graf funkce při proměnné vyskytující se ve výrazu několikrát Operaci je nutné prováděl prvek po prvku, tj. např. vynásobit jednotlivé elementy dvou vektorů (může být i tentýž vektor) – pro operace násobení, dělení a mocnina je nutné použít tečkovou notaci: např. y = x·sin(x) musí být zapsáno do formy y = x.*sin(x) x = -1:0.05:1; y = x.*sin(x); figure() plot(x, y, 'r', 'LineWidth', 2) title('Function y = x·sin(x)') xlabel('x') ylabel('y') grid on Příklad: KPC2E_Ex114.m
38
ezplot(string, [lo hi])
2D grafické výstupy (13/24) Funkce pro elementární zobrazení funkční závislosti popsané textovým řetězcem string v rozsahu proměné <lo, hi>: ezplot(string, [lo hi]) V řetězci se předpokládá jako proměnná symbol x figure() ezplot('x*sin(x)', [-1 1]) title('Function y = x·sin(x)') xlabel('x') ylabel('y') grid on Příklad: KPC2E_Ex115.m
39
2D grafické výstupy (14/24) Funkce plot() je základní funkcí pro 2D grafy, odvozenými funkcemi jsou funkce, které kreslí grafy s logaritmicky dělenými osami: semilogy() – y-ová osa má logaritmické dělení semilogx() – x-ová osa má logaritmické dělení loglog() – obě osy mají logaritmické dělení x = 0.01:0.01:10; y = log(x).*log10(x); figure(1) semilogy(x, y, 'r', 'LineWidth', 3) title('Function y = ln(x) · log(x)') xlabel('x') ylabel('y') grid on
40
2D grafické výstupy (15/24) Příklad: KPC2E_Ex116.m figure(2)
semilogx(x, y, 'r', 'LineWidth', 3) title('Function y = ln(x) · log(x)') xlabel('x') ylabel('y') grid on figure(3) loglog(x, y, 'r', 'LineWidth', 3) Příklad: KPC2E_Ex116.m
41
scatter(x, y, size, shape)
2D grafické výstupy (16/24) Funkce scatter() vykreslí 2D bodový graf: scatter(x, y, size, shape) Vykreslí graf funkce x = f(y) s body o velikosti size (plocha pro bod v pixelech) a tvaru bodu shape. Vlastností 'filled' lze definovat plný bod. Argument ve funkci title obsahuje znaky horního indexu (^a = a bude jako horní index) x = 0:1:10; y = 2*x.^(1/3); figure() scatter(x, y, 100, 's','filled') title('Function y = 2x^1^/^3') xlabel('x') ylabel('y') grid on Příklad: KPC2E_Ex117.m
42
2D grafické výstupy (17/24) Funkce stem() vykreslí 2D diskrétní graf:
stem(x, y, properties) x = -4*pi:0.25*pi:4*pi; y1 = cos(x); y2 = sin(x)./x; figure() stem(x,y1); title('Function y = cos(x)') xlabel('x') ylabel('y') grid on stem(x,y2,'filled',':','LineWidth',2); title('Function y = sin(x)/x') Příklad: KPC2E_Ex118.m
43
2D grafické výstupy (18/24) Funkce plotyy() vykreslí 2D graf s různým rozsahem v y-ové ose, vykreslí se dvě měřítka na levé a pravé straně plotyy(x1, y1, x2, y2, style) Vykreslí grafy funkcí x1 = f(y1) a x2 = f(y2) ve stylu style x = 0.01:0.01:10; y1 = log(x).*sin(3*x); y2 = (x.^2).*cos(2*x); figure() plotyy(x, y1, x, y2, 'plot') title('Functions ln(x)·sin(3x) and x^2·cos(2x)') xlabel('x') ylabel('y') grid on Příklad: KPC2E_Ex119.m
44
2D grafické výstupy (19/24) Parametrický graf s definicí stejných měřítek na obou osách pomocí: axis equal t = 0:0.1:2*pi; x = 2*t.*cos(t); y = 3*sin(t); figure() plot(x,y,'r','LineWidth',3) xlabel('x') ylabel('y') axis equal grid on Příklad: KPC2E_Ex120.m
45
2D grafické výstupy (20/24) Elementární vykreslení parametrického grafu pomocí funkce ezplot()– definice spirály figure() ezplot('x*cos(x)','x*sin(x)',[0 5*pi]) xlabel('x') ylabel('y') grid on Příklad: KPC2E_Ex121.m
46
2D grafické výstupy (21/24) Generování náhodných čísel
rovnoměrné rozdělení rand(size_of_matrix)v rozsahu 0 až 1 do matice o rozměru size_of_matrix normální rozdělení randn(size_of_matrix) pro střední hodnotu 0 a směrodatnou odchylku 1 do matice o rozměru size_of_matrix
47
2D grafické výstupy (22/24) Tisk histogramu: hist(X, bins) vykreslí histogram vektoru X do bins intervalů, je-li X matice separátně se vykreslí histogram pro jednotlivé sloupce matice X (různou barvou) % uniform distribution lo = 100; hi = 200; u = lo + (hi-lo)*rand(10000,1); figure() plot(u(1:50)) hist(u,20)
48
2D grafické výstupy (23/24) Příklad: KPC2E_Ex122.m
% normal distribution m = 4; sd = 2; n = m + sd*randn(10000,1); figure() plot(n(1:50)) hist(n,40) Příklad: KPC2E_Ex122.m
49
2D grafické výstupy (24/24) Funkce polar() vykreslí 2D graf v polárních souřadnicích, nepovoluje další parametry kromě definice řetězcem s pro vizuální podobu čáry a bodu polar(x, y, s) x = 0:.01:2*pi; y = 1+sin(5*x).*cos(3*x); figure() polar(x,y,'r') title('Polar graph') Příklad: KPC2E_Ex123.m
50
Příkazy Matlabu (1/5) Příkazy v Matlabu mají prakticky shodný význam jako v ANSI-C. Na rozdíl od ANSI-C, je příkazový blok definován složenými závorkami, je v Matlabu uvozen klíčovým slovem příkazu (+ definice, např. testovací podmínka) a ukončen klíčovým slovem end na samostatných řádcích. Např. konstrukce for cyklu v ANSI-C v Matlabu int m, a = 1; for(m = 1; m <= 10; m++) { a *= m; } a = 1 for m = 1:10 a = a * m; end V Matlabu se nedefinuje typ proměnné (všechny jsou matice) V Matlabu nelze použít zkrácený operátor, např. *= nebo += apod.
51
Příkazy Matlabu (2/5) Příkazy pro větvení: if – elseif – else – end
if test_expr_1 statements_1 elseif test_expr_2 statements_2 else statements_3 end Relační operátory v podmínkách: < > <= >= == ~= Operátory < > <= >= porovnávají pouze reálnou část operandů Operátory pro slučování podmínek: && (a) || (nebo) Negace: ~
52
switch – case – otherwise
Příkazy Matlabu (3/5) switch – case – otherwise switch switch_expr case case_expr_1 statement_1, …, statement_5 case {case_expr_2, case_expr_3, case_expr_4, …} statement_6, …, statement_13 otherwise statement_14, …, statement_21 end Pozor!!! Na rozdíl od ANSI-C po vykonání příkazů pro daný case je přepínač automaticky opuštěn (v C musí být příkaz break)
53
for (pevný počet cyklů)
Příkazy Matlabu (4/5) Příkazy pro cykly for (pevný počet cyklů) for index = init:step:end statements_1 end Na rozdíl od ANCI-C je inicia-li-zace (init), pod-mínka (end) i ak-tualizace (step) vždy vztažena k použitému indexu (index) for - vnořené cykly for index_s=init_s:step_s:end_s statements_s_1 for index_n=init_n:step_n:end_n statements_n end statements_s_2
54
Příkazy Matlabu (5/5) while while test_expr statements end
Příkazy statements jsou vykonány pokud je splněna podmínka test_expr, resp. reálná část výsledku test_expr je nenulová. >> a = 8; >> b = 9; >> a < b ans = 1 >> a > b Cyklus do – while není v Matalbu implementován
55
3D grafické výstupy (1/10) Definice pohledu na graf: view()
view(az, el) se dvěma parametry definuje pohled na graf podle (úhly jsou uvažovány ve stupních): view(x, y, z) se třemi parametry definuje pohled na graf od bodu [x, y , z], velikost vektoru je bez významu
56
3D grafické výstupy (2/10) plot3 vykreslí 3D graf plot3(X, Y, Z, s)
kde X, Y, Z jsou vektory shodného rozměru definující souřadnice bodů grafu v osách x, y, z s je řetězec pro vizuální podobu čáry a bodu, stejné jako u funkce plot() Pro finální podobu grafu se použijí stejné funkce jako u 2D funkce plot() Navíc popis osy z: zlabel()
57
3D grafické výstupy (3/10) Parametrický 3D graf - šroubovice
t=0:0.1:8*pi; x=cos(t); y=sin(t); z=t; figure() plot3(x,y,z,'r','LineWidth',2) grid on title('x=cos(t), y=sin(t), z=t) xlabel('x') ylabel('y') zlabel('z') view(135, 25) Příklad: KPC2E_Ex124.m
58
3D grafické výstupy (4/10) meshgird
Pro definici 3D funkce a kreslení povrchových a síťových 3D grafů je nutno definovat matice proměnných (např. pro osy x a y) [x, y] = meshgrid(od : krok : do) definuje matice x a y s obsahem podle následujícího příkladu: >> [x,y] = meshgrid(-3:2:3) x = y =
59
3D grafické výstupy (5/10) Povrchový graf
surf(X, Y, Z, C) vykreslí povrchový graf Z = f(X,Y), X, Y mohou být matice vygenerované funkcí mashgrid nebo i jen vektory Z je matice výsledné 3D funkce C definuje barevnou paletu, není-li definováno, použije se aktuální colorbar zobrazí sloupec s barevným měřítkem v ose z [x,y] = meshgrid(-5:0.1:5); Z = x.^2+y.^2; X = x(1,:); Y = y(:,1);
60
3D grafické výstupy (6/10) Příklad: KPC2E_Ex125.m figure()
%surf(x,y,Z) surf(X,Y,Z) grid on title('z=x^2+y^2') xlabel('x') ylabel('y') zlabel('z') colorbar view(135, 45) Příklad: KPC2E_Ex125.m
61
3D grafické výstupy (7/10) Definice barevné palety – jedna barva
Paleta je obecně matice použitých barev se sloupci R, G, B v rozsahu <0, 1>, příklad jen pro červenou barvu R=1, G=0, B=0: [x,y] = meshgrid(-5:0.1:5); Z = abs(x.^2+y.^2-20); X = x(1,:); Y = y(:,1); figure() surf(X,Y,Z) grid on title('z=|x^2+y^2-20|') xlabel('x') ylabel('y') zlabel('z') colormap([1 0 0]) Příklad: KPC2E_Ex126.m
62
3D grafické výstupy (8/10) Síťový graf
mesh(X, Y, Z, C) – význam parametrů shodný se surf() Příklad s barevnou paletou s jednou černou barvou [x,y] = meshgrid(-4*pi:0.2*pi:4*pi); Z = x.*sin(x)+y.*sin(y); X = x(1,:); Y = y(:,1); figure() mesh(X,Y,Z) grid on title('z=x*sin(x)+y*sin(y)') xlabel('x') ylabel('y') zlabel('z') colormap([0 0 0]) Příklad: KPC2E_Ex127.m
63
3D grafické výstupy (9/10) Konturový graf
contour(X, Y, Z, C) – význam parametrů shodný se surf(), zobrazení 3D grafu jako 2D kontury [x,y] = meshgrid(-pi:0.05*pi:pi); Z = sin(x).^2+cos(y).^2; X = x(1,:); Y = y(:,1); figure() contour(X,Y,Z) grid on title('z=sin^2(x)+cos^2(y)') xlabel('x') ylabel('y') zlabel('z') colorbar Příklad: KPC2E_Ex128.m
64
3D grafické výstupy (10/10) Kombinace 3D grafu (povrch. nebo síť.) s 2D konturovým surfc()a meshc() [x,y] = meshgrid(-2*pi:0.05*pi:2*pi); Z = sin(x)+sin(y); X = x(1,:); Y = y(:,1); figure() meshc(X,Y,Z) %surfc(X,Y,Z) grid on title('z=sin(x)+sin(y)') xlabel('x') ylabel('y') zlabel('z') colormap('Winter') colorbar Příklad: KPC2E_Ex129.m
65
3D grafické výstupy (11/13) Příklad parametrické 3D křivky – použití plot3() t=-15:0.001:15 %paramater X =(1+0.25*cos(75*t)).*cos(t) Y = (1+0.25*cos(75*t)).*sin(t) Z = t+2.0*sin(75*t) figure() plot3(X,Y,Z) colormap([1 0 0]) grid on title('Helical toroid') xlabel('x') ylabel('y') zlabel('z') Příklad: KPC2E_Ex130.m
66
3D grafické výstupy (12/13) Příklad parametrického 3D povrchu - použití mesh kx = 1; %size in x axis ky = 1; %size in y axis kz = 2; %size in z axis meshdens = 0.05*pi; [th phi] = meshgrid(-pi:meshdens :pi, 0:meshdens:2*pi); x = kx*sinh(th).*cos(phi); y = ky*sinh(th).*sin(phi); z = kz*sinh(th); figure() mesh(x,y,z) colormap([0 0 1; 1 0 0])%blue & red grid on title('Hyperboloid') axis equal Příklad: KPC2E_Ex131.m
67
3D grafické výstupy (13/13) Příklad parametrického 3D povrchu - použití surf a = 0.15; b = 1; g = 0.1; n = 1.5; [u v] = meshgrid(0:0.05*pi:2*pi, 0:0.05*pi:2*pi); x = a*(1-v/(2*pi)).*cos(n*v).* (1 + cos(u)) + g*cos(n*v) y = a*(1-v/(2*pi)).*sin(n*v).* (1 + cos(u)) + g*sin(n*v) z = a*(1-v/(2*pi)).*sin(u) + b*v/(2*pi) figure() surf(x,y,z) colormap('default') title('Horn/shell') Příklad: KPC2E_Ex132.m
68
Téma následujícího tutoriálu
DĚKUJI ZA POZORNOST Téma následujícího tutoriálu Práce se soubory v Matlabu Funkce v Matlabu Model komunikačního systému Grafické uživatelské rozhraní
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.