+ All Categories
Home > Documents > Corso di Informatica CdL: Chimica - di.uniba.itcdamato/corsi/infChimMateriale/02-Scilab.pdf ·...

Corso di Informatica CdL: Chimica - di.uniba.itcdamato/corsi/infChimMateriale/02-Scilab.pdf ·...

Date post: 18-Feb-2019
Category:
Upload: ledien
View: 221 times
Download: 0 times
Share this document with a friend
30
Scilab Scilab Corso di Informatica Corso di Informatica CdL: CdL: Chimica Chimica Matrici Bidimensionali Matrici Bidimensionali Claudia d'Amato Claudia d'Amato [email protected] [email protected]
Transcript

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

Manipolazione e Matrici di Manipolazione e Matrici di Stringhe...Stringhe...

… … Manipolazione e Matrici di Manipolazione e Matrici di StringheStringhe

Creazione di un vettore colonna di tipo stringaCreazione di un vettore colonna di tipo stringa


Recommended