Upload
donhan
View
217
Download
0
Embed Size (px)
Citation preview
Università di Salerno Corso di
FONDAMENTI DI INFORMATICACorso di Laurea Ingegneria
Corso BDocente : Ing. Secondulfo Giovanni
Anno Accademico 2010-2011
Lezione 21: Tipi di dato, Vettori e Matrici in MATLAB
Giovedì 18 Novembre 2010
Fondamenti di Informatica Ing. Secondulfo Giovanni
2
I tipi di dato in Matlab sono organizzati secondo la seguente gerarchia
Vedi matlab help (Data types overview matlab data types) per maggiori dettagli
Fondamenti di Informatica Ing. Secondulfo Giovanni
4
Single numeri reali rappresentati con 32bit
Double numeri reali rappresentati con 64bit
Fondamenti di Informatica Ing. Secondulfo Giovanni
5
Tipi Componenti
Semplici
Strutturati
Ad esempio :
un numero complesso a+jb è costituito dal coefficiente della parte reale e dal coefficiente della parte immaginaria entrambi, in generale, saranno dei numeri reali. I componenti di una parola sono i caratteri, ma possono anche essere vettori di vettori.
Assemblaggio
Prodotto Cartesiano
(definisce il tipo come una n-pla dei tipi componenti)
Sequenza
(definisce il tipo componente come un allineamento (o stringa) di valori omogenei, e di lunghezza variabile)
Tipi Strutturati Generalità
Fondamenti di Informatica Ing. Secondulfo Giovanni
6
Funzione di accesso
Si definisce Funzione di Accesso la modalità e la notazione per far riferimento ad un valore del tipo strutturato
per posizione
Definisce ad esempio che la posizione i-esima individua l i-esimo componente
per nome
Se viene associato uno specifico nome s ciascun componente del tipo (es. parte reale , parte immaginaria nel numero complesso)
Costruttore del tipo
E la struttura sintattica, che identifica le modalità di costruzione e i tipi componenti, cui sono associate le funzioni di accesso
Costruttore dei valori
E il formalismo adoperato per indicare un valore strutturato attraverso di suoi componenti. es. (x,y)
Tipi Strutturati Generalità (cont.)
Fondamenti di Informatica Ing. Secondulfo Giovanni
7
Gli array si definiscono come cartesiano di n tipi uguali:
tipo array = cartesiano (T 1 , T 2 , ..., T n )
con tipo T 1 = T 2 = ... = T nSono caratterizzati da:
struttura ad accesso casuale
accesso con un indice calcolato
Per la dichiarazione del tipo Array occorre specificare:
tipo degli elementi componenti
int, float, etc
numero di indici (dimensionalità o rango dell array)
Array monodimensionale (vettore)
Array bidimensionale (matrice)
valore minimo e massimo di ciascun indice
Gli Array
Fondamenti di Informatica Ing. Secondulfo Giovanni
8
numero di indici (dimensionalità o rango dell array)
Array monodimensionale (vettore)
Array bidimensionale (matrice)
valore minimo e massimo di ciascun indice
Gli Array
i vi
i
j
Mij
Vettore
Matrice
Fondamenti di Informatica Ing. Secondulfo Giovanni
9
Il componente di un array è detta variabile con indice ed assume la forma
nomeArray[espressioneindice]
Per la Funzione di accesso si utilizza una notazione del tipo:
M[i] (dimensionalità pari a uno)
M[i,j] M[i][j] (dimensionalità pari a due)
Operazioni sugli Array :
sui singoli elementi
sulla struttura in quanto tale
Linguaggi specialistici come Mathlab definiscono una serie di operazioni sulla struttura in quanto tale; ad esempio è possibile effettuare direttamente operazioni tipo :
- Somma elementi di una matrice
- Prodotto elementi di una matrice
- Valore minimo valore massimo di un array
- Prodotto di due Vettori
- Prodotto di due Matrici
Gli Array
Fondamenti di Informatica Ing. Secondulfo Giovanni
10
Statica
In alcuni linguaggi l array è una struttura statica nel senso che la dimensione è fissata al tempo della compilazione e pertanto l occupazione della memoria è fissa (viene definita la dimensione massima) Quando poi viene eseguito l occupazione è quella delle dimensioni effettive, cioè il numero degli elementi che effettivamente viene utilizzato, che in ogni caso non devono eccedere la dimensione massima
Dinamica
In alcuni linguaggi l array assume le dimensioni necessarie al tempo dell esecuzione, ne consegue che la dimensione massima è quella effettivamente utilizzata.
Confronto fra le tecniche di allocazione
Allocazione Statica :
Numero fisso e predefinito dei componenti dell array
Allocazione non Ottimale
Semplifica e velocizza l esecuzione
Allocazione Dinamica
Numero variabile dei componenti dell array
Uso efficiente della memoria
Leggermente più pesante in quanto l array è allocato in esecuzione
Gli Array Allocazione
Fondamenti di Informatica Ing. Secondulfo Giovanni
11
Monodimensionali:
Se i < j a(i) precede a(j)
Bidimensionali
Se i1 < i2 A(i1, .) precede A(i2, .)
Se j1 < j2 A(i, j1) precede A(i, j2)
A0,0 ; A0,1 ; A0,2 ; A1,0 ; . An-1,0 ; An-1,1 ; .
In generale il criterio di ordinamento è sul primo indice la dichiarazione di array consente al sistema di elaborazione di linearizzare la rappresentazione trasformandola di fatto in una notazione ad un unico indice. Es. per
A[2][3] si ha : A0,0 ; A0,1 ; A0,2 ; A1,0 ; A1,1 ; A1,2
Quindi il riferimento all elemento Ai,j è dato dalla posizione K (con K=0 per a[0][0] ) dove K = i * dimcol +J (dove dimcol è l estensione della seconda dimensione della matrice)
K0=A0,0 ; K1= A0,1 ; K2= A0,2 ; K3= A1,0 ; K4= A1,1 ; K5= A1,2
Ordinamento Elementi di un Array
Fondamenti di Informatica Ing. Secondulfo Giovanni
12
Ogni cosa in Matlab è rappresentata con una matrice!
Se hanno 1 dimensione il loro aspetto Se hanno 1 dimensione il loro aspetto intuitivo intuitivo èè quello di una quello di una lista lista o o arrayarray (vettore)(vettore)
Se hanno 2 dimensioni il loro aspetto Se hanno 2 dimensioni il loro aspetto intuitivo intuitivo èè quello di una quello di una matricematrice
Se hanno 3 dimensioni il loro aspetto Se hanno 3 dimensioni il loro aspetto intuitivo intuitivo èè quello di un quello di un parallelepipedoparallelepipedo
Fondamenti di Informatica Ing. Secondulfo Giovanni
14
Collezione indicizzata di variabili dello stesso tipoIl valore di un array come unica variabile è quindi una n-pla di valori componenti;
( 2, 9, 0, -1, 24, 0, 9, 6 )
Fondamenti di Informatica Ing. Secondulfo Giovanni
15
Per creare un array in Matlab basta digitare gli elementi all interno di una coppia di parentesi quadre separandoli con uno spazio o con una virgola
Es: vet=[1,2,3,4,5]
E possibile creare un vettore colonna separando gli elementi con un ;
Es: vet=[1;2;3;4;5]
In alternativa è possibile utilizzare il simbolo di trasposizione Es: vet=[1;2;3;4;5]
Fondamenti di Informatica Ing. Secondulfo Giovanni
16
E possibile creare nuovi array a partire da array esistentiEs: vet1=[1,2,3,4,5] vet2=[6,7,8,9,0]
vet3=[vet1,vet2]quali saranno gli elementi contenuti in vet3?
Per creare un vettore di elementi regolarmente intervallati si utilizza l operatore :
x=[m:q:n] crea il vettore x formato da elementi aventi un incremento costante pari a q. Il primo valore è m mentre l ultimo è n se m-n è un intero multiplo di q altrimenti l ultimo valore èminore di nEs: x=[0:2:8] ->x=[0,2,4,6,8]Se l incremento q viene omesso Matlab lo pone per default uguale a 1
Fondamenti di Informatica Ing. Secondulfo Giovanni
17
linspace(x1,x2,n) crea un vettore riga di elementi linearmente intervallati indicando il numero di valori non l incremento
Es: linspace(5,8,31) = [5:.1:8]Se n viene omesso vengono generati 100 elementi
logspace(a,b,n) crea un array di elementi intervallati logaritmicamente dove n è il numero di punti fra 10a e 10b
x=logspace(-1,1,4) -> x=[0.1000,0.4642,2.1544,10.000]Se n viene omesso vengono generati 50 elementi
Fondamenti di Informatica Ing. Secondulfo Giovanni
18
E possibile creare una matrice digitando le righe della matrice una dopo l altra, separando gli elementi di ogni riga con uno spazio (o una virgola) e le righe con un ;
Es: A=[2,4,10;16,3,7]IMPORTANTE: gli spazi o le virgole separano gli elementi in varie colonne mentre il ; separa gli elementi in varie righe
Una matrice può essere creata combinando vettori riga e colonna
Fondamenti di Informatica Ing. Secondulfo Giovanni
19
Gli indici di una matrice sono gli elementi di riga e di colonna che identificano i vari elementi della matrice stessa
Es: v(5) indica il quinto elemento del vettore vEs: A(2,3) referenzia l elemento di riga 2 e colonna 3 della matrice AEs: A(2,3)=10 impostiamo a 10 l elemento di riga 2 e colonna 3 della matrice A
Fondamenti di Informatica Ing. Secondulfo Giovanni
20
L operatore : seleziona i singoli elementi, righe, colonne o sottoarray di array
Es: v(:) rappresenta tutti gli elementi del vettore vEs: v(2:5) rappresenta gli elementi compresi tra il secondo ed il quinto indice ovvero v(2),v(3),v(4)v(5)Es: A(:,3) identifica tutti gli elementi nella terza colonna di AA(:,2:5) identifica tutti gli elementi dalla seconda alla quinta colonna di AA(2:3,1:3) identifica tutti gli elementi nella seconda e nella terza riga che si trovano tra la prima e la terza colonna di A
Fondamenti di Informatica Ing. Secondulfo Giovanni
21
L array vuoto non contiene elementi ed èidentificato con [ ]Le righe e le colonne di una matrice possono essere cancellate impostandole uguali all array nullo
Fondamenti di Informatica Ing. Secondulfo Giovanni
22
zeros(n, m, classname): crea una matrice n x m di tutti 0 del tipo specificato in classname (solo tipo NUMERIC)ones: come zeros ma riempie la matrice con 1eye(n, m, classname): crea una matrice identità n x m di tipo classname (solo tipo NUMERIC)rand (n, m): crea una matrice n x m di numeri casuali (compresi tra 0 e 1)max(A): restituisce l elemento algebricamente più grande di A se A è un vettore. Oppure se A è una matrice l elemento più grande di ogni sua riga.min(A): come max questa volta però viene restituito l elemento più piccololength(A): restituisce il numero di elementi del vettore A o il massimo tra le righe o le colonne della matrice Asum(A): se A è un array somma gli elementi; se A è una matrice effettua la somma delle singole colonne e li mette in un arraysum (A, dim): somma gli gli elementi di A lungo la dimensione indicata con dimsort(A): ordina ogni colonna della matrice A in senso crescentenumel(A): ritorna il numero di elementi della matrice A
Fondamenti di Informatica Ing. Secondulfo Giovanni
23
find(x): restituisce un array contenente gli indici degli elementi non nulli dell array x.size(A): restituisce un vettore riga contenente le dimensioni della matrice Aany(A): verifica se ogni elemento di A è un numero diverso da zeroany(A, dim): come any(A) ma verifica la dimensione indicata da dimcat(n,A,B,C,..): crea una nuova matrice concatenando le matrici A,B,C lungo la dimensione n
Fondamenti di Informatica Ing. Secondulfo Giovanni
24
+ Somma array-scalare. [6,3]+2 = [8,5]- Sottrazione array-scalare. [8,3]-5= [3,-2]+ Somma di array. [6,5]+[4,8]=[10,13]- Sottrazione di array. [6,5]-[4,8]=[2,-3].* Moltiplicazione di array. [3,5].*[4,8]=[12,40]./ Divisione di array. [2,5]./[4,8]=[2/4,5/8].^ Elevazione a potenza di array. [3,5].^2=[3.^2,5^2]
Fondamenti di Informatica Ing. Secondulfo Giovanni
25
Prodotto scalare. E uno scalare
Moltiplicazione matrice vettore. E una matrice
Moltiplicazione matrice matrice. E una matrice