400 likes | 627 Views
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
E N D
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 command window
4 + 7 invio x = 9 -> invio MATLAB come calcolatrice-1 • è 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
per separare le righe trasposto Vettori • Per definire un vettore riga • Per definire un vettore colonna a = [1 2 3 4 5] o a = [1, 2, 3, 4, 5] a = [1; 2; 3; 4; 5] o a = [1 2 3 4 5] ’
A = [3 0; 1 2] A = [3 0 1 2] B = [3 0 3; 1 2 0] Matrici - 1 • Per definire una matrice • size(B) -> dimensioni della matrice • per memorizzare le dimensioni -> [r c] = size(B)
a1 = [3 0] a2 = [1 2] A = [a1;a2] Matrici - 2 b1 = [3;1] b2 = [0; 2] b3 = [3; 0] 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
Esercizio1 • Costruire il vettore • v = [1,2,…,19,20,20,19,…,2,1] • Costruire la matrice A avente come colonne i 3 vettori • v1 = [1,2,…,9] • v2 = [2,4,…,18] • v3 = [9,8,…,1]
B(2,3) B(2,3) = 1; B Individuare\modificare elementi per selezionare un elemento per modificare l’elemento per visualizzare B
B(:,[1 3]) B(:,2:3) B(2,:) B(:,2) Estrarre sottomatrici estrarre la riga R2 estrarre la colonna C2 sottomatrice 2 x 2
Diagonale di A d = diag(A) diag(d) Matrici diagonali costruisce anche matrici diagonali a = [ 1 2 ]; diag(a)
triu(B) tril(A) matrice triangolare inferiore -> Matrici triangolari matrice triangolare superiore ->
identità di ordine n -> eye(n) eye(3) zeros(m,n) zeros(2,3) ones(m,n) ones(2,3) matrice nulla m x n -> Identità-zero-uno matrice m x n di 1 ->
A(3,3) = 3 C = [2 3; 1 1] D = [A C] Matrici a blocchi • I modo • II modo • III modo 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];
??? Error using = => + Matrix dimensions must agree. Operazioni - somma A+B Somma / Differenza A-B A+C Trasposta A’
Operazioni - prodotto Prodotto #CA = #RB A*B Elemento per elemento size(A) = size(B) A.*B Prodotto per uno scalare A*k
Determinante det(B) det(D) 1 0 Determinante 2 rank(D) Rango 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
matrice dei coefficienti matrice dei termine noti Sistemi Lineari 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
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
il simbolo nn è quello della divisione!! Sistemi Lineari non singolari • la soluzione è calcolata mediante l’algoritmo Gaussiano con pivot parziale • tempo richiesto minore del calcolo dell’inversa x = A\b x = inv(A)*b
Esempio A = [1 1 1; 1 1 -1; 1 -1 1]; b = [3 2 2]’; det(A) x = A\b 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 comandorref(reduced row echelon form ) rref([A b]) 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 • 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
il rango è 3 => i vettori sono l.i. e quindi formano una base per R3 Esempio - 1 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)
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)
il rango è 3 => i vettori sono l.i. i coefficienti lineari della combinazione si trovano: k=A\v Basi • Dopo aver verificato che i vettori v1, v2, v3 sono una base di R3esprimere 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)
…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. BWsi 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