MATLAB
Annalisa Pascarella pascarel@dima.unige.it
…di cosa parliamo oggi… Piccola introduzione a Matlab Matrici definizione operazioni Sistemi lineari Ax=b A quadrata singolare e non A m x n Esercizi
MATLAB MATrix LABoratory Linguaggio di programmazione interpretato legge un comando per volta eseguendolo immediatamente Per avviarlo -> icona sul desktop MATLAB puo’ essere definito come un un ambiente di lavoro particolarmente adatto ad applicazioni numeriche E’ un programma studiato per operare su matrici, infatti MATLAB sta x MATRIX LABORATORY E’ un linguaggio di programmazione interpretato, in quanto legge un comando x volta e lo esegue immediatamente command window
MATLAB come calcolatrice-1 4 + 7 invio x = 9 -> invio è possibile definire variabili e operare su esse
MATLAB come calcolatrice-2 Operatori aritmetici +, -, *, /, ^, Caratteri speciali ;, %, : Variabili predefinite i, pi, NaN, Inf 2/0 -> Inf 0/0 -> NaN (Not-a-Number) Funzioni elementari sin, cos, log, exp Comandi speciali help, clear help sqrt
Lavorare con MATLAB In MATLAB tutte le variabili sono trattate come matrici scalari -> matrici 1 x 1 vettori riga -> matrici 1 x n v = (v1,…, vn) vettori colonna -> matrici n x 1 v = (v1,…, vn)T matrici -> matrici m x n
Vettori Per definire un vettore riga a = [1 2 3 4 5] Per definire un vettore colonna a = [1 2 3 4 5] o a = [1, 2, 3, 4, 5] per separare le righe trasposto a = [1; 2; 3; 4; 5] o a = [1 2 3 4 5] ’
Matrici - 1 Per definire una matrice A = [3 0; 1 2] A = [3 0 1 2] B = [3 0 3; 1 2 0] Il punto e virgola dopo il comando fa si che il risultato nn venga visualizzato size(B) -> dimensioni della matrice per memorizzare le dimensioni -> [r c] = size(B)
Matrici - 2 a1 = [3 0] a2 = [1 2] A = [a1;a2] b1 = [3;1] b2 = [0; 2] B = [b1, b2, b3]
Il comando : Importante per la manipolazione delle matrici Esempi generazione di vettori che siano delle progressione aritmetiche di passo costante a = [1:10] o a = 1:10 b = 1: .2 : 4 c = 3:0 -> non produce niente!!!! c = 3: -1: 1 mediante : si possono estrarre righe e colonne Un comando importante in Matlab è :. Tale simbolo è importante x la manipolazione delle matrici. L’incremento di default è 1 ma si possono assegnare passi diversi. Per avere dei passi negativi è necessario assegnare il passo
Esercizio1 Costruire il vettore Costruire la matrice A avente come colonne i 3 vettori v1 = [1,2,…,9] v2 = [2,4,…,18] v3 = [9,8,…,1]
Individuare\modificare elementi per selezionare un elemento per modificare l’elemento per visualizzare B B(2,3) B(2,3) = 1; B
Estrarre sottomatrici estrarre la riga R2 B(2,:) estrarre la colonna C2 B(:,2) sottomatrice 2 x 2 B(:,2:3) B(:,[1 3])
Matrici diagonali Diagonale di A d = diag(A) a = [ 1 2 ]; diag(a) costruisce anche matrici diagonali la funzionale diag applicata ad una matrix restituisce la matrix colonna contenente la diag di A diag(vettore) restituisce una matrix diagonale avente sulla diagonale il vettore diag(d) a = [ 1 2 ]; diag(a)
Matrici triangolari matrice triangolare inferiore -> tril(A) triu(B) matrice triangolare superiore ->
Identità-zero-uno identità di ordine n -> eye(n) eye(3) matrice nulla m x n -> zeros(m,n) zeros(2,3) matrice m x n di 1 -> ones(m,n) ones(2,3)
Matrici a blocchi I modo A(3,3) = 3 II modo C = [2 3; 1 1] III modo D = [A C] C(3:4,3:4) = eye(2)
Operazioni - 1 clear A=[1 2;3 4]; B=[1 0;-1 1]; C=[0 3 1;1 2 4]; D=[3 4 -1;5 2 3;0 1 -1];
Operazioni - somma A+B Somma / Differenza A-B A+C Trasposta A’ ??? Error using = => + Matrix dimensions must agree. A+C Trasposta A’
Operazioni - prodotto Prodotto A*B #CA = #RB Elemento per elemento size(A) = size(B) Prodotto per uno scalare A*k
Determinante det(B) 1 Determinante det(D) 2 Rango rank(D) inv(B) Determinante Rango rank(D) 2 inv(B) inv(D) B^(-1) Inversa ?
Esercizio 2 Costruire le matrici A e B Estrarre da A 2 sottomatrici: una costituita dalle ultime 3 colonne una costituita dalla I e III riga e dalle colonne II e IV
Sistemi Lineari Teorema di Rouchè-Capelli matrice dei coefficienti matrice dei termine noti Teorema di Rouchè-Capelli rango(A) = rango(A|b) <=> il sistema è risolubile rango(A) = rango(A|b) = n => unica soluzione rango(A) = rango(A|b) = p < n => ∞n-p soluzioni …un po’ di teoria…
Risoluzione di sistemi Lineari Ax = b Sostituzione Cramer SE A è quadrata E invertibile Algoritmo di Gauss operazioni elementari sulle righe pivotizzazione (parziale o totale) -> importante quando si implementa l’algoritmo al calcolatore Algoritmo di Gauss: mediante trasformazioni elementari sulle righe si trasforma il sistema di partenza in un sistema equivalente, dove la matrix dei coefficienti è triangolare superiore. Da un punto di vista teorico nn ha importanza la scelta del pivot, tale scelta è importante quando implementiamo l’algoritmo. (in analisi numerica si deve sempre tener presente che si lavora con una certa approssimazione e che si ha il problema della propagazione degli errori)
Sistemi Lineari non singolari il simbolo nn è quello della divisione!! x = A\b x = inv(A)*b Matlab è in grado di determinare la soluzione mediante l’algoritmo gaussiano facendo uso della pivottzzazione parziale, scegliendo per ogni colonna il pivot con valore assoluto + grande (si potrebbe pensare di risolvere un sistema quadrato nn singolare implementando il metodo di Cramer, ma computazionalmente si avrebbe un costo di n! => troppe operazioni!) la soluzione è calcolata mediante l’algoritmo Gaussiano con pivot parziale tempo richiesto minore del calcolo dell’inversa
ci assicuriamo che il det di A sia diverso da zero Esempio A = [1 1 1; 1 1 -1; 1 -1 1]; b = [3 2 2]’; det(A) x = A\b Comandi da eseguire ci assicuriamo che il det di A sia diverso da zero
A quadrata singolare A = [3 4 -1; 5 2 3; 0 1 -1]; b = [14 14 2]’; rank(A) rank([A b]) per vedere se il sistema è risolubile confrontiamo il rango di A con quello della matrice completa (A|b) questo sistema è risolubile in quanto rango(A)=rango(A|b)=2 => ∞ soluzioni
Il comando rref Per studiare e risolvere un sistema qualunque si deve ridurre la matrice completa (A|b) Si usa il comando rref(reduced row echelon form ) rref([A b]) rref calcola una matrice R ridotta ed quivalente per righe alla matrice A. La matrice ridotta è determinata mediante la pivotizzazione parziale e l’algoritmo di Gauss-Jordan: in ogni colonna si cerca il pivot con val assoluto + grande, la riga è portata al primo posto utile e viene SUBITO divisa x il pivot. Tutta la colonna del pivot è annullata con op elementari anche sopra la riga del pivot rrefmovie consente di visualizzare passo dopo passo l’algoritmo rrefmovie([A b])
A non quadrata A = [1 0 1; 0 -1 0]; b = [0 1]’; rank(A) rank([A b]) rref([A b]) questo sistema è risolubile in quanto rango(A)=rango(A|b)=2 => ∞ soluzioni
…riassumendo… A quadrata NON singolare A quadrata singolare o A m x n Matlab ci fornisce la soluzione A quadrata singolare o A m x n rref ci restituisce la matrix ridotta le soluzioni le dobbiamo scrivere noi a partire dalla matrix ridotta ottenuta x = A\b rank(A) rank([A b]) rref([A b])
Esercizi Studiare e risolvere, eventualmente, i seguenti sistemi lineari: Lanciare per l’ultima matrice il comando rrefmovie([A b])
Vettori l.i. sono linearmenti indipendenti Fissata una base nello s.v. V possiamo associare in modo unico ad un vettore v un elemento di Rn => per vedere se i vettori sono l.i. o no si puo’ operare direttamente in Rn Si scrivono i vettori in componenti e si forma la matrix A che ha come colonne le componenti dei vettori e si calcola il rango della matrix. I vettori corrispondenti alle colonne dei pivot sono quelli l.i.
Esempio - 1 v1 = [1 0 2]’; v2 = [2 1 1]’; v3 = [1 2 0]’; il rango è 3 => i vettori sono l.i. e quindi formano una base per R3 v1 = [1 0 2]’; v2 = [2 1 1]’; v3 = [1 2 0]’; A = [v1 v2 v3] rank(A)
il rango è 3 => i vettori sono l.d. Esempio - 2 v1 = [1 2 0 1]’; v2 = [2 2 1 1]’; v3 = [1 0 1 0]’; v4 = [0 2 0 2]’; A = [v1 v2 v3 v4] rank(A) il rango è 3 => i vettori sono l.d.
Esempio - 2 Per trovare una c.l. nulla a coefficienti nn tutti nulli t.c. troviamo una soluzione nn nulla del sistema omogeneo Ak = 0 rref(A)
Basi Dopo aver verificato che i vettori v1, v2, v3 sono una base di R3 esprimere v come c.l. dei vi v1 = [1 1 0’]’; v2 = [0 1 1]’; v3 = [1 0 1]’; v = [1 1 1]’; A = [v1 v2 v3] rank(A) il rango è 3 => i vettori sono l.i. i coefficienti lineari della combinazione si trovano: k=A\v
…ricapitolando… sono l.i. rank(A)=m A (n>=m) W = span(v1,v2,…,vm) dim W = rank(A) per trovare una base del s.s. BW si considerano i vettori l.i. che costituiscono la matrix A per esprimere un vettore w come c.l. dei vettori della base, si forma la matrix B avente per colonne le componenti di tali vettori e si risolve il sistema Bk=w se i vettori sono l.d. => i coefficienti di una loro combinazione lineare non nulla si trovano risolvendo il sistema Ak=0 A è la matrix avente x colonne le componenti dei vettori
Esercizio