Matrici Bidimensionali - Funzioni per Matrici e Vettori
Transcript
Matrici Bidimensionali - Funzioni per Matrici e Vettori
Scilab Corso di Informatica CdL: Chimica Matrici Bidimensionali Claudia d'Amato [email protected] Matrici Uno dei tipi di base di Scilab è costituito dalla matrice Uno dei modi più semplici per definire una matrice in Scilab è quello di inserire una lista di elementi seguendo le seguenti convenzioni gli elementi di una riga sono separati da spazi o virgole la lista di elementi è racchiusa tra [ ] ogni riga termina con “;” Esempio Il comando --> A = [1 1 1; 2 4 8; 3 9 27] produce il risultato A= 1. 2. 3. 1. 4. 9. 1. 8. 27. La matrice viene memorizzata in memoria nella variabile A per usi futuri Matrici Inserire una matrice 3x3 A = [-1. 0. 1. ; 4. 2. 3. ; 5. 6. 8. ] <return> u = [1. 3. -5.] ; v = [2. 3. 4.] ; w = [-1. 0 1. ]<return> C = [u ; v; w] //composizione di matrici, crea una matrice 3x3 r = [u, v, w] //composizione di matrici, crea un vettore 1x9 D = [u' v' w'] //composizione di matrici, crea una matrice 3x3 S = [u'; v'; w'] //composizione di matrici, crea un vettore colonna 9x1 Matrici A + B <return> A – D <return> A * B <return> //prodotto matriciale A * u <return> //err, incompatibilità dim A * u' <return> A' <return> //matrice trasposta inv(B) <return> //solo per matr. Quadrate e con determinante diverso da zero det(B) <return> trace(B) <return> //same as sum(diag(B)) tril(B) <return> //estrae la matr triangolare superiore triu(B) <return> //estrae la matr triang infer /2 Matrici/3 Matrice identità eye(3,3) gli argomenti della funzione eye(n,m) sono il numero di righe n e il numero di colonne m della matrice ans = 1 0 0 0 1 0 0 0 1 Matrici/4 Matrice unitaria ones(2,3) ans = 1 1 1 1 1 1 Matrice nulla zeros(2,4) ans = 0 0 0 0 0 0 0 0 Matrici/5 Gli argomenti di ones e zeros sono il numero di righe e il numero di colonne della matrice possono essere estratte anche da una matrice già definita --> O = zeros(C); O= 0. 0. 0. 0. 0. 0. Dove C è una matrice di dimensione 3x2 definita in precedenza Funzioni su matrici Matrice diagonale Per ottenere una matrice diagonale, in cui gli elementi della diagonale sono costituiti dagli elementi di un vettore --> b = [1 2 5]; --> B = diag(b) B= 1. 0. 0. 2. 0. 0. 0. 0. 5. questo esempio mostra che Scilab distingue maiuscole e minuscole (b è diverso da B) Funzioni su matrici Estrarre la diagonale Se applichiamo la funzione diag su una matrice otteniamo un vettore costituito dagli elementi della diagonale --> c = diag(B); c= [1. 2. 5.] Funzioni su matrici Matrici triangolari Le funzioni triu (upper) e tril (lower) estraggono, risp., la parte triangolare sup ed inf di una matrice --> C = [1 2 3 4; 5 6 7 8; 9 10 11 12] --> U = triu(C); U= 1. 2. 3 4 0. 6. 7 8 0. 0. 11 12 --> L = tril(C); L= 1. 0 0 0 5. 6. 0 0 9. 10. 11 0 Funzioni su matrici Matrice di numeri aleatori La funz. rand permette di creare matrici con valori pseudo-casuali nell'intervallo [0,1[ --> M = rand(2,3) M= 0.2113249 0.7560439 //è specificata dim matrice 2x3 0.0002211 0.3303271 0.6653811 0.6283918 Operazioni elemento per elemento Per moltiplicare due matrici A e B delle stesse dimensioni elemento per elemento si utilizza l'operatore .* (./ per la divisione) A.*B è la matrice [aijbij] E' possibile anche elevare a potenza si può utilizzare l'operatore postfisso .^ A.^p permette di ottenere la matrice [aijp] Composizione di Matrici... Scilab unisce tra di loro matrici e vettori → A = [1. 2. 3; 4. 5. 6; 7. 8. 9]; → r = [10. 11. 12.] → A = [A; r] A= 1 4 7 10 2 5 8 11 3 6 9 12 ...Composizione di Matrici... L'operazione di concatenazione permette di assemblare più matrici in una Supponiamo di voler costruire la seguente matrice A suddivisa per blocchi 1 2 3 4 1 4 9 16 1 8 27 64 1 16 81 256 ...Composizione di Matrici Definiamo leseguenti matrici --> A11 = 1; --> A12 = [ 2 3 4]; --> A21 = [1; 1; 1]; --> A22 = [4 9 16; 8 27 64; 16 81 256]; per ottenere A concateniamo i 4 blocchi --> A = [A11 A12; A21 A22] Riferimenti a elementi di Matrice Per far riferimento agli elementi di una matrice si utilizzano gli indici fra parentesi tonde A33=A(3,3) x30=B(30,1) Estrazione di elementi... --> A(:,2) // estrae la seconda colonna --> A(3,:) // estrae la terza riga --> A(1:3,1:2) // estrae la matrice principale // di ordine 2 --> A([1 3], [2 3]) estrae la matrice costituita dall'intersezione delle righe 1 e 3 e dalle colonne 2 e 3 ...Estrazione di elementi Le matrici sono dei blocchi memorizzati colonna per colonna --> A(5) //restituisce il 1 el della 2 col. ans = 2 --> A(1:5) B=A --> B(1:5) = -1 //restituisce gli el da 1 a 5 procedendo per colonna //assegnamento -1 agli // elementi A(1:5) Estrazione di Blocchi di Elementi da Matrice Estrazione delle righe da 1 a 3 della matrice A Estrazione delle righe da 1 a 3 della matrice A (lucido precedente) e tutte le colonne b= A(1:3,:) b= 1 4 7 2 5 8 3 6 9 Estrazione delle righe da 1 a 3 di A in ordine inverso e delle colonne 1 e 2 C = A(3:-1:1, [1 2]) C= 7 4 1 8 5 2 Dimensioni di una Matrice size(A,1) Ans = 4 size(A,2) //numero righe di A (matr. Prec.) //numero colonne di A Ans = 3 size(A) Ans = 4. 3. [numRow, numCol] = size(A) length(a = [1 2 3 4 5 6]) //num el vettore Ans = 6 length(A) //num el matrice Ans = 12 Rimodellare una matrice ridimensionare una matrice --> B = [1 2 3; 4 5 6] --> B_new = matrix(B, 3, 2) B_New = 1 4 2 5 3 6 matrix(A,m,n) ridimensiona la matrice A ad mxn. A deve contenere mxn elementi matrix(B,2,2) di 4 elementi //errore, perchè B contiene più Funzioni primitive sum --> sum(1:6) //somma gli scalari 1+2+...+5+6 ans = 21 --> B = [1 2 3; 4 5 6] B= 1 2 3 4 5 6 -->sum(B, “r”) // somma di colonne ans = 5 7 9 ---> [col1 col2 col3] = sum(B,”r”) -->sum(B, “c”) // somma di righe ans = [6; 15] Funzioni primitive prod(1:5) //prod. primi 5 num 1*2*...*4*5 ans = 120 -->prod(B, “r”) // prodotto di colonne ans = 4 10 18 -->prod(B, “c”) // prodotto di righe ans = 6 120 --> prod(B) //prodotto tutti elem matrice ans = 720 Funzioni primitive cumsum e cumprod --> x = 1:6; ==> x = [1 2 3 4 5 6] --> cumsum(x) //1 1+2 3+3 6+4 10+5 .... ans = [1 3 6 10 15 21] --> cumprod(x) //1 1*2 2*3 6*4 24*5 ... ans = [1 2 6 24 120 720] Funzioni primitive Per le matrici l'accumulazione viene colonna per colonna fatta --> x = [1 2 3; 4 5 6] Provare: --> cumsum(x) //somma cumulativa elementi procedendo per colonne --> cumsum(x, “r”) //somma cumulativa el di ogni colonna --> cumsum(x, “c”) //somma cumulativa el di ogni riga Funzioni primitive Minimo e massimo --> x = rand(1,5) --> min(x) // restituisce il minimo --> [posMin, valMin] = min(x) restituisce valore e posizione --> y = rand(2,3) --> [ymin, imin] = min(y) --> [ymin, imin] = min(y, “r”) --> [ymin, imin] = min(y, “c”) Funzioni primitive Media --> x = 1:6 --> mean(x) // restituisce la media --> st_deviation(x) --> y = rand(2,3) --> mean(y, “r”) --> mean(y, “c”) Manipolazione e Matrici di Stringhe... … Manipolazione e Matrici di Stringhe Creazione di un vettore colonna di tipo stringa