• Non ci sono risultati.

Matrici Bidimensionali - Funzioni per Matrici e Vettori

N/A
N/A
Protected

Academic year: 2021

Condividi "Matrici Bidimensionali - Funzioni per Matrici e Vettori"

Copied!
30
0
0

Testo completo

(1)

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.it

(2)

Matrici

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 “;”

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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)

(10)

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.]

(11)

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

(12)

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

(13)

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 .^

(14)

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

(15)

...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

(16)

...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

(17)

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)

(18)

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

(19)

...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)

(20)

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

(21)

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

(22)

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

(23)

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]

(24)

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

(25)

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]

(26)

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

(27)

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”)

(28)

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”)

(29)

Manipolazione e Matrici di

Manipolazione e Matrici di

Stringhe...

(30)

Manipolazione e Matrici di

Manipolazione e Matrici di

Stringhe

Stringhe

Riferimenti

Documenti correlati

In virt` u di questo isomorfismo, che, come si vede, `e legato alla base {ˆc k }, tutto ci`o che `e stato detto per le matrici pu`o essere tranquillamente ripetuto per gli

Infatti poiché con A[ ][ ] s’intende l’indirizzo del primo elemento A[0][0], la function comincerà ad eseguire i calcoli sulla prima riga; per determinare l’indirizzo della

Sia A una

[r]

[r]

Scrivere un programma che chieda quanti valori verranno introdotti dalla tastiera (max 100), li chieda tutti e li collochi in un vettore. Successivamente, il

Una matrice A ∈ M n,m si può anche vedere come un “insieme” di:. • n m-uple (una per

la coppia ordinata [indice di riga, indice di colonna] indica la posizione di un elemento nello array bidimensionale. Gli indici possono essere