Creazione di matrici
Delimititatore di riga
Delimititatore di matrice
>> A = [1 2 3; 4 5 6; 7 8 9];
>> A = [...
1 2 3
4 5 6
7 8 9 ];
Entrambi i comandi creano la stessa matrice 3x3
DEI - Univ. Padova (Italia)
Accedere agli elementi delle matrici: coordinate
>> A = [...
1 2 3
4 5 6
7 8 9 ];
Per accedere ad elementi di una matrice
si usano le parentesi tonde
>> A(2,1)
Un elemento è identificato dalla sua
posizione (riga,colonna),
ans =
4
>> A(2)
ans =
4
DEI - Univ. Padova (Italia)
oppure dal suo indice, contando gli
elementi della matrice per colonna
Accedere agli elementi delle matrici: indici
Una matrice può essere vista come una sequenza di
elementi in memoria che Matlab dispone in righe e colonne.
>> A = [...
1 2 3
4 5 6
7 8 9 ];
Colonna
Riga
1
2
3
DEI - Univ. Padova (Italia)
Ma è possibile anche accedere ad un elemento
conoscendone la posizione (l’indice) nella sequenza in
memoria
In matrice
1
2
3
1
4
7
2
5
8
3
6
9
In sequenza
Indice
1
2
3
4
5
6
7
8
9
1
4
7
2
5
8
3
6
9
Accedere agli elementi delle matrici: indici
>> A = [...
1 2 3
4 5 6
7 8 9 ];
>> A(1,3)
ans=
3
>> A(7)
ans=
3
DEI - Univ. Padova (Italia)
Per accedere all’elemento 3:
1) posso utilizzare le
coordinate riga-colonna,
2) Oppure posso utilizzare il
suo indice sequenziale
Sottomatrici
Per accedere ad un elemento:
>>x=A(3,4) assegnera’ 12 a x
>>A =[
1
5
9
Per accedere ad un’intera riga,
>>A(2,:) restituira’ [5 6 7 8]
2
6
10
3
7
11
4
8
12];
Per accedere ad un’intera colonna,
>>A(:,3) restituira’ [3
7
11]
Per accedere ad una sottomatrice, ad
es.la 2X2 in basso a destra
>>A(2:3,3:4) restituira’ [7 8
11 12]
DEI - Univ. Padova (Italia)
Dimensioni delle variabili
Vettori
>>length(X);
Matrici
>>[M,N]=size(X);
>>size(X,1);
>>size(X,2);
DEI - Univ. Padova (Italia)
restituisce la lunghezza del vettore X
o il numero di colonne di X
righe e colonne della matrice X
numero di righe della matrice X
numero di colonne della matrice X
Stringhe
Le stringhe sono sequenze di caratteri.
La stringa èdelimitate dal singolo apice
>> str='Introduzione a Matlab'
str =
Introduzione a Matlab
>>
DEI - Univ. Padova (Italia)
Costruzione di vettori e matrici
Vettori e Matrici con elementi equispaziati
>> x=0:2.5:10
x =
0
>>
DEI - Univ. Padova (Italia)
2.5000
5.0000
7.5000
10.0000
Costruzione di vettori e matrici
L’operatore “ : ” serve per indicare un intervallo di valori.
•
Se non ha estremi come nell’istruzione
>>x(1,:)
vuol dire prendi da x la riga 1, e tutte le colonne
•
Se prima e dopo l’operatore ci sono dei valori come in:
>> 0.5:5
ans =
0.5000
1.5000
2.5000
3.5000
4.5000
vuol dire crea un vettore di numeri che cominci con 0.5, siano spaziati di 1 e
abbia come estremo superiore 5
•
Se tra i due estremi dell’intervallo c’è un valore, esso indica lo spazio tra un
valore e quello successivo:
>> 1.3:0.3:2
ans =
1.3000
1.6000
1.9000
DEI - Univ. Padova (Italia)
Costruzione di vettori e matrici
Conoscendo il numero di elementi necessari N, e gli estremi Min e Max
dell’intervallo che si vuole campionare, si può utilizzare la funzione
linspace(). Per spaziare in scala logaritmica si utilizza logspace()
>> x = linspace(Min, Max, N)
>> x = logspace(Min, Max, N)
DEI - Univ. Padova (Italia)
Costruzione di vettori e matrici
>>x=linspace(1,5,10)
x =
1.00
>>
1.44
1.88
2.33
2.77
3.22
3.67
4.11
4.56
>>x=logspace(1,2,5)
x =
10.0000
>>
DEI - Univ. Padova (Italia)
17.7828
31.6228
56.2341
100.0000
5.00
Operatori logici
Gli operatori logici più comuni sono:
& : and logico
| : or logico
~ : not logico
>> a=[0,1,0,3];
>> b=[1,1,0,3];
>> a | b
ans =
1
0
1
>> a & b
ans =
0
0
1
>> ~b
ans =
0
1
0
DEI - Univ. Padova (Italia)
1
1
0
Operatori relazionali
Gli operatori relazionali più comuni sono:
==
~=
<
<=
>
>=
uguale
diverso da
minore di
minore o uguale
maggiore
maggiore o uguale
>> a=[0,1,2,3];
>> b=[1,1,3,3];
>> a>b
ans =
0
0
>> b>a
ans =
1
0
>>
DEI - Univ. Padova (Italia)
0
0
1
0
Operatori booleani
In generale gli operatori logici e relazionali si chiamano
booleani, perché il risultato della loro applicazione può
avere assumere solo due valori:
- 1 equivalente a VERO
- 0 equivalente a FALSO
ATTENZIONE!
Quando applico operatori booleani a dei vettori o a delle
matrici, l’operatore è applicato ad ogni elemento della
matrice se è unario, e a coppie di elementi corrispondenti
delle matrici se è binario
DEI - Univ. Padova (Italia)
Operatori logici: esempio
Controlla se almeno uno tra gli elementi
corrispondenti di a e b è diverso da 0:
>> a | b
ans =
1
1
0
1
Controlla se entrambi gli elementi corrispondenti
di a e b sono diversi da 0:
>> a=[0,1,0,3];
>> b=[1,1,0,3];
>> a & b
ans =
0
1
0
1
Controlla quale elemento b è non diverso da
zero, cioè uguale a 0:
DEI - Univ. Padova (Italia)
>> ~b
ans =
0
0
1
0
Operatori relazionali: esempio
>> a=[0,1,0,3];
>> b=[1,1,1,3];
DEI - Univ. Padova (Italia)
Controlla quale elemento di a è maggiore
stretto del suo corripondente in b
>> a>b
ans =
0
0
0
0
Controlla quale elemento di b è maggiore stretto
del suo corripondente in a
>> b>a
ans =
1
0
1
0
Ricerca di elementi
Per trovare le coordinate di elementi di una matrice rispondenti a
determinate caratteristiche posso utilizzare la funzione find(), che restituise
l’indice sequenziale degli elementi nel caso si richieda un solo valore in
uscita, e le coordinate riga-colonna nel caso se ne richiedano due:
indice = find(expr);
[riga, colonna] = find (expr);
DEI - Univ. Padova (Italia)
Ricerca di elementi: esempio
>> A=[0,1,0,3; 2,4,6,8]
>>[r,c]=find(A>3)
A =
r =
0
1
2
4
>> n=find(A>3)
0
6
3
8
2
2
2
n =
c =
4
6
8
2
3
4
>>
>>
DEI - Univ. Padova (Italia)
Tipi di m-files: scripts
• Uno script è un file di testo con estensione .m che contiene una
sequenza di istruzioni Matlab. Per eseguire le istruzioni contenute
nello script bisogna scrivere il nome del file (senza l’estensione .m) al
prompt di Matlab. Sono anche chiamati M-files
• Sono utili per automatizzare dei blocchi di istruzioni Matlab che si
devono eseguire ripetitivamente dal prompt dei comandi.
Possono operare su variabili e dati presenti nello spazio di lavoro, e
crearne di nuovi.
• Qualsiasi variabile creata nello script rimane nel workspace, ed ogni
modifica a variabili nel workspace rimane alla fine dello script
DEI - Univ. Padova (Italia)
Tipi di m-files: funzioni
• Una funzione di Matlab è anch’essa un file di testo con estensione .m
che contiene una sequenza di istruzioni Matlab. Si differenzia da uno
script in quanto il suo scopo principale è quello di produrre uno o più
valori a partire da determinati dati di ingresso (cosa che stabilisce
un'analogia con l'omonimo concetto della matematica),
• Sono utili per automatizzare dei blocchi di istruzioni Matlab che si
devono eseguire ripetitivamente dal prompt dei comandi.
Possono operare solo sui dati forniti come ingresso alla funzione e
sulle variabili locali create all’interno della funzione
• Qualsiasi variabile creata nella funzione, ad eccezione di quelle
esplicitamente restituite, sono eliminate con il termine della funzione
(località delle variabili)
DEI - Univ. Padova (Italia)
Tipi di m-files: funzioni
• Un m-file che contiene una funzione deve avere come prima istruzione la
dichiarazione della funzione:
function [out1, out2, ...] = nomefunzione(in1, in2, ...)
• Seguono poi le istruzioni che possono agire solo su
– variabili create all’interno della funzione
– Parametri di ingresso in1, in2, …
• Devono essere create le variabili di uscita out1, out2 , …
• Il nome dell’m-file deve essere uguale al nome della funzione nomefunzione
DEI - Univ. Padova (Italia)
Funzioni esempio:
File miestat.m
% Creo una funzione che calcola
% media e deviazione standard
% di un vettore vect
function
[ m, s ] = miestat(vect);
% Calcolo la media
m = sum(vect)/length(vect);
% Calcolo la dev. standard
var = sum((vect-m).^2)/(length(vect)-1);
s=sqrt(var);
return
DEI - Univ. Padova (Italia)
Funzioni esempio:
I commenti cominciano con %
E’ parte di codice che non
viene interpretato come
istrizioni, e non è eseguito
% Creo una funzione che calcola
% media e deviazione standard
% di un vettore vect
function
[ m, s ] = miestat(vect);
…
Argomenti di ingresso
alla funzione.
Sono gli unici dati
presenti all’esterno
del codice della
funzione utilizzabili e
conosciuti anche
all’interno
return
Nome identificativo della funzione
Indica la fine
della funzione
DEI - Univ. Padova (Italia)
Indica che si
sta definendo
una funzione
Valori di uscita della funzione.
Sono le uniche variabili definite all’interno
della funzione che saranno disponibili una
volta terminata la funzione
Utilizzare una funzione
Al prompt dei comandi
>> x=[1,2,3,4,8,6];
>> [media, stdev]=miestat(x);
>> media
media=
4
>> stdev
stdev =
2.6077
>>
DEI - Univ. Padova (Italia)
Utilizzare una funzione
ATTENZIONE!
Se si assegnano all’uscita di una funzione meno variabili di quelle che
potrebbe restituire, quelle non assegnate saranno perdute.
Ad esempio se utilizzando la funzione miestat assegnassi una sola
variabile alla sua uscita, avrei:
>> x=[1,2,3,4,8,6];
>> media=miestat(x);
>> media
media=
4
>>
DEI - Univ. Padova (Italia)
Ordinamento: selection-sort
1) Seleziona l’elemento più piccolo nell’array
2) Scambia l’elemento selezionato con il
primo
3) Ordina la parte restante dell’ array, cioè
riduco la parte di array da considerare,
escludendo le prime posizioni già ordinate
DEI - Univ. Padova (Italia)
Ordinamento: selection-sort
Passo 1a: trovo il minimo dell’array.
prova[0]
prova[1]
prova[2]
prova[3]
prova[4]
14
87
1
27
22
minimo
Passo 1b: scambio il minimo con il primo elemento.
DEI - Univ. Padova (Italia)
prova[0]
prova[1]
prova[2]
prova[3]
prova[4]
14
87
1
22
27
Ordinamento: selection-sort
Passo 2: riduco l’array da considerare per l’ordinamento e ripeto il passo 1
prova[0]
prova[1]
prova[2]
prova[3]
prova[4]
1
87
14
27
22
prova[0]
prova[1]
prova[2]
prova[3]
prova[4]
1
87
14
27
22
Parte ordinata
DEI - Univ. Padova (Italia)
Ordinamento: selection-sort
Passo 2: riduco l’array da considerare per l’ordinamento e ripeto il passo 1
prova[0]
prova[1]
prova[2]
prova[3]
prova[4]
1
14
87
27
22
prova[0]
prova[1]
prova[2]
prova[3]
prova[4]
1
14
87
27
22
Parte ordinata
DEI - Univ. Padova (Italia)
Selection sort in Matlab
function yout=SelectionSort(xin);
function [val,pos]=findmin(xin,ind)
yout=xin;
n=length(yout);
for ct=1:n-1,
[val,pos]=findmin(yout,ct);
yout(pos)=yout(ct);
yout(ct)=val;
end;
pos=ind;
val=xin(ind);
for ct=ind:length(xin),
if(xin(ct)<val),
val=xin(ct);
pos=ct;
end;
end;
return;
return;
DEI - Univ. Padova (Italia)
Scarica

Lezione07