creazione di matrici - dei.unipd.itenrigri/corsi/informaticaastro_0708/lezione07.pdf · costruzione...

30
DEI - Univ. Padova (Italia) Creazione di matrici >> A = [1 2 3; 4 5 6; 7 8 9]; Delimititatore di matrice Delimititatore di riga >> A = [... 1 2 3 4 5 6 7 8 9 ]; Entrambi i comandi creano la stessa matrice 3x3

Upload: vuongphuc

Post on 18-Feb-2019

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Creazione di matrici

>> A = [1 2 3; 4 5 6; 7 8 9];

Delimititatore di matriceDelimititatore di riga

>> A = [...1 2 34 5 67 8 9 ];

Entrambi i comandi creano la stessa matrice 3x3

Page 2: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Accedere agli elementi delle matrici: coordinate

>> A = [...1 2 34 5 67 8 9 ];

>> A(2,1)

ans =

4

>> A(2)

ans =

4

Per accedere ad elementi di una matricesi usano le parentesi tonde

Un elemento è identificato dalla sua posizione (riga,colonna),

oppure dal suo indice, contando gli elementi della matrice per colonna

Page 3: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Accedere agli elementi delle matrici: indici

1 2 34 5 67 8 9

>> A = [...1 2 34 5 67 8 9 ];

Una matrice può essere vista come una sequenza di elementi in memoria che Matlab dispone in righe e colonne.

Ma è possibile anche accedere ad un elemento conoscendone la posizione (l’indice) nella sequenza in memoria

In matrice

1 4 7 2 5 8 3 6 9

In sequenzaColonna 1 2 3Riga1

2

3

Indice 1 2 3 4 5 6 7 8 9

Page 4: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Accedere agli elementi delle matrici: indici

>> A = [...1 2 34 5 67 8 9 ];

>> A(1,3)

ans=3

>> A(7)

ans=3

Per accedere all’elemento 3:

1) posso utilizzare le coordinate riga-colonna,

2) Oppure posso utilizzare il suo indice sequenziale

Page 5: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Sottomatrici

>>A =[1 2 3 45 6 7 89 10 11 12];

Per accedere ad un elemento:>>x=A(3,4) assegnera’ 12 a x

Per accedere ad un’intera riga,>>A(2,:) restituira’ [5 6 7 8]

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]

Page 6: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Dimensioni delle variabili

Vettori>>length(X); restituisce la lunghezza del vettore X

o il numero di colonne di X

Matrici>>[M,N]=size(X); righe e colonne della matrice X>>size(X,1); numero di righe della matrice X>>size(X,2); numero di colonne della matrice X

Page 7: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Stringhe

Le stringhe sono sequenze di caratteri.La stringa èdelimitate dal singolo apice

>> str='Introduzione a Matlab'

str =

Introduzione a Matlab

>>

Page 8: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Costruzione di vettori e matrici

>> x=0:2.5:10x =

0 2.5000 5.0000 7.5000 10.0000>>

Vettori e Matrici con elementi equispaziati

Page 9: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Costruzione di vettori e matrici

L’operatore “ : ” serve per indicare un intervallo di valori.

1) Se non ha estremi come nell’istruzione >>x(1,:)vuol dire prendi da x la riga 1, e tutte le colonne

2) Se prima e dopo l’operatore ci sono dei valori come in:>> 0.5:5ans =

0.5000 1.5000 2.5000 3.5000 4.5000vuol dire crea un vettore di numeri che cominci con 0.5, siano spaziati di 1 e abbia come estremo superiore 5

3) Se tra i due estremi dell’intervallo c’è un valore, esso indica lo spazio tra un valore e quello successivo:>> 1.3:0.3:2ans =

1.3000 1.6000 1.9000

Page 10: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Costruzione di vettori e matrici

>> x = linspace(Min, Max, N)

>> x = logspace(Min, Max, N)

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

Page 11: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

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

>>x=logspace(1,2,5)

x =

10.0000 17.7828 31.6228 56.2341 100.0000>>

Page 12: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Operatori logici

Gli operatori logici più comuni sono:

& : and logico| : or logico~ : not logico >> a | b

ans =1 1

0 1

>> a & bans =

0 1 0 1

>> ~bans =

0 0 1 0

>> a=[0,1,0,3];>> b=[1,1,0,3];

Page 13: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

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>bans =

0 0 0 0>> b>aans =

1 0 1 0>>

Page 14: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

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 corrispondentidelle matrici se è binario

Page 15: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Operatori logici: esempio

>> a=[0,1,0,3];>> b=[1,1,0,3];

Controlla se almeno uno tra gli elementicorrispondenti di a e b è diverso da 0:>> a | bans =

1 1 0 1

Controlla se entrambi gli elementi corrispondentidi a e b sono diversi da 0:

>> a & bans =

0 1 0 1

Controlla quale elemento b è non diverso dazero, cioè uguale a 0:

>> ~bans =

0 0 1 0

Page 16: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Operatori relazionali: esempio

>> a=[0,1,0,3];>> b=[1,1,1,3];

Controlla quale elemento di a è maggiorestretto del suo corripondente in b >> a>bans =

0 0 0 0

Controlla quale elemento di b è maggiore strettodel suo corripondente in a>> b>aans =

1 0 1 0

Page 17: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Ricerca di elementi

Per trovare le coordinate di elementi di una matrice rispondenti a determinate caratteristiche posso utilizzare la funzione find(), che restituisel’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);

Page 18: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Ricerca di elementi: esempio

>> A=[0,1,0,3; 2,4,6,8]

A =

0 1 0 32 4 6 8

>> n=find(A>3)

n =

468

>>

>>[r,c]=find(A>3)

r =

222

c =

234

>>

Page 19: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Tipi di m-files: scripts

• Uno script è un file di testo con estensione .m che contiene unasequenza di istruzioni Matlab. Per eseguire le istruzioni contenutenello 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 sidevono 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 ognimodifica a variabili nel workspace rimane alla fine dello script

Page 20: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

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 unoscript 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 sidevono eseguire ripetitivamente dal prompt dei comandi.Possono operare solo sui dati forniti come ingresso alla funzione e sulle variabili variabili create all’interno della funzione

• Qualsiasi variabile creata nella funzione, ad eccezione di quelleesplicitamente restituite, sono eliminate con il termine della funzione(località delle variabili)

Page 21: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

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

Page 22: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

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 mediam = sum(vect)/length(vect);

% Calcolo la dev. standardvar = sum((vect-m).^2)/(length(vect)-1);s=sqrt(var);

return

Page 23: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Funzioni esempio:

% Creo una funzione che calcola% media e deviazione standard% di un vettore vect

function [ m, s ] = miestat(vect);

return

I commenti cominciano con %E’ parte di codice che non viene interpretato come istrizioni, e non è eseguito

Indica che si sta definendo una funzione

Indica la fine della funzione

Argomenti di ingresso alla funzione.Sono gli unici dati presenti all’esterno del codice della funzione utilizzabili e conosciuti anche all’interno

Valori di uscita della funzione.Sono le uniche variabili definite all’interno della funzione che saranno disponibili una volta terminata la funzione

Nome identificativo della funzione

Page 24: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

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

>>

Page 25: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Utilizzare una funzione

>> x=[1,2,3,4,8,6];>> media=miestat(x);>> media

media=

4>>

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:

Page 26: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Ordinamento: selection-sort

1) Seleziona l’elemento più piccolo nell’array2) Scambia l’elemento selezionato con il

primo3) Ordina la parte restante dell’ array, cioè

riduco la parte di array da considerare, escludendo le prime posizioni già ordinate

Page 27: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Ordinamento: selection-sort

27

prova[0]

1 228714

prova[1] prova[2] prova[3] prova[4]

Passo 1a: trovo il minimo dell’array.

22

prova[0]

1 278714

prova[1] prova[2] prova[3] prova[4]

minimo

Passo 1b: scambio il minimo con il primo elemento.

Page 28: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Ordinamento: selection-sort

27

prova[0]

14 22871

prova[1] prova[2] prova[3] prova[4]

Passo 2: riduco l’array da considerare per l’ordinamento e ripeto il passo 1

27

prova[0]

14 22871

prova[1] prova[2] prova[3] prova[4]

Parte ordinata

Page 29: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Ordinamento: selection-sort

27

prova[0]

87 22141

prova[1] prova[2] prova[3] prova[4]

Passo 2: riduco l’array da considerare per l’ordinamento e ripeto il passo 1

27

prova[0]

87 22141

prova[1] prova[2] prova[3] prova[4]

Parte ordinata

Page 30: Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione di vettori e matrici L’operatore “ : ” serve per indicare un intervallo di

DEI - Univ. Padova (Italia)

Selection sort in Matlab

function yout=SelectionSort(xin);

yout=xin;n=length(yout);

for ct=1:n-1,[val,pos]=findmin(yout,ct);yout(pos)=yout(ct);yout(ct)=val;

end;

return;

function [val,pos]=findmin(xin,ind)

pos=ind;val=xin(ind);for ct=ind:length(xin),

if(xin(ct)<val),val=xin(ct);pos=ct;

end;end;

return;