Scilab
Scilab
Corso di Informatica
Corso di Informatica
CdL:
CdL:
Chimica
Chimica
Matrici Bidimensionali
Matrici Bidimensionali
Claudia d'Amato
Claudia d'Amato
claudia.damato@di.uniba.it claudia.damato@di.uniba.itMatrici
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
Esempio
Il comando
Il comando
--> A = [1 1 1; 2 4 8; 3 9 27]--> A = [1 1 1; 2 4 8; 3 9 27]
produce il risultato
produce il risultato
A = A = 1 1 .. 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 futuri
Matrici
Matrici
Inserire una matrice 3x3
Inserire 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 3x3
matrice 3x3
r = [u, v, w] //composizione di matrici, crea un r = [u, v, w] //composizione di matrici, crea un
vettore 1x9
vettore 1x9
D = [u' v' w'] //composizione di matrici, crea una D = [u' v' w'] //composizione di matrici, crea una
matrice 3x3
matrice 3x3
S = [u'; v'; w'] //composizione di matrici, crea un S = [u'; v'; w'] //composizione di matrici, crea un
vettore colonna 9x1
Matrici /2
Matrici /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 zero
determinante 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
superiore
superiore
Matrici/3
Matrici/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/4
Matrici/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/5
Matrici/5
Gli argomenti di
Gli argomenti di
ones
ones
e
e
zeros
zeros
sono il numero
sono il numero
di righe e il numero di colonne della matrice
di righe e il numero di colonne della matrice
possono essere estratte anche da una matrice già possono essere estratte anche da una matrice già
definita definita --> 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
precedenza
Funzioni su matrici
Funzioni su matrici
Matrice diagonale
Matrice 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 vettore elementi 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)
Funzioni su matrici
Funzioni su matrici
Estrarre la diagonale
Estrarre 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
diagonale diagonale --> c = diag(B);--> c = diag(B); c = c = [1. [1. 2.2. 5.]5.]
Funzioni su matrici
Funzioni su matrici
Matrici triangolari
Matrici 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 matrice
risp., 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 4 0. 0. 6. 7 86. 7 8 0. 0. 0. 11 120. 11 12 --> L = tril(C);--> L = tril(C); L = L = 1. 1. 0 0 00 0 0 5. 5. 6. 0 06. 0 0 9. 9. 10. 11 010. 11 0
Funzioni su matrici
Funzioni su matrici
Matrice di numeri aleatori
Matrice 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.2113249 0.2113249 0.00022110.0002211 0.66538110.6653811 0.7560439 0.7560439 0.33032710.3303271 0.62839180.6283918
Operazioni
Operazioni
elemento per elemento
elemento per elemento
Per moltiplicare due matrici A e B
Per moltiplicare due matrici A e B
delle stesse
delle stesse
dimensioni
dimensioni
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 [aijijbbijij]]
E' possibile anche elevare a potenza si può
E' possibile anche elevare a potenza si può
utilizzare l'operatore postfisso .^
utilizzare l'operatore postfisso .^
Composizione di Matrici...
Composizione di Matrici...
Scilab unisce tra di loro matrici e vettori
Scilab 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 = 1 1 22 33 4 4 55 66 7 7 88 99 10 10 1111 1212
...Composizione di Matrici...
...Composizione di Matrici...
L'operazione di concatenazione permette di
L'operazione di concatenazione permette di
assemblare più matrici in una
assemblare più matrici in una
Supponiamo di voler costruire la seguente
Supponiamo di voler costruire la seguente
matrice A suddivisa per blocchi
matrice A suddivisa per blocchi
1
1
2 3 4
2 3 4
1
1
4 9 16
4 9 16
1
1
8 27 64
8 27 64
1
1
16 81 256
16 81 256
...Composizione di Matrici
...Composizione di Matrici
Definiamo leseguenti matrici
Definiamo 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 blocchi
per ottenere A concateniamo i 4 blocchi
Riferimenti a elementi di
Riferimenti a elementi di
Matrice
Matrice
Per far riferimento agli elementi di una matrice
Per far riferimento agli elementi di una matrice
si utilizzano gli indici fra parentesi tonde
si 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 3
...Estrazione di elementi
...Estrazione di elementi
Le matrici sono dei blocchi memorizzati colonna
Le matrici sono dei blocchi memorizzati colonna
per colonna
per 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)
Estrazione di Blocchi di Elementi
Estrazione di Blocchi di Elementi
da Matrice
da Matrice
Estrazione delle
Estrazione delle
righe da 1 a 3
righe 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 3
righe da 1 a 3
di A in
di A in
ordine
ordine
inverso
inverso
e delle
e delle
colonne 1 e 2
colonne 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 Matrice
Dimensioni 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 A
size(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 vettore
length(a = [1 2 3 4 5 6]) //num el vettore
Ans = 6Ans = 6
length(A)length(A) //num el matrice //num el matrice
Rimodellare una matrice
Rimodellare una matrice
ridimensionare
ridimensionare
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) //
errore
errore
, perchè B contiene più
, perchè B contiene più
di 4 elementi
Funzioni primitive
Funzioni primitive
sum
sum
--> sum(1:6) //somma gli scalari 1+2+...+5+6--> sum(1:6) //somma gli scalari 1+2+...+5+6
ans = 21 ans = 21 --> B = [1 2 3; 4 5 6]--> B = [1 2 3; 4 5 6] B = B = 1 1 22 33 4 4 55 66
-->sum(B, “r”)-->sum(B, “r”) // somma di colonne// somma di colonne
ans = 5
ans = 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]
Funzioni primitive
Funzioni primitive
prod(1:5) //prod. primi 5 num 1*2*...*4*5
prod(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 =
4
4 1010 1818
-->prod(B, “c”)-->prod(B, “c”) // prodotto di righe// prodotto di righe
ans = ans = 6 6 120 120
--> prod(B)--> prod(B) //prodotto tutti elem matrice //prodotto tutti elem matrice
ans = 720
Funzioni primitive
Funzioni primitive
cumsum e cumprod
cumsum 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 primitive
Funzioni primitive
Per le matrici l'accumulazione viene fatta
Per le matrici l'accumulazione viene fatta
colonna per colonna
colonna 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 colonne
procedendo per colonne
--> cumsum(x, “r”) //somma cumulativa el di ogni --> cumsum(x, “r”) //somma cumulativa el di ogni
colonna
colonna
--> cumsum(x, “c”) //somma cumulativa el di ogni --> cumsum(x, “c”) //somma cumulativa el di ogni
riga
Funzioni primitive
Funzioni primitive
Minimo e massimo
Minimo 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 primitive
Funzioni primitive
Media
Media
--> 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”)