MATLAB - Programmazione - 2 Antonino Polimeno antonino.polimeno@unipd.it
Manipolazione di matrici - 1 Input di matrici Definizione manuale: A = [1, 2, 3; 7, 8, 9] Generazione da funzioni Lettura da file (e.g. load ) Operazioni su matrici Addizione (+), sottrazione (-), moltiplicazione (*) Divisione sinistra: x = A \ b è la soluzione di A*x = b Divisione destra: x = b / A è la soluzione di x*a = b Potenza (^) Aggiunta ( ) Trasposta (. ) Le operazioni *, ^, \, / si riferiscono agli elementi della matrice se precedute dal punto (.)
Manipolazione di matrici - 2 Operazioni sugli elementi di matrici Operazioni Forma algebrica MATLAB Addizione a + b a + b Sottrazione a b a b Moltiplicazione a x b a.* b Divisione a b a./ b Esponente a b a.^ b >> x = [ 1 2 3 ]; >> y = [ 4 5 6 ]; >> z = x.* y z = 4 10 18 Esempio: gli elementi di z sono i prodotti degli elementi di x e y
Manipolazione di matrici - 3 Elemento i,j: A(i, j). Vettore colonna formato dagli elementi 1,2,3 della colonna 2 della matrice: A(1:3, 2) Matrice formata dalle righe 1,2,3 e dalle colonne 2,3,4: A([1:3], [2:4]) Matrici speciali: Matrice di zeri: zeros(1,3) Matrice di uno: ones(2,4) Matrice di numeri casuali con distribuzione uniforme: rand(3,5) Matrice di numeri casuali con distribuzione normale: randn(2,5) A=magic(3): quadrato magico 3x3
Manipolazione di matrici - 4 zeros(n) zeros(m,n) ones(n) ones(m,n) size (A) length(a) X = [A 1, A 2 ; B 1, B 2 ; ] n x n matrice di zeri m x n matrice di zeri n x n matrice di uno m x n matrice di uno per una matrice m x n matrix A, è il vettore riga 1x2 che contiene il numero di righe e colonne per una matrice m x n matrix A, è il numero massimo tra m e n concatenazione di matrici (se compatibili)
Manipolazione di matrici - 5 Aggiunta B = A Identità Somme/sottrazioni Moltiplicazione scalare Moltiplicazione Inversa Potenza Determinante eye(n) matrice identità n x n eye(m,n) matrice m x n matrix con 1 nella diagonale e 0 negli altri elementi C = A + B C = A B B = A. C = A*B B = inv(a), con A n x n N.B. rank (A) dà il rango di A B = A.^2 matrice di elementi quadrati di A C = A * A matrice quadrata di A, con A n x n det (A),, con A n x n A, B, C matrici generiche, e m, n, scalari
Sistemi lineari - 1 Sistema di 3 equazioni lineari in tre incognite: 3 x 2 x x 10 1 2 3 x 3 x 2 x 5 1 2 3 x x x 1 1 2 3 3 2 1 x1 10 A 1 3 2 x x b 5 Ax b 2 1 1 1 x 3 1
Sistemi lineari - 2 Soluzione con calcolo dell inversa Ax = b A -1 Ax = A -1 b x = A -1 b MATLAB: >> A = [ 3 2-1; -1 3 2; 1-1 -1]; >> b = [ 10; 5; -1]; >> x = inv(a)*b x = -2.0000 5.0000-6.0000 Soluzione diretta Ax = b MATLAB: >> A = [ 3 2-1; -1 3 2; 1-1 -1]; >> b = [ 10; 5; -1]; >> x = A\b x = -2.0000 5.0000-6.0000 Answer: x 1 = -2, x 2 = 5, x 3 = -6
Polinomi - 1 I polinomi sono rappresentati come vettori dei coefficienti in MATLAB. Esempio: A(s) = s 3 + 3s 2 + 3s + 1 è rappresentato come il vettore [1 3 3 1] Se s è uno scalare, possiamo generare uno scalare >> A = s^3 + 3*s^2 + 3*s + 1; Se s è una matrice, generiamo una una matrice in cui ogni elemento è un polinomio nel corrispondente elemento di s >> A = s.^3 + 3*s.^2 + 3*s. + 1; La funzione polyval(a,s) valuta un polinomio con coefficienti nel vettore a per i valori di s >> s = linspace (-5, 5, 100); >> coeff = [ 1 3 3 1]; >> A = polyval (coeff, s); >> plot (s, A), >> xlabel ('s') >> ylabel ('A(s)')
Polinomi - 2 Operazione MATLAB Somma c = a + b somma dei polinomi Prodotto per uno scalare Prodotto di polinomi Divisione di polinomi b = 3*a polinomio A per 3 c = conv(a,b) [q,r] = deconv(a,b) coefficienti del polinomio prodotto di A e B q è il vettore dei coefficienti del polinomio quoziente, r è il vettore dei coefficienti del polinomio resto Derivata polyder(a) coefficienti della derivata polyder(a, b) coefficienti della derivata del prodotto. [n,d]=polyder(b,a) coefficienti della derivata del rapporto Radici roots(a) radici del polinomio. poly(r) polinomio che ha per radici gli elementi del vettore r
Script - 1 Script: istruzioni raggruppate in un file Esempio script magicrank.m che plotta i ranghi dei primi 20 quadrati magici r = zeros(1,20); for n = 1:20 r(n) = rank(magic(n)); end bar(r) Il file può essere richiamato da Matlab semplicemente come >> magirank
Script - 2
Script - 3 Gli script sono file ASCII (testo) con estensione.m, e.g. filename.m Possiama definire delle funzioni, che possono essere richiamate da Matlab con degli argomenti Il nome del file deve coincidere con il nome della funzione Esempio definizione di yplusx.m function yplusx(y,x) z = y + x; end esecuzione di yplusx >> yplus(4,5) ans = 9
Controlli If Switch For loops While loops Continue Break If A > B greater elseif A < B less elseif A = = B equal else error( Unexpected situation ) end for i = 1:m for j = 1:n H(i,j) =1/(i+j) end end
Grafica - 1 Plot del polinomio y = 2x 2 + 7x + 9 (lin/lin, log/lin,lin/log, log/log) % Generate the polynomial: x = linspace (0, 10, 100); y = 2*x.^2 + 7*x + 9; % plotting the polynomial: figure (1); subplot (2,2,1), plot (x,y); title ('Polynomial, linear/linear scale'); ylabel ('y'), grid; subplot (2,2,2), semilogx (x,y); title ('Polynomial, log/linear scale'); ylabel ('y'), grid; subplot (2,2,3), semilogy (x,y); title ('Polynomial, linear/log scale'); xlabel('x'), ylabel ('y'), grid; subplot (2,2,4), loglog (x,y); title ('Polynomial, log/log scale'); xlabel('x'), ylabel ('y'), grid; Per aggiungere grafici ad un grafico esistente: hold on plot multipli: subplot
Grafica - 2
Grafica - 3 grid on grid off grid title ( text ) xlabel ( text ) ylabel ( text ) text (x,y, text ) Aggiunge una griglia di inee tratteggiate nei tick marks Rimuove la griglia Cambia lo stato della grliglia ( da off a on, oppure da on a off) Titolo Etichetta ascisse Etichetta ordinate Aggiunge un testo nella posizione (x,y) dove (x,y) sono definiti nelle unità di misura del grafico
Grafica - 4 Colore del marker o della linea Marker Stile linea Simbolo y m c r g b Colore giallo magenta cyan rosso verde blu Symbol Marker. o x + + * Simbolo Stile intera : punteggiata. linea-punto tratteggiata w bianco s k nero d v ^ h esagono