Dispensa MatLab 1

42
APPUNTI DI MATLAB Area di Geodesia e Geomatica Sapienza Università di Roma ING. MARCO CORSETTI

description

Dispense di Matlab (1a parte).

Transcript of Dispensa MatLab 1

Page 1: Dispensa MatLab 1

APPUNTI DI MATLAB

Area di Geodesia e Geomatica

Sapienza Università di Roma

ING. MARCO CORSETTI

Page 2: Dispensa MatLab 1

Area di Geodesia e Geomatica

Sapienza Università di Roma

CONTENUTI

Page 3: Dispensa MatLab 1

Cos’è MATLAB?

MATLAB (Matrix Laboratory) è un ambiente di calcolo sviluppato alla fine

degli anni '70.

E’ utilizzabile per le seguenti applicazioni:

• matematica e calcolo numerico

• analisi dati e visualizzazione

• programmazione di alto livello

• modellistica e simulazione

Area di Geodesia e Geomatica

Sapienza Università di Roma

INTRODUZIONE

Page 4: Dispensa MatLab 1

Interfaccia

Dopo aver lanciato MATLAB…

Command Window: è la finestra nella quale digitare i comandi e

visualizzare a video in tempo reale i risultati

Workspace: è lo spazio di lavoro contenente le variabili dichiarate

Current Directory: elenca i file contenuti nella directory corrente

Command Hystory: elenca tutti i comandi digitati di recente

Area di Geodesia e Geomatica

Sapienza Università di Roma

INTRODUZIONE

Page 5: Dispensa MatLab 1

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 6: Dispensa MatLab 1

Area di Geodesia e Geomatica

Sapienza Università di Roma

INTRODUZIONE

Configurare la path

Molto importante!

Creare una directory dove salvare i propri file

Impostare la path uguale alla directory creata

Page 7: Dispensa MatLab 1

MATLAB come calcolatrice

• Operatori aritmetici +, -, *, /, ^,

• Caratteri speciali ;, %, :

• Variabili predefinite i, pi, NaN, Inf

– 2/0 -> Inf

– 0/0 -> NaN (Not-a-Number)

• Funzioni elementari sin, cos, log, exp

• Comandi speciali help, clear

help sqrt

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 8: Dispensa MatLab 1

E possibile modificare il numero di cifre decimali ed il formato con cui vengono

visualizzati i risultati attraverso il comando format. Alcune delle opzioni possibili sono:

MATLAB come calcolatrice

Format

Sintassi Rappresentazione

format Default; virgola fissa scalata con 5 cifre

format short Virgola fissa scalata con 5 cifre

format long Virgola fissa scalata con 15 cifre

format short e Forma esponenziale con cinque cifre di mantissa

format long e Forma esponenziale con 15 cifre di mantissa

format short g Rappresentazione migliore con 5 cifre

format long g Rappresentazione migliore con 15 cifre

Page 9: Dispensa MatLab 1

Area di Geodesia e Geomatica

Sapienza Università di Roma

ASSEGNAZIONE DI UNO SCALARE

Page 10: Dispensa MatLab 1

OPERAZIONI SU SCALARI

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 11: Dispensa MatLab 1

FUNZIONI MATEMATICHE PREDEFINITE IN MATLAB

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 12: Dispensa MatLab 1

Premesso che MATLAB considera gli scalari come matrici 1x1, le matrici si

assegnano nel seguente modo:

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

2 righe 4 colonne

“ ; ” per cambiare riga, “ , ” per cambiare colonna

MATRICI

Assegnazione di un vettore riga:

>> vr = [1 2 3 4]

vr =

1 2 3 4

Assegnazione di un vettore colonna:

>> vc = [1; 2; 3; 4]

vc =

1

2

3

4

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 13: Dispensa MatLab 1

Dimensione matrici:

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

>> size(A)

ans =

2 4

>> v = [1 2 3];

>>length (v)

ans =

3

MATRICI

Operazioni su matrici:

>> det(A) determinante

>> A’ trasposta

>>inv(A) inversa

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 14: Dispensa MatLab 1

Definite due matrici A e B

>> A = [1 3 5; 10 0 1];

>> B = [3 2 2; 1 22 5];

Area di Geodesia e Geomatica

Sapienza Università di Roma

>> A+B

ans =

4 5 7

11 22 6

SOMMA

>> A-B

ans =

-2 1 3

9 -22 -4

DIFFERENZA

MATRICI: SOMMA E SOTTRAZIONE

Page 15: Dispensa MatLab 1

Moltiplicazione di uno scalare per

una matrice

>> a=2;

>> A*2

ans =

2 6 10

20 0 2

Prodotto scalare tra due matrici

>> A.*B

ans =

3 6 10

10 0 5

Prodotto matriciale

>> A*B’

ans =

19 9 2

32 1 5

MATRICI: MOLTIPLICAZIONE

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 16: Dispensa MatLab 1

Definire la matrice dei coefficienti ed il vettore dei termini noti per il seguente

sistema di equazioni e trovarne la soluzione:

MATRICI: ESERCIZIO 1

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 17: Dispensa MatLab 1

Il comando :

• Importante per la manipolazione delle matrici

• Esempi

– generazione di vettori che siano delle progressione

aritmetiche di passo costante

• a = [1:10] o a = 1:10

• b = 1: .2 : 4

• c = 3:0 -> non produce niente!!!!

• c = 3: -1: 1

– mediante : si possono estrarre righe e colonne

Area di Geodesia e

Geomatica Sapienza

Università di Roma

Page 18: Dispensa MatLab 1

• Costruire il vettore

– v = [1,2,…,19,20,20,19,…,2,1]

• Costruire la matrice A avente come colonne i 3 vettori

– v1 = [1,2,…,9]

– v2 = [2,4,…,18]

– v3 = [9,8,…,1]

MATRICI: ESERCIZIO 2

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 19: Dispensa MatLab 1

Individuare\modificare elementi

32

021

303

RB

B(2,3)

B(2,3) = 1;

B

per selezionare un elemento

per modificare l’elemento

per visualizzare B

Area di Geodesia e

Geomatica Sapienza

Università di Roma

Page 20: Dispensa MatLab 1

Estrarre sottomatrici

estrarre la riga R2

32

021

303

RB

B(2,:)

B(:,2:3)

estrarre la colonna C2

B(:,2)

sottomatrice 2 x 2

B(:,[1 3])

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 21: Dispensa MatLab 1

Identità-zero-uno

identità di ordine n -> eye(n)

eye(3)

100

010

001

I

matrice nulla m x n ->

000

000Z

zeros(m,n)

zeros(2,3)

matrice m x n di 1 ->

111

111Z

ones(m,n)

ones(2,3)

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 22: Dispensa MatLab 1

• Costruire le matrici A e B

• Estrarre da A 2 sottomatrici:

– una costituita dalle ultime 3 colonne

– una costituita dalla I e III riga e dalle colonne II e IV

111111

300

000

000

100

010

001

80138

901183

401212

101241

2

BA

MATRICI: ESERCIZIO 3

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 23: Dispensa MatLab 1

Selezione: istruzione “if”

Controlla l'esecuzione di un determinato blocco di codice a seconda del valore (vero o falso)

assunto da una certa espressione logica.

if (condizione1)

istruzione1

elseif (condizione2)

istruzione2

elseif (condizione3)

istruzione3

else

istruzione4

end

>>a = 5;

>>b = 7;

>>if (a - b) > 0

disp('La differenza è ...

maggiore di 0')

else

disp('La differenza è ...

minore di 0')

end

Strutture di controllo

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 24: Dispensa MatLab 1

Salvare in un M-file di nome radice.m la procedura per il calcolo delle radici

di un’equazione di secondo grado del tipo ax2 + bx + c = 0 considerando il

caso della radice negativa quindi usando il comando if (sqrt è la funzione

radice quadrata) (testarla con i valori a = 2, b = 1, c = 2).

ISTRUZIONE if: ESERCIZIO 4

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 25: Dispensa MatLab 1

Iterazione: istruzione “for” e istruzione “while”

Consente di eseguire un insieme di istruzioni fino a quando non si verifica una data

condizione.

for contatore=inizio:passo:fine

Istruzione1

Istruzione 2

end

while condizione

Istruzione 1

Istruzione 2

end

>> for i=1:10:100

a = i;

end

>>a=0;

>>i=1;

>> while i<10

a =a+ i;

i=i+1;

end

Strutture di controllo

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 26: Dispensa MatLab 1

Un array x contiene i valori di una serie di misurazioni. I valori compresi nell’intervallo

-0.1 < x < 0.1 devono essere considerati errati. Sviluppare un programma che elimina tutti

questi elementi e li sostituisca con tanti zeri alla fine dell’array.

misurazioni

x (1) 1.92

x (2) 0.05

x (3) -2.43

x (4) -0.02

x (5) 0.09

x (6) 0.85

x (7) -0.06

CICLO for: ESERCIZIO 5

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 27: Dispensa MatLab 1

Scrivere uno script per rappresentare in un diagramma la seguente funzione per:

-5 x 30

CICLO for: ESERCIZIO 6

Y=

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 28: Dispensa MatLab 1

Matlab ha molteplici funzioni per le rappresentazioni grafiche!

Oggi ne vediamo alcune.

Per ulteriori informazioni:

help graph2d

help graph3d

Grafici in Matlab

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 29: Dispensa MatLab 1

Come creare un grafico in Matlab?

1. generare i dati

2. scegliere la finestra

3. tracciare il grafico

4. fissare gli assi, la griglia, ecc.

5. inserire le etichette degli assi, il titolo, la legenda

La Grafica in Matlab

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 30: Dispensa MatLab 1

I grafici vengono visualizzati in figure

Il comando di base per la grafica è plot(y) –

visualizza gli elementi del vettore y rispetto agli indici del vettore stesso plot(x,y) – visualizza

il vettore y vs. il vettore x

E’ possibile modificare in modo interattivo l’aspetto dei grafici mediante il:

Plot Editing Mode

mediante riga di comando

La Grafica in Matlab

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 31: Dispensa MatLab 1

Per visualizzare una qualsiasi funzione y=f(x) in Matlab, è SEMPRE necessario

creare i vettori x e y nel dominio di interesse:

(N.b. Matlab è un programma per l’analisi numerica, non simbolica!)

% un oscillatore armonico

t=[0:pi/100:2*pi];

x=cos(t);

y=sin(t);

1. Generare i dati

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 32: Dispensa MatLab 1

figure(n) specifica su quale figura lavorare

figure(1)

plot(t,x)

% per disegnare entrambe le funzioni

plot(t,x,t,y)

subplot permette di suddividere la finestra in più grafici, per visualizzare

contemporaneamente diversi segnali

figure(1)

subplot(211),…

subplot(212),…

2. Scegliere la finestra

E’ possibile spezzare la finestra grafica corrente in una matrice [mxn] di sottofinestre grafiche. Il

comando subplot(m,n,k) divide la finestra corrente (ne crea una se non esistono finestre

grafiche) in una matrice [mxn] e fa diventare la k-esima, contata seguendo le righe, la finestra

corrente.

x=0:.1:2*pi;

subplot(2,2,1)

plot(x,sin(x))

subplot(2,2,2)

plot(x,cos(x))

subplot(2,2,3)

plot(x,sin(2*x))

subplot(2,2,4)

plot(x,cos(2*x))

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 33: Dispensa MatLab 1

L'istruzione subplot permette di plottare più grafici contemporaneamente nella stessa figure.

• subplot(m,n,k)

m=righe, n=colonne

k=posizione corrente (per righe)

Esempio: subplot(2,3,1) invia le seguenti istruzioni grafiche (plot etc) nel riquadro in giallo.

subplot

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 34: Dispensa MatLab 1

X=0:0.5:50;

Y1=5*X.^2;Y2=X.^3; Y3=exp(X);Y4=sin(X);

subplot(2,2,1), plot(X,Y1), title('5*X.^2'), ...

ylabel('y'), grid

subplot(2,2,2), plot(X,Y2), title('x^3'), ...

ylabel('y'), grid

subplot(2,2,3), plot(X,Y3), title('exp(x)'), ...

ylabel('y'), grid

subplot(2,2,4), plot(X,Y4), title('sin(x)'), ...

ylabel('y'), grid

0 20 40 600

5000

10000

15000

5*X.2

y

0 20 40 600

5

10

15x 10

4 x3

y

0 20 40 600

2

4

6x 10

21 exp(x)

y

0 20 40 60-1

-0.5

0

0.5

1

sin(x)

y

subplot

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 35: Dispensa MatLab 1

Esistono diversi comandi per rappresentare i dati:

plot grafico 2D con scala lineare lungo entrambi gli assi

loglog grafico con scale logaritmiche per entrambi gli assi

semilogx grafico con scala logaritmica per l’asse x e lineare per l’asse y

semilogy grafico con scala logaritmica per l’asse y e lineare per l’asse x

La struttura dei comandi è plot(x1,y1,x2,y2,…)

E’ possibile specificare il colore e il tipo di linea dei grafici (vedi help plot)

3. Tracciare il grafico

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 36: Dispensa MatLab 1

axis ( [XMIN XMAX YMIN YMAX] )

imposta la scala degli assi

grid on / grid off

abilita e disabilita la griglia

title

inserisce il titolo

xlabel, ylabel

inserisce le etichette negli assi, p.e. per specificare le unità di misura

legend

inserisce la legenda

4. Fissare gli assi e la griglia

5. Inserire le etichette, il titolo, la legenda

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 37: Dispensa MatLab 1

La sintassi di plot nel caso in cui si vogliano utilizzare simboli, colori o tipi diversi di

linee è la seguente:

plot (x,y, ‘stile’)

Linee Simboli Colori

Linea continua - Punto . Rosso r

Linea tratteggiata -- Più + Verde g

Linea punteggiata : Cerchio o stella * Blu b

Linea tratto punto -. Croce x Bianco w

Quadrato s Magenta m

Plot(x,y,’-r’,’LineWidth’,5)

Proprietà e valori

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 38: Dispensa MatLab 1

• Disegnare e trovare il max della funzione

nell’intervallo [-2,2]

)cos()(2

xexf x

PLOT: ESERCIZIO 7

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 39: Dispensa MatLab 1

Si supponga di voler tracciare il grafico della funzione z = f(x, y). Si consideri la funzione:

z = e−(x+y)/2 · sin(3x) · sin(3y)

nell’intervallo: x = [0, 5], y = [0, 5]

Si può procedere nel seguente modo:

GRAFICI TRIDIMENSIONALI 1/4

Primo passo

Si determinano i vettori di punti degli assi x e y

x = linspace(0,5,50);

y = linspace(0,5,50);

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 40: Dispensa MatLab 1

GRAFICI TRIDIMENSIONALI 2/4

Terzo passo

Si può ora definire la funzione:

Z = exp(-(X+Y)/2).*sin(3*X).*sin(3*Y);

Secondo passo

A partire dai vettori x e y, si determinano, col comando meshgrid, due matrici X ed Y.

X ha tante righe quanti sono gli elementi di y ed ogni riga è uguale al vettore x.

Y ha tante righe quanti sono gli elementi di x ed ogni riga è uguale al vettore y.

[X,Y]= meshgrid(x,y);

Area di Geodesia e Geomatica

Sapienza Università di Roma

Page 41: Dispensa MatLab 1

GRAFICI TRIDIMENSIONALI 3/4

Area di Geodesia e Geomatica

Sapienza Università di Roma

Quarto passo

A questo punto è possibile tracciare il grafico della funzione utilizzando diverse

metodologie:

Tracciare delle curve di livello con il comando:

contour ( X , Y , Z );

disegnare la curva con linee:

mesh ( X , Y , Z );

disegnare la figura con facce :

surf ( X , Y , Z );

Page 42: Dispensa MatLab 1

figure(1)

x = linspace(0, 5, 50);

y = linspace(0, 5, 50);

[X,Y] = meshgrid(x, y);

Z = exp(−(X + Y)/2). ∗ sin(3 ∗ X). ∗ sin(3 ∗ Y);

surf(X,Y, Z);

GRAFICI TRIDIMENSIONALI 4/4

Area di Geodesia e Geomatica

Sapienza Università di Roma