ScilabScilab
Corso di InformaticaCorso di InformaticaCdL: CdL: ChimicaChimica
Matrici BidimensionaliMatrici Bidimensionali
Claudia d'AmatoClaudia d'[email protected]@di.uniba.it
MatriciMatrici 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 “;”
EsempioEsempio Il comandoIl comando
--> A = [1 1 1; 2 4 8; 3 9 27]--> A = [1 1 1; 2 4 8; 3 9 27]
produce il risultatoproduce il risultato A = A =
11 .. 1 .1 . 1.1.2.2. 4.4. 8.8.3.3. 9.9. 27.27.
La matrice viene memorizzata in memoria nella La matrice viene memorizzata in memoria nella variabile A per usi futurivariabile A per usi futuri
MatriciMatrici Inserire una matrice 3x3Inserire una matrice 3x3
A = [-1. 0. 1. ; 4. 2. 3. ; 5. 6. 8. ] <return>A = [-1. 0. 1. ; 4. 2. 3. ; 5. 6. 8. ] <return> u = [1. 3. -5.] ; v = [2. 3. 4.] ; w = [-1. 0 1. ]<return> u = [1. 3. -5.] ; v = [2. 3. 4.] ; w = [-1. 0 1. ]<return> C = [u ; v; w] //composizione di matrici, crea una C = [u ; v; w] //composizione di matrici, crea una
matrice 3x3matrice 3x3 r = [u, v, w] //composizione di matrici, crea un r = [u, v, w] //composizione di matrici, crea un
vettore 1x9vettore 1x9 D = [u' v' w'] //composizione di matrici, crea una D = [u' v' w'] //composizione di matrici, crea una
matrice 3x3matrice 3x3 S = [u'; v'; w'] //composizione di matrici, crea un S = [u'; v'; w'] //composizione di matrici, crea un
vettore colonna 9x1vettore colonna 9x1
Matrici /2Matrici /2 A + BA + B <return> <return> A – DA – D <return><return> A * BA * B <return> //prodotto matriciale<return> //prodotto matriciale A * uA * u <return> //err, incompatibilità dim<return> //err, incompatibilità dim A * u'A * u' <return><return> A' <return> //matrice traspostaA' <return> //matrice trasposta inv(B)inv(B) <return> //solo per matr. Quadrate e con <return> //solo per matr. Quadrate e con
determinante diverso da zerodeterminante diverso da zero det(B)det(B) <return> <return> trace(B) <return> //same as sum(diag(B))trace(B) <return> //same as sum(diag(B)) tril(B) <return> //estrae la matr triangolare tril(B) <return> //estrae la matr triangolare
superioresuperiore triu(B) <return> //estrae la matr triang infertriu(B) <return> //estrae la matr triang infer
Matrici/3Matrici/3 Matrice identità Matrice identità eye(3,3)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 = ans = 11 0 0 00 0 1 00 1 0 0 0 10 0 1
Matrici/4Matrici/4 Matrice unitaria Matrice unitaria ones(2,3)ones(2,3)
ans = ans = 11 1 1 11 1 1 11 1 1
Matrice nulla Matrice nulla zeros(2,4)zeros(2,4)ans = ans = 00 0 0 0 00 0 0 0 0 00 0 0 0
Matrici/5Matrici/5 Gli argomenti di Gli argomenti di onesones e e zeroszeros sono il numero sono il numero
di righe e il numero di colonne della matricedi righe e il numero di colonne della matrice possono essere estratte anche da una matrice già possono essere estratte anche da una matrice già
definitadefinita --> O = zeros(C);--> O = zeros(C);
O = O = 0.0. 0.0.0.0. 0.0.0.0. 0.0.
Dove C è una matrice di dimensione 3x2 definita in Dove C è una matrice di dimensione 3x2 definita in precedenzaprecedenza
Funzioni su matriciFunzioni su matrici Matrice diagonaleMatrice diagonale
Per ottenere una matrice diagonale, in cui gli Per ottenere una matrice diagonale, in cui gli elementi della diagonale sono costituiti dagli elementi della diagonale sono costituiti dagli elementi di un vettoreelementi di un vettore --> b = [1 2 5];--> b = [1 2 5];
--> B = diag(b)--> B = diag(b)B =B =
1.1. 0.0. 0.0.0.0. 2.2. 0.0.0.0. 0.0. 5.5.
questo esempio mostra che Scilab distingue questo esempio mostra che Scilab distingue maiuscole e minuscole (b è diverso da B)maiuscole e minuscole (b è diverso da B)
Funzioni su matriciFunzioni su matrici Estrarre la diagonaleEstrarre la diagonale
Se applichiamo la funzione diag su una matrice Se applichiamo la funzione diag su una matrice otteniamo un vettore costituito dagli elementi della otteniamo un vettore costituito dagli elementi della diagonalediagonale --> c = diag(B);--> c = diag(B);
c = c = [1.[1. 2.2. 5.]5.]
Funzioni su matriciFunzioni su matrici Matrici triangolariMatrici triangolari
Le funzioni triu (upper) e tril (lower) estraggono, Le funzioni triu (upper) e tril (lower) estraggono, risp., la parte triangolare sup ed inf di una matricerisp., la parte triangolare sup ed inf di una matrice --> C = [1 2 3 4; 5 6 7 8; 9 10 11 12] --> C = [1 2 3 4; 5 6 7 8; 9 10 11 12] --> U = triu(C);--> U = triu(C);
U = U = 1.1. 2. 3 42. 3 40.0. 6. 7 86. 7 80.0. 0. 11 120. 11 12
--> L = tril(C);--> L = tril(C);L = L =
1.1. 0 0 00 0 05.5. 6. 0 06. 0 09.9. 10. 11 010. 11 0
Funzioni su matriciFunzioni su matrici Matrice di numeri aleatoriMatrice di numeri aleatori
La funz. rand permette di creare matrici con valori pseudo-casuali nell'intervallo [0,1[ --> M = rand(2,3) //è specificata dim matrice 2x3--> M = rand(2,3) //è specificata dim matrice 2x3
M =M =0.21132490.2113249 0.00022110.0002211 0.66538110.66538110.75604390.7560439 0.33032710.3303271 0.62839180.6283918
Operazioni Operazioni elemento per elementoelemento per elemento
Per moltiplicare due matrici A e B Per moltiplicare due matrici A e B delle stesse delle stesse dimensionidimensioni elemento per elemento si utilizza elemento per elemento si utilizza l'operatore l'operatore .*.* (./ per la divisione) (./ per la divisione) A.*B è la matrice [aA.*B è la matrice [a
ijijbb
ijij]]
E' possibile anche elevare a potenza si può E' possibile anche elevare a potenza si può utilizzare l'operatore postfisso .^utilizzare l'operatore postfisso .^ A.^p permette di ottenere la matrice [aA.^p permette di ottenere la matrice [a
ijijpp] ]
Composizione di Matrici...Composizione di Matrici... Scilab unisce tra di loro matrici e vettoriScilab unisce tra di loro matrici e vettori→ → A = [1. 2. 3; 4. 5. 6; 7. 8. 9];A = [1. 2. 3; 4. 5. 6; 7. 8. 9];
→ → r = [10. 11. 12.]r = [10. 11. 12.]
→ → A = [A; r]A = [A; r]
A = A = 11 22 33
44 55 66
77 88 99
1010 1111 1212
...Composizione di Matrici......Composizione di Matrici... L'operazione di concatenazione permette di L'operazione di concatenazione permette di
assemblare più matrici in unaassemblare più matrici in una Supponiamo di voler costruire la seguente Supponiamo di voler costruire la seguente
matrice A suddivisa per blocchimatrice A suddivisa per blocchi11 2 3 42 3 411 4 9 16 4 9 1611 8 27 648 27 6411 16 81 25616 81 256
...Composizione di Matrici...Composizione di Matrici Definiamo leseguenti matriciDefiniamo leseguenti matrici
--> A11 = 1;--> A11 = 1; --> A12 = [ 2 3 4];--> A12 = [ 2 3 4]; --> A21 = [1; 1; 1];--> A21 = [1; 1; 1]; --> A22 = [4 9 16; 8 27 64; 16 81 256];--> A22 = [4 9 16; 8 27 64; 16 81 256];
per ottenere A concateniamo i 4 blocchiper ottenere A concateniamo i 4 blocchi --> A = [A11 A12; A21 A22]--> A = [A11 A12; A21 A22]
Riferimenti a elementi di Riferimenti a elementi di MatriceMatrice
Per far riferimento agli elementi di una matrice Per far riferimento agli elementi di una matrice si utilizzano gli indici fra parentesi tondesi utilizzano gli indici fra parentesi tonde A33=A(3,3)A33=A(3,3) x30=B(30,1)x30=B(30,1)
Estrazione di elementi...Estrazione di elementi... --> A(:,2)--> A(:,2) // estrae la seconda colonna// estrae la seconda colonna --> A(3,:)--> A(3,:) // estrae la terza riga// estrae la terza riga --> A(1:3,1:2) // estrae la matrice principale--> A(1:3,1:2) // estrae la matrice principale
// di ordine 2// di ordine 2 --> A([1 3], [2 3]) --> A([1 3], [2 3])
estrae la matrice costituita dall'intersezione delle estrae la matrice costituita dall'intersezione delle righe 1 e 3 e dalle colonne 2 e 3righe 1 e 3 e dalle colonne 2 e 3
...Estrazione di elementi...Estrazione di elementi Le matrici sono dei blocchi memorizzati colonna Le matrici sono dei blocchi memorizzati colonna
per colonnaper colonna --> A(5) //restituisce il 1 el della 2 col.--> A(5) //restituisce il 1 el della 2 col.
ans = 2ans = 2
--> A(1:5) //restituisce gli el da 1 a 5 --> A(1:5) //restituisce gli el da 1 a 5 procedendo per colonna procedendo per colonna
B = AB = A --> B(1:5) = -1--> B(1:5) = -1 //assegnamento -1 agli//assegnamento -1 agli
// elementi A(1:5)// elementi A(1:5)
Estrazione di Blocchi di Elementi Estrazione di Blocchi di Elementi da Matriceda Matrice
Estrazione delle Estrazione delle righe da 1 a 3righe da 1 a 3 della matrice A della matrice A (lucido precedente) e (lucido precedente) e tutte le colonne tutte le colonne b = b = A(1:3,:) A(1:3,:)
b = b = 1 2 31 2 3 4 5 64 5 6 7 8 97 8 9
Estrazione delle Estrazione delle righe da 1 a 3righe da 1 a 3 di A in di A in ordine ordine inversoinverso e delle e delle colonne 1 e 2colonne 1 e 2 C = A(3:-1:1, [1 2])C = A(3:-1:1, [1 2])
C = C = 7 8 7 8 4 5 4 5 1 2 1 2
Dimensioni di una MatriceDimensioni di una Matrice size(A,1) //numero righe di A (matr. Prec.)size(A,1) //numero righe di A (matr. Prec.)
Ans = 4Ans = 4
size(A,2) //numero colonne di Asize(A,2) //numero colonne di A Ans = 3Ans = 3
size(A)size(A) Ans = 4. 3.Ans = 4. 3. [numRow, numCol] = size(A)[numRow, numCol] = size(A)
length(a = [1 2 3 4 5 6]) //num el vettorelength(a = [1 2 3 4 5 6]) //num el vettore Ans = 6Ans = 6 length(A)length(A) //num el matrice //num el matrice
Ans = 12 Ans = 12
Rimodellare una matriceRimodellare una matrice ridimensionareridimensionare una matrice una matrice
--> B = [1 2 3; 4 5 6]--> B = [1 2 3; 4 5 6] --> B_new = matrix(B, 3, 2)--> B_new = matrix(B, 3, 2) B_New =B_New =
11 55 44 33 22 66
matrix(A,m,n) ridimensiona la matrice A ad matrix(A,m,n) ridimensiona la matrice A ad mxn.mxn. A deve contenere mxn elementiA deve contenere mxn elementi
matrix(B,2,2) //matrix(B,2,2) //erroreerrore, perchè B contiene più , perchè B contiene più di 4 elementidi 4 elementi
Funzioni primitiveFunzioni primitive sumsum
--> sum(1:6) //somma gli scalari 1+2+...+5+6--> sum(1:6) //somma gli scalari 1+2+...+5+6ans = 21ans = 21
--> B = [1 2 3; 4 5 6]--> B = [1 2 3; 4 5 6]B = B =
11 22 3344 55 66
-->sum(B, “r”)-->sum(B, “r”) // somma di colonne// somma di colonneans = 5ans = 5 77 99
---> [col1 col2 col3] = sum(B,”r”)---> [col1 col2 col3] = sum(B,”r”) -->sum(B, “c”)-->sum(B, “c”) // somma di righe// somma di righe
ans = [6; 15]ans = [6; 15]
Funzioni primitiveFunzioni primitive prod(1:5) //prod. primi 5 num 1*2*...*4*5prod(1:5) //prod. primi 5 num 1*2*...*4*5
ans = 120ans = 120 -->prod(B, “r”)-->prod(B, “r”) // prodotto di colonne// prodotto di colonne
ans = ans = 44 1010 1818
-->prod(B, “c”)-->prod(B, “c”) // prodotto di righe// prodotto di righeans = ans =
6 6120120
--> prod(B)--> prod(B) //prodotto tutti elem matrice //prodotto tutti elem matriceans = 720ans = 720
Funzioni primitiveFunzioni primitive cumsum e cumprodcumsum e cumprod
--> x = 1:6; ==> x = [1 2 3 4 5 6]--> x = 1:6; ==> x = [1 2 3 4 5 6] --> cumsum(x) //1 1+2 3+3 6+4 10+5 ....--> cumsum(x) //1 1+2 3+3 6+4 10+5 ....
ans = [1 3 6 10 15 21]ans = [1 3 6 10 15 21] --> cumprod(x) --> cumprod(x) //1 1*2 2*3 6*4 24*5 ... //1 1*2 2*3 6*4 24*5 ...
ans = [1 2 6 24 120 720]ans = [1 2 6 24 120 720]
Funzioni primitiveFunzioni primitive Per le matrici l'accumulazione viene fatta Per le matrici l'accumulazione viene fatta
colonna per colonnacolonna per colonna --> x = [1 2 3; 4 5 6]--> x = [1 2 3; 4 5 6]
Provare:Provare: --> cumsum(x) //somma cumulativa elementi --> cumsum(x) //somma cumulativa elementi
procedendo per colonneprocedendo per colonne --> cumsum(x, “r”) //somma cumulativa el di ogni --> cumsum(x, “r”) //somma cumulativa el di ogni
colonnacolonna --> cumsum(x, “c”) //somma cumulativa el di ogni --> cumsum(x, “c”) //somma cumulativa el di ogni
rigariga
Funzioni primitiveFunzioni primitive Minimo e massimoMinimo e massimo
--> x = rand(1,5)--> x = rand(1,5) --> min(x) --> min(x) // restituisce il minimo// restituisce il minimo --> [posMin, valMin] = min(x)--> [posMin, valMin] = min(x)
restituisce valore e posizionerestituisce valore e posizione
--> y = rand(2,3)--> y = rand(2,3) --> [ymin, imin] = min(y)--> [ymin, imin] = min(y) --> [ymin, imin] = min(y, “r”)--> [ymin, imin] = min(y, “r”) --> [ymin, imin] = min(y, “c”)--> [ymin, imin] = min(y, “c”)
Funzioni primitiveFunzioni primitive MediaMedia
--> x = 1:6--> x = 1:6 --> mean(x) --> mean(x) // restituisce la media// restituisce la media --> st_deviation(x)--> st_deviation(x)
--> y = rand(2,3)--> y = rand(2,3) --> mean(y, “r”)--> mean(y, “r”) --> mean(y, “c”)--> mean(y, “c”)