Základy algoritmizace a programování Práce s maticemi Přednáška 9 23. listopadu 2009
Pole: vektory a matice Vektor (jednorozměrné pole) deklarace statická int v1[5]; dynamická int * v2; + přidělení paměti: v2 = (int *) malloc(5*sizeof (int)); Matice (dvourozměrné pole) deklarace statická int m1[2][3]; dynamická int * * m2; + přidělení paměti: m2 = (int **) malloc(2*sizeof(int *)); for(i=0; i< 2; i++) m2[i]= (int *) malloc(3*sizeof(int));
Operace NELZE s celým polem najednou! Pomocí cyklů s každý prvkem Vektor jeden cyklus prvek v[i] načtení 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čtení 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]);
Úvod do MATLABu Komponenty MATLABu Jazyk Prostředí Grafika Knihovny funkcí Interface (C, Fortran)
Balíčky 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
Spuštění MATLABU příkazový řádek : matlab
Kde získat informace příkaz help příkaz lookfor informační okno informační navigátor stránka MathWorks : www.mathworks.com/products/matlab české stránky : www.humusoft.cz/produkty/matlab
Informace pří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...
Informace příkaz lookfor >> lookfor inverse INVHILB Inverse Hilbert matrix. ACOS Inverse cosine. ACOSH Inverse hyperbolic cosine.... INV Matrix inverse.... příkaz >> lookfor -all inverse hledá slovo inverse v celém helpu.
Informace informační okno Je možné spustit příkazem >>helpwin nebo z menu Poskytuje tytéž informace jako help, ale přehledněji
Informace informační navigátor >>helpdesk Spustí "průzkumník" informačních souborů, které jsou dostupné ve formátu html. Pokud víme, co hledáme, lze použít příkaz >>doc <jméno funkce nebo příkazu>
Matice hlavní datový typ MATLABu skalární proměnná matice rozměru (1 1) vektor matice rozměru (1 n) nebo (m 1) matice (m n) Zadání matice po prvcích ze souboru genenerováním pomocí zabudovaných funkcí vytváření matic vlastními funkcemi
První operace Zadání matice po prvcích: řá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řena v prostředí MATLABu vytvořena proměnná A, můžeme ji používat. >>sum(a) ans = 34 34 34 34 Pokud není určena proměnná, kam se má uložit výsledek, použije se proměnná ans
Operace s maticemi C Transponování matice: for(i=0; i<n; i++) for(j=0; j<m; j++) B[i][j] = A[j][i]; Sčítání prvků ve sloupcích for(i=0; i<n; i++) { sl[i] = 0; for(j=0;j<m;j++) sl[i]=sl[i]+a[i][j];} Sčítání prvků v řádcích for(j=0; j<m; j++) { sr[j] = 0; for(i=0;i<n;i++) sr[j]=sr[j]+a[i][j];} MATLAB Transponování matice: operace B = A Sčítání prvků ve sloupcích operace sum sl = sum(a); Sčítání prvků v řádcích sr= sum(a ) dostaneme vektor sloupec
Operace s maticemi C Sčítání prvků na hlavní diagonále sd = 0; for(i=0; i<n; i++) { sd=sd+a[i][i];} Sčítání prvků na vedl. diagonále sv=0; { for(i=0;i<n;i++) sv=sr+a[n-i-1][n-i-1];} MATLAB Sčítání prvků na hlavní diagonále operace diag, sum sd = sum(diag(a)) Sčítání prvků na vedl. diagonále operace fliplr, diag, sum sv = sum(diag(fliplr(a)));
MATLAB indexy Indexy prvků matic: Prvek v i tém řádku, j tém sloupci: A(i,j) A(4,2) = 15... změní hodnotu jednoho prvku Součet prvků 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
MATLAB operátor : >>1:10 1 2 3 4 5 6 7 8 9 10 >>100:-7:50 100 93 86 79 72 65 58 51 >>0:pi/4:pi 0 0.7854 1.5708 2.3562 3.1416 A(1:k,j) prvních k prvků sloupce j sum(a(1:4, 4)) součet prvků 4. sloupce sum(a(:,end)) součet prvků posledního sloupce sum(1:16)/4 součet čísel 1..16 dělený 4 B=A(:,[1 3 2 4]) pro každý řádek A se do B se uloží prvky v zadaném pořadí spojení matic: C=[A B], C=[A;B] odstranění řádků a sloupců: A(i,:)=[ ], A(:,j)=[ ]
MATLAB Výrazy proměnné čísla operátory funkce Proměnné: není nutné deklarovat typ, určovat rozměr při prvním použití jména se vytvoří proměnná a je jí přidělena pamět pokud už proměnná existuje, je změněna hodnota, případně rozměr jména: písmena, číslice, _, záleží na velikosti písmen Operátory: +, -, *, / \ ˆ,, ( )
Čísla Reálná čísla (double precission) (8 bytů) zpravidla 16 znaků mantisa, ±308 exponent Inf = NaN (Not a Number) při 0/0, /,, apod. eps = 2.22 10 16 pi = π = 3.1415926 Komplexní čísla 16 bytů i, j imaginární jednotky realmin, realmax
Pří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
Formát výstupu (zobrazení čísel) format implicitní, totéž jako short; format short 5 znaků za desetinnou tečkou; format long 15 znaků za desetinnou tečkou; format short e pohyblivá desetinná tečka, 5 znaků za desetinnou tečkou; format long e pohyblivá desetinná tečka, 15 znaků za desetinnou tečkou; format rat nahrazení čísla racionálním zlomkem
MATLAB Generování matic Jednoduché funkce pro generování matic Operace Funkce zeros(m,n) ones(m,n) eye(m,n) rand(m,n) "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 size(a), length(a) det(a), inv(a), rank(a), eig(a)
Řetězce znaků a = Matrix ; b = Laboratory ; c = [a(1:3) b(1:3)]
Grafika - pří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)
Grafika Příkaz figure vytvoří nové grafické okno, které se stane aktivním. Příkaz figure(n): grafické okno n se stane aktivním. Několik křivek v jednom okně 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 čar plot(x,y, color_style_marker ) color_style_marker řetězec 1 4 znaků, určují styl a barvu barva: c, m, y, r, g, b, w, k styl čáry: -,, :, -. typ markeru: +, o, *, x, s, d, ˆ, v, >, <, p, h Více o grafice bude na 11. přednášce