Introduzione allo Scilab Parte 3: vettori e matrici. Felice Iavernaro Dipartimento di Matematica Università di Bari http://dm.uniba.it/∼iavernaro [email protected] 19 ottobre 2007 Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 1 / 45 Vettori (1/2) Un vettore è un insieme ordinato di numeri, della forma: x = [x1 , x2 , . . . , xn ] (vettore riga), oppure x1 x2 .. (vettore colonna) . xn Ad esempio, dal prompt di Scilab, digitando: -->x=[2 1 0 -3] oppure -->x=[2, 1, 0, -3] si assegna alla variabile x il vettore di 4 elementi: x = [2, 1, 0, −3]. Invece digitando -->x=[2; 1; 0; -3] oppure -->x=[2 1 0 -3]’ si ottiene l’analogo vettore colonna. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 3 / 45 Vettori (2/2) Il numero di elementi di un vettore si chiama lunghezza del vettore: in Scilab si ottiene mediante la function length: -->length(x) ans = 4. Per accedere, ad esempio, al secondo elemento del vettore x, scriveremo: -->x(2) ans = 1. Cosa succede se scriviamo x(5)? Cosa succede se scriviamo x(5) = 1? Cosa succede se scriviamo x(8) = −4? Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 5 / 45 Esercizi Definiamo il vettore x = [1.5, −0.2, −3.1, 2.6] Se vogliamo calcolare la somma degli elementi del vettore x, ed assegnare il risultato alla variabile s potremo scrivere: -->x=[1.5, -0.2, -3.1,2.6]; -->s=0;for i=1:4,s=s+x(i);end,disp(s) 0.8 ESERCIZIO: il libretto di uno studente riporta i seguenti voti: 26, 24, 28, 30, 27, 18, 26, 30, 29. Calcolarne la media aritmetica e la media geometrica. ESERCIZIO: Scrivere una function Scilab che calcola la varianza degli elementi di un vettore x. Si ricordi che: n var(x) = 1X (xi − x̄)2 , n dove x̄ è il valor medio degli elementi di x i=1 Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 7 / 45 Esercizi ESERCIZIO: Scrivere una function Scilab che ha in input due vettori reali x ed y di uguale lunghezza n ed in output il loro prodotto scalare xT y = n X xi yi . i=1 ESERCIZIO: Scrivere una function Scilab che ha in input un vettore x ed in output il minimo elemento del vettore e l’indice della componente corrispondente. ESERCIZIO: Scrivere una function Scilab che ha in input un vettore x ed in output il massimo elemento del vettore e l’indice della componente corrispondente. ESERCIZIO: Scrivere una function Scilab che ha in input un vettore x ed in output ed in output il vettore che si ottiene da x ordinando le sue componenti in senso crescente. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 9 / 45 Definizione di matrice reale Definizione Dati due interi positivi m ed n, una matrice A reale m × n è un array bidimensionale avente m righe ed n colonne cosı̀ definito a11 a12 · · · · · · a1n a21 a22 · · · · · · a2n A= . .. .. .. . . am1 am2 · · · ··· amn Più formalmente possiamo dire che una matrice è un’applicazione A : {1, 2, . . . , m} × {1, 2, . . . , n} −→ R tale che A(i, j) = aij ∈ R. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 11 / 45 Notazioni Una matrice verrà solitamente denotata con le lettere maiuscole dell’alfabeto, mentre gli elementi di una matrice con le lettere minuscole; ad esempio la scrittura A = {aij } i=1,...m , ovvero j=1,...n A = {aij }, i = 1, . . . m, j = 1, . . . n, denoterà una matrice ad m righe ed n colonne il cui generico elemento è aij . Denotiamo con Rm×n l’insieme delle matrici con m righe ed n colonne. Esempio (A ∈ R3×4 ) √ 2 0 −1 3 A = π log(3) −1/3 1 , 2/3 0 sin(π/7) 4/3 è una matrice 3 × 4, ovvero a 3 righe e 4 colonne. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 13 / 45 Definire una matrice in Scilab In Scilab, una matrice può essere definita elencando, tra parentesi quadrate, le sue righe. Gli elementi su una stessa riga vanno separati da una virgola o da uno spazio, mentre per passare da una riga alla successiva si usa il punto e virgola. Ad esempio: -->A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1] A = 16. 5. 9. 4. 3. 10. 6. 15. 2. 11. 7. 14. 13. 8. 12. 1. In questo esempio A è una matrice quadrata di dimensione 4. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 15 / 45 Matrici particolari (1/4) Se m = n, (num. di righe= num. di colonne), la matrice è detta quadrata di dimensione n (se m 6= n, la matrice è detta rettangolare); se m = n = 1, la matrice si riduce ad un unico elemento e dunque coincide con uno scalare: A = (a11 ); se m = 1, la matrice possiede un’unica riga, pertanto si riduce ad un vettore riga: A = a11 a12 · · · a1n se n = 1, la matrice possiede un’unica colonna, pertanto si riduce ad un vettore colonna: a11 a21 T A = . ≡ a11 a21 · · · am1 . . . am1 Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 17 / 45 Matrici particolari (2/4) La matrice m × n i cui elementi sono tutti nulli si chiama matrice nulla e si denota con 0m×n o più semplicemente con 0. Per ottenere una matrice nulla in Scilab, anziché elencare i suoi elementi, si può utilizzare la function predefinita zeros: -->zeros(2,3) ans = 0. 0. 0. 0. 0. 0. Se invece usiamo la function ones: -->ones(2,3) ans = 1. 1. 1. 1. Felice Iavernaro (Univ. Bari) 1. 1. Scilab: Vettori e matrici. 19/10/2007 19 / 45 Matrici particolari (3/4) Si chiama matrice identica, ogni matrice quadrata avente elementi diagonali uguali ad 1 ed elementi extra-diagonali nulli: 1 0 ··· ··· 0 0 1 ··· ··· 0 I = . . .. . . . . . 0 0 ··· ··· 1 Per ottenere una matrice identica in Scilab si usa la function predefinita eye: -->eye(4,4) ans = 1. 0. 0. 0. 0. 1. 0. 0. Felice Iavernaro (Univ. Bari) 0. 0. 1. 0. 0. 0. 0. 1. Scilab: Vettori e matrici. 19/10/2007 21 / 45 Matrici quadrate particolari (4/4) Una matrice quadrata A è detta: I I I diagonale se tutti i suoi elementi extra-diagonali sono nulli: aij = 0, ∀i, j = 1, . . . n, i 6= j; triangolare inferiore se tutti i suoi elementi al di sopra della diagonale principale sono nulli: aij = 0, ∀i < j; triangolare superiore se tutti i suoi elementi al di sotto della diagonale principale sono nulli: aij = 0, ∀i > j; Esempio: 1 0 0 1 0 0 1 1 0 D = 0 −2 0 , T = −1 −2 0 , S = 0 0 −2 . 0 0 3 2 −4 3 0 0 3 Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 23 / 45 Addizione tra matrici (1/2) Definizione Se A = {aij } e B = {bij } sono matrici m × n si definisce somma tra A e B la matrice A + B = {aij + bij } ∈ Rm×n Esempio 1 A = −1 2/3 2 3 1 0 1 2 2 4 0 1 , B = −1 −2 0 , A + B = −2 −2 1 . 1 −2 1/3 −4 3 1 −3 1 Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 25 / 45 Addizione tra matrici (2/2): Esempio Scilab -->A=[1 2 3;-1 0 1] A = 1. 2. - 1. 0. 3. 1. -->B=[1 0 1; -1 -2 0] B = 1. 0. - 1. - 2. 1. 0. -->C=A+B C = 2. 2. - 2. - 2. Felice Iavernaro (Univ. Bari) 4. 1. Scilab: Vettori e matrici. 19/10/2007 27 / 45 Moltiplicazione di uno scalare per una matrice (1/2) Definizione Se A = {aij } ∈ Rm×n e λ ∈ R, si definisce prodotto di λ per A la matrice λ · A = {λaij } ∈ Rm×n Esempio 1 2 3 1 , A = −1 0 2/3 1 −2 Felice Iavernaro (Univ. Bari) 1 4 6 1 . 2 · A = −2 0 4/3 2 −4 Scilab: Vettori e matrici. 19/10/2007 29 / 45 Moltiplicazione di uno scalare per una matrice (2/2): Esempio Scilab -->A=[1 2 3;-1 0 1] A = 1. 2. 3. - 1. 0. 1. -->lambda=2.5 lambda = 2.5 -->lambda*A ans = 2.5 5. - 2.5 0. Felice Iavernaro (Univ. Bari) 7.5 2.5 Scilab: Vettori e matrici. 19/10/2007 31 / 45 Trasposta di una matrice (1/2) Se A ∈ Rm×n , la trasposta di A, denotata con AT , è la matrice ottenuta da A scambiando le righe con le colonne (o viceversa), ovvero AT = {aji }, i = 1, . . . m, j = 1, . . . n. Pertanto AT ∈ Rn×m . Esempio A= Felice Iavernaro (Univ. Bari) 1 2 3 −1 0 1 1 −1 0 . =⇒ AT = 2 3 1 Scilab: Vettori e matrici. 19/10/2007 33 / 45 Trasposta di una matrice (1/2): Esempio Scilab In Scilab per ottenere il trasposto si usa l’apice: -->A=[1 2 3;-1 0 1] A = 1. - 1. 2. 0. 3. 1. -->B=A’ B = 1. 2. 3. - 1. 0. 1. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 35 / 45 Prodotto di matrici (righe per colonne) Ricordiamo che se a e b sono due vettori (colonna) di lunghezza n, il prodotto scalare di a e b denotato con aT b è cosı̀ definito: T a b≡ n X ak bk . k=1 Siano A ∈ Rm×p e B ∈ Rp×n . Si definisce prodotto (righe per colonne) tra A e B la matrice C = A · B ∈ Rm×n il cui elemento generico cij è il prodotto scalare tra la riga i-esima di A e la colonna j-esima di B: cij = aT i bj = p X aik bkj , i = 1, . . . m, j = 1, . . . , n. k=1 aT i → i-esima riga di A; Felice Iavernaro (Univ. Bari) bj → j-esima colonna di B. Scilab: Vettori e matrici. 19/10/2007 37 / 45 ESEMPIO Osservazione Il prodotto tra due matrici è possibile solo se il numero di colonne del primo fattore coincide con il numero di righe del secondo fattore. A= 1 −1 2 0 3 1 4 2 A·B = = aT1 aT2 , B= T T aT 1 b1 a1 b2 a1 b3 T T a2 b1 a2 b2 aT 2 b3 1 −1 0 2 −1 0 2 1 = 3 1 −1 −2 = ( b 1 , b2 , b3 ) 7 9 −6 3 5 −8 B · A non è possibile. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 39 / 45 Ulteriori esempi (1/2) 1 2 3 −1 4 5 6 · 1 −2 7 8 9 1 −1 1 −2 · 4 7 −5 = −11 −17 2 3 5 6 = −11 −13 −15 8 9 2 1 2 3 1 2 3 1 2 3 30 36 42 4 5 6 = 4 5 6 · 4 5 6 = 66 81 96 7 8 9 7 8 9 102 126 150 7 8 9 Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 41 / 45 Ulteriori esempi (2/2) 0 −1 −4 1 · = −2 1 −8 1 0 −1 1 2 −3 −4 · = −2 1 3 4 1 0 1 2 3 4 Osservazione Dunque, se A e B sono quadrate dello stesso ordine, A · B e B · A sono ben definite, tuttavia, in generale A e B non sono permutabili cioè, in generale, A · B 6= B · A. Ne segue che la moltiplicazione tra matrici non è commutativa. Felice Iavernaro (Univ. Bari) Scilab: Vettori e matrici. 19/10/2007 43 / 45 Prodotto tra matrici: Esempio Scilab -->A=[1 2 3; 4 5 6] A = 1. 2. 3. 4. 5. 6. -->B=[1 2 1 -1;1 -1 0 1;0 1 -2 1] B = 1. 2. 1. - 1. 1. - 1. 0. 1. 0. 1. - 2. 1. -->C=A*B C = 3. 9. 3. 9. - 5. - 8. Felice Iavernaro (Univ. Bari) 4. 7. Scilab: Vettori e matrici. 19/10/2007 45 / 45