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