Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione...

Post on 18-Feb-2019

220 views 0 download

Transcript of Creazione di matrici - dei.unipd.itenrigri/Corsi/InformaticaAstro_0708/Lezione07.pdf · Costruzione...

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

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

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

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

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]

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

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

>>

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

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

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

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

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

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

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

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

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

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

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

>>

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

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)

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

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

return

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

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

>>

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:

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

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.

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

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

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;