Základy algoritmizace a programování Práce s maticemi
Pˇrednáška 9 23. listopadu 2009
ZAPG
Pole: vektory a matice ˇ Vektor (jednorozmerné pole)
ˇ Matice (dvourozmerné pole)
deklarace statická int v1[5]; dynamická int * v2; ˇ ˇ + pˇridelení pameti: v2 = (int *)
deklarace statická int m1[2][3]; dynamická int * * m2; ˇ ˇ + pˇridelení pameti: m2 = (int **)
malloc(5*sizeof (int));
malloc(2*sizeof(int *));
for(i=0; i< 2; i++) m2[i]= (int *) malloc(3*sizeof(int));
ZAPG
Operace
NELZE s celým polem najednou! Pomocí cyklu˚ – s každý prvkem Vektor – jeden cyklus prvek v[i] naˇctení hodnot for(i=0; i<5; i++) scanf("%d", &v1[i]); tisk hodnot for(i=0; i<5; i++) printf("%d", v1[i]);
Matice – dva cykly prvek m[i][j] naˇctení hodnot for(i=0; i<2; i++) for(j=0; j<3; j++) scanf("%d",&m1[i][j]);
tisk hodnot for(i=0; i<2; i++) for(j=0; j<3; j++) printf("%d",m1[i][j]);
ZAPG
Úvod do MATLABu
Komponenty MATLABu Jazyk Prostˇredí Grafika Knihovny funkcí Interface (C, Fortran)
ZAPG
Balíˇcky – toolboxes Simulink MATLAB Compiler MATLAB C/C++ Graphics Library MATLAB C/C++ Math Library Signal Processing Toolbox Filter Design Toolbox Neural Network Toolbox Spline Toolbox Control System Toolbox Statistics Toolbox System Identifcation Toolbox Fuzzy Logic Image Processing Toolbox Mapping Toolbox Optimization Toolbox Symbolic Math Toolbox a mnoho dalších ZAPG
ˇ MATLABU Spuštení pˇríkazový ˇrádek : matlab
ZAPG
Kde získat informace
pˇríkaz help pˇríkaz lookfor informaˇcní okno informaˇcní navigátor stránka MathWorks : www.mathworks.com/products/matlab cˇ eské stránky : www.humusoft.cz/produkty/matlab
ZAPG
Informace – pˇríkaz help
>>help inv INV
Matrix inverse. INV(X) is the inverse of the square matrix X. A warning message ... See also SLASH, PINV ...
Overloaded methods ...
ZAPG
Informace – pˇríkaz lookfor >> lookfor inverse INVHILB Inverse Hilbert matrix. ACOS Inverse cosine. ACOSH Inverse hyperbolic cosine. ... INV Matrix inverse. ... pˇríkaz >> lookfor -all inverse hledá slovo inverse v celém helpu.
ZAPG
Informace – informaˇcní okno
Je možné spustit pˇríkazem >>helpwin nebo z menu ˇ Poskytuje tytéž informace jako help, ale pˇrehledneji
ZAPG
Informace – informaˇcní navigátor
>>helpdesk Spustí "pruzkumník" ˚ informaˇcních souboru, ˚ které jsou dostupné ve formátu html. Pokud víme, co hledáme, lze použít pˇríkaz >>doc <jméno funkce nebo pˇ ríkazu>
ZAPG
Matice – hlavní datový typ MATLABu
ˇ ˇ (1 × 1) skalární promenná – matice rozmeru ˇ (1 × n) nebo (m × 1) vektor – matice rozmeru matice (m × n) Zadání matice po prvcích ze souboru genenerováním pomocí zabudovaných funkcí vytváˇrení matic vlastními funkcemi
ZAPG
První operace Zadání matice po prvcích: ˇrádky a = [1 2 3 4] nebo b = [1, 2, 3, 4] sloupce a = [1 2 3 4]’ nebo b = [1; 2; 3; 4] matice A = [1 2; 3 4] >>A = [16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1] A = 16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1 Po zadání je vytvoˇrena v prostˇredí MATLABu vytvoˇrena ˇ promenná A, mužeme ˚ ji používat. >>sum(A) ans = 34 34 34 34 ˇ Pokud není urˇcena promenná, kam se má uložit výsledek, ˇ použije se promenná ans ZAPG
Operace s maticemi MATLAB
C Transponování matice: for(i=0; i
Transponování matice: operace ’
B = A’
Sˇcítání prvku˚ – ve sloupcích operace sum
sl = sum(A);
Sˇcítání prvku˚ – v ˇrádcích sr= sum(A’)’ dostaneme vektor sloupec
ZAPG
Operace s maticemi
C Sˇcítání prvku˚ – na hlavní diagonále sd = 0; for(i=0; i
MATLAB Sˇcítání prvku˚ – na hlavní diagonále operace diag, sum
sd = sum(diag(A)) Sˇcítání prvku˚ – na vedl. diagonále operace fliplr, diag, sum
sv = sum(diag(fliplr(A)));
ZAPG
MATLAB – indexy Indexy prvku˚ matic: Prvek v i–tém ˇrádku, j–tém sloupci: A(i,j) ˇ hodnotu jednoho prvku A(4,2) = 15 ... zmení Souˇcet prvku˚ ve 4. sloupci lze zapsat: A(1,4)+A(2,4)+A(3,4)+A(4,4) Pokus manipulovat s prvkem "mimo matici" t=A(4,5) vyvolá chybové hlášení: ??? Index exceeds matrix dimension ALE >>X = A; >>X (4,5) = 17 X= 16 3 2 13 0 5 10 11 8 0 9 6 7 12 0 4 15 14 1 17 ZAPG
MATLAB – operátor : >>1:10 1 2 3 4 5 6 7 8 >>100:-7:50 100 93 86 79 72 >>0:pi/4:pi 0 0.7854 1.5708 A(1:k,j) sum(A(1:4, 4)) sum(A(:,end)) sum(1:16)/4 B=A(:,[1 3 2 4])
9 10 65 58 51 2.3562 3.1416 prvních k prvku˚ sloupce j souˇcet prvku˚ 4. sloupce souˇcet prvku˚ posledního sloupce ˇ souˇcet cˇ ísel 1..16 delený 4 pro každý ˇrádek A se do B se uloží prvky v zadaném poˇradí
spojení matic: C=[A B], C=[A;B] ˇ ˇrádku˚ a sloupcu: odstranení ˚ A(i,:)=[ ] , A(:,j)=[ ]
ZAPG
MATLAB – Výrazy ˇ promenné cˇ ísla operátory funkce ˇ Promenné: ˇ není nutné deklarovat typ, urˇcovat rozmer ˇ ˇ pˇri prvním použití jména se vytvoˇrí promenná a je jí pˇridelena ˇ pamet’ ˇ ˇ ena ˇ pokud už promenná existuje, je zmen hodnota, pˇrípadneˇ ˇ rozmer jména: písmena, cˇ íslice, _, záleží na velikosti písmen Operátory: +, -, *, / \ ˆ, ’, ( ) ZAPG
ˇ Císla
Reálná cˇ ísla (double precission) (8 bytu) ˚ zpravidla 16 znaku˚ – mantisa, ±308 – exponent Inf = ∞ NaN (Not a Number) – pˇri 0/0, ∞/∞, ∞ − ∞, apod. eps = 2.22 · 10−16 pi = π = 3.1415926 Komplexní cˇ ísla – 16 bytu˚ i, j – imaginární jednotky realmin, realmax
ZAPG
Pˇríklady
a = 2 a = 2.0 z = 1 + 2i z = 1 + 2*i real(z), imag(z) abs(z), conj(z) z = r * exp(i * phi) huge = exp(log(realmax)) toobig = pi*huge
huge= 1.7977e+308 toobig = Inf
ZAPG
Formát výstupu (zobrazení cˇ ísel)
format format short format long format short e format long e format rat
implicitní, totéž jako short; 5 znaku˚ za desetinnou teˇckou; 15 znaku˚ za desetinnou teˇckou; pohyblivá desetinná teˇcka, 5 znaku˚ za desetinnou teˇckou; pohyblivá desetinná teˇcka, 15 znaku˚ za desetinnou teˇckou; nahrazení cˇ ísla racionálním zlomkem
ZAPG
MATLAB – Generování matic Jednoduché funkce pro generování matic zeros(m,n) ones(m,n) eye(m,n) rand(m,n) Operace "maticové" A+B, A-B, A * B, A / B, A \ B, "po prvcích A.*B, A./B, A.ˆB, elementární funkce log10(A) kombinace B = A -8.5; B(1:2,2:3)=0 Funkce size(A), length(a) det(A), inv(A), rank(A), eig(A) ZAPG
ˇ ezce ˇ Ret znaku˚
a = ’Matrix’; b = ’Laboratory’; c = [a(1:3) b(1:3)]
ZAPG
Grafika - pˇríkaz plot
x = 0:pi/100:2*pi; y = sin(x); plot(x,y) xlabel(’x = 0:2pi’) ylabel(’Sine of x’) title(’Plot of the Sine Function’, ... ’FontSize’,12)
ZAPG
Grafika Pˇríkaz figure vytvoˇrí nové grafické okno, které se stane aktivním. Pˇríkaz figure(n): grafické okno n se stane aktivním. ˇ Nekolik kˇrivek v jednom okneˇ y2 = sin(x-.25); y3 = sin(x-.5); plot(x,y,x,y2,x,y3) legend(’sin(x)’,’sin(x-.25)’, ’sin(x-.5)’) ˇ Typ a barva car plot(x,y,’color_style_marker’) ˇ color_style_marker – ˇretezec 1–4 znaku, ˚ urˇcují styl a barvu barva: c, m, y, r, g, b, w, k styl cˇ áry: -, –, :, -. typ markeru: +, o, *, x, s, d, ˆ, v, >, <, p, h Více o grafice bude na 11. pˇrednášce ZAPG