Scilab Corso di Informatica CdL: Chimica Matrici Bidimensionali Claudia d'amato claudia.damato@di.uniba.it
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 ;
Il comando --> A = [1 1 1; 2 4 8; 3 9 27] produce il risultato A = 1. 1. 1. 2. 4. 8. 3. 9. 27. Esempio La matrice viene memorizzata in memoria nella variabile A per usi futuri
Inserire una matrice 3x3 Matrici 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 /2 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
Matrice identità eye(3,3) Matrici/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
Matrice diagonale Funzioni su matrici 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. 0. 2. 0. 0. 0. 5. questo esempio mostra che Scilab distingue maiuscole e minuscole (b è diverso da B)
Estrarre la diagonale Funzioni su matrici Se applichiamo la funzione diag su una matrice otteniamo un vettore costituito dagli elementi della diagonale --> c = diag(b); c = [1. 2. 5.]
Matrici triangolari Funzioni su matrici 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
Matrice di numeri aleatori Funzioni su matrici La funz. rand permette di creare matrici con valori pseudo-casuali nell'intervallo [0,1[ --> M = rand(2,3) //è specificata dim matrice 2x3 M = 0.2113249 0.0002211 0.6653811 0.7560439 0.3303271 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 [a ij ij b ij ] E' possibile anche elevare a potenza si può utilizzare l'operatore postfisso.^ A.^p permette di ottenere la matrice [a ij ij p ]
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 2 3 4 5 6 7 8 9 10 11 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) //restituisce gli el da 1 a 5 procedendo per colonna B = A --> B(1:5) = -1 //assegnamento -1 agli // elementi A(1:5)
Estrazione di Blocchi di Elementi da Matrice Estrazione delle righe da 1 a 3 della matrice A (lucido precedente) e tutte le colonne b = A(1:3,:) b = 1 2 3 4 5 6 7 8 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 8 4 5 1 2
Dimensioni di una Matrice size(a,1) //numero righe di A (matr. Prec.) Ans = 4 size(a,2) //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) Ans = 12 //num el matrice
Rimodellare una matrice ridimensionare una matrice --> B = [1 2 3; 4 5 6] --> B_new = matrix(b, 3, 2) B_New = 1 5 4 3 2 6 matrix(a,m,n) ridimensiona la matrice A ad mxn. A deve contenere mxn elementi matrix(b,2,2) //errore errore,, perchè B contiene più di 4 elementi
sum Funzioni primitive --> 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
cumsum e cumprod Funzioni primitive --> 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 fatta colonna per colonna --> 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
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 ) Funzioni primitive
Manipolazione e Matrici di Stringhe...
Manipolazione e Matrici di Stringhe Creazione di un vettore colonna di tipo stringa