Sei sulla pagina 1di 45

Politecnico di Torino

MATLAB
PER LA
GEOMATICA
Prof. Ambrogio M. Manzino
(ambrogio.manzino@polito.it)

A cura di:
Ing. Mattia De Agostino
(mattia.deagostino@polito.it)

Indice della presentazione


Il programma MATLAB
Lambiente di lavoro
File e Operatori
Matrici
Istruzioni IF, FOR, WHILE, SWITCH
Definizione di nuove funzioni
MATLAB e TOPOGRAFIA
Gli angoli
Grandezze angolari
Grafici

Il programma MATLAB

LAMBIENTE DI LAVORO (I)

MATLAB lacronimo di MATrix LABoratory.


nato principalmente come programma destinato alla
gestione di matrici. Le versioni successive sono state
completate con serie di funzioni che permettono le pi
complesse analisi numeriche.
Allo stato attuale, il programma consente di effettuare conti
con un numero infinito di dati (al contrario di Microsoft Excel,
il cui foglio di lavoro limitato a 65536 righe) e per problemi
di tipo:
Algebrico (monomi, polinomi, funzioni definite dallutente)
Statistico (regressioni, minimi quadrati)
Numerico (derivazione, integrazione, calcolo differenziale)
Matriciale (prodotti tra vettori)

Il programma MATLAB

LAMBIENTE DI LAVORO (II)

La linea di comando di MATLAB indicata da un simbolo di


attesa (prompt), come in DOS:
>>

Accetta dichiarazioni di variabili, espressioni e chiamate a


tutte le funzioni disponibili nel programma.
Tutte le funzioni di MATLAB non sono altro che files di testo,
simili a quelli che lutente pu generare con un text editor, e
vengono eseguite semplicemente digitandone il nome sulla
linea di comando.
MATLAB permette inoltre di richiamare le ultime righe di
comandi inseriti usando le frecce in alto e in basso.

Il programma MATLAB

LAMBIENTE DI LAVORO (III)

MATLAB presenta un help in linea con informazioni sulla


sintassi di tutte le funzioni disponibili. Per accedere a queste
informazioni, basta digitare:
>> help nome_funzione

anche possibile avere un help di tutte le funzioni di una


certa categoria; ad esempio per sapere quali sono le funzioni
specifiche per lanalisi matriciale, basta digitare:
>> help elmat

Per sapere quali sono le varie categorie di funzioni disponibili


(i cosiddetti toolbox), basta digitare:
>> help
>> helpwin

(modalit HTML)

Il programma MATLAB

FILES E PUNTEGGIATURA (I)

I file interpretati dal programma sono file di testo (ASCII) con


estensione .m e sono eseguibili nellambiente MATLAB
semplicemente digitandone il nome (senza estensione!) sulla
linea di comando.
Al loro interno, possibile inserire commenti precedendoli
dal simbolo percento (%).
Le istruzioni (siano esse contenute in un file *.m, oppure
digitate direttamente dalla linea di comando) vanno sempre
terminate con un punto e virgola (;), altrimenti viene
visualizzato il risultato dellistruzione.
Es.

var1 = 2+3;
var1 = 2+3

Il programma MATLAB

FILES E PUNTEGGIATURA (II)

MATLAB case-sensitive (ovvero, distingue MAIUSCOLE da


minuscole), e accetta nomi di variabili lunghi fino ad un
massimo di 19 caratteri alfanumerici, con il primo
obbligatoriamente alfabetico.
Per visualizzare il contenuto di una variabile sufficiente
digitarne il nome senza punto e virgola sulla linea di
comando.
Il risultato dellultima operazione memorizzato nella
variabile ans (abbreviazione di ANSwer).

Il programma MATLAB

FILES E PUNTEGGIATURA (III)

Tutti i calcoli effettuati in MATLAB sono eseguiti in doppia


precisione, ma si possono visualizzare in un formato diverso
usando i comandi:
format
format
format
format
format
format

short
long
short e
long e
short g
long g

Virgola fissa con 4 decimali


Virgola fissa con 15 decimali
Notazione scientifica 4 decimali
Notazione scientifica 15 decimali
Notazione intera 4 decimali
Notazione intera 15 decimali

Es. Provare a visualizzare il numero (= 3.1415926) nei vari


formati

Il programma MATLAB

COMANDI DI USO GENERALE (I)

who: elenco delle variabili definite in memoria


whos: informazioni su tutte le variabili in memoria
clear: cancella tutte le variabili in memoria o una in
particolare se specificata
save: salva tutte le variabili in memoria sul file specificato, in
vari formati
load: richiama in memoria le variabili salvate sul file
specificato

what: elenco di tutte le funzioni MATLAB nellarea di lavoro


(estensione .m) e dei file di dati che sono stati salvati
(estensione .mat)

Il programma MATLAB

COMANDI DI USO GENERALE (II)

Il testo in MATLAB viene inserito sempre tra apici:


Es.: string='Ciao'
Per visualizzare stringhe o messaggi si adopera il comando
disp.
Es.: disp('Premere un tasto')
disp(string)
La funzione error mostra un messaggio di errore ed
interrompe l'esecuzione di un file *.m
Es.: error('A deve essere simmetrica');
La funzione input mostra un messaggio e permette
l'inserimento di dati.
Es.: num=input('Inserire un numero: ');

Il programma MATLAB

OPERATORI (I)

Gli operatori di maggior utilizzo sono:

Scalari:

Trigonometrici:

sin cos tan asin acos atan atan2

Logaritmici:

exp

Booleani:

&& (AND) || (OR)

Logici:

==

>=

Varie:

abs

sqrt

log

log10

<=

(NOT)

sign

Il programma MATLAB

OPERATORI (II)

Lunit complessa predefinita tramite i o j, quindi


preferibile NON usare i o j come variabili, o come indici nei
cicli!
Un numero complesso si scrive nella forma a+j*b
Es:

z=2+j*3

Operatori applicabili a numeri complessi:


abs
: modulo, es. abs(z)
angle : fase, es. angle(z)
real : parte reale, es. real(z)
imag : parte immaginaria, es. imag(z)

Il programma MATLAB

MATRICI (I)

L'inserimento di un vettore o di una matrice in generale viene


effettuato tra parentesi quadre, separando:
gli elementi delle righe con spazi o virgole
le diverse righe con punti e virgola
(oppure andando a capo)

Es. vettore riga:

x = [1, 2, 3];

Es. di vettore colonna:

y = [1; 4; 7];

Es. di matrice:
oppure:

A = [1
A = [1
4
7

2
2
5
8

3; 4 5 6; 7 8 9];
3
6
9 ];

Il programma MATLAB

MATRICI (II)

Per far riferimento agli elementi di una matrice A:

lelemento amn indirizzato come A(m,n)


Es.
A(2,3)
d 6
la riga m-esima indirizzata come A(m,:)
Es.
A(2,:)
d [4 5 6]
la colonna n-esima indirizzata come A(:,n)
Es.
A(:,3)
d [3; 6; 9]
la sottomatrice avente elementi amn, con m1mm2 e
n1nn2, indirizzata come A(m1:m2,n1:n2)
Es.
A(1:2,2:3) d [2, 3; 5, 6]

Il programma MATLAB

MATRICI (III)

Gli operatori applicabili alle matrici sono:

+ - * ^
/
\

Significato analogo agli operatori tradizionali


Divisione a destra:
B/A=B*inv(A)
Divisione a sinistra:
A\B=inv(A)*B
Trasposta:
B=A

Esistono poi particolari operatori (.* ./ .^) che permettono


di effettuare operazioni su vettori elemento per elemento,
senza ricorrere a cicli.
Ad esempio, se x un vettore, per moltiplicare elemento per
elemento i due vettori sin(x) e cos(x) basta fare:
y = sin(x) .* cos(x)

Il programma MATLAB

MATRICI (IV)

Alcune funzioni operano essenzialmente su vettori (riga o


colonna), e sono:
max(b), min(b)
sort(b)
mean(b), sqm(b)

Massimo e minimo di un vettore


Ordina il vettore in senso crescente
Media e Scarto Quadratico Medio
degli elementi inclusi in un vettore

Altre funzioni operano invece essenzialmente su matrici:

inv(A)
det(A)
size(A)
rank(A)

Inversa della matrice


Determinante della matrice
Dimensioni della matrice
Rango della matrice

Il programma MATLAB

MATRICI (V)

Esistono poi varie funzioni predefinite per la creazione di


matrici:
eye(n)
zeros(m,n)
ones(m,n)
rand(m,n)
diag(X)

Matrice identit n righe n colonne


Matrice di 0 con m righe e n colonne
Matrice di 1 con m righe e n colonne
Matrice casuale di valori tra 0 e 1
Se X un vettore con n elementi, produce
una matrice quadrata diagonale di
dimensione n per n con gli elementi di X
sulla diagonale. Se invece X una matrice
quadrata di dimensione n per n, produce
un vettore di n elementi pari a quelli sulla
diagonale di X.

Il programma MATLAB

MATRICI (VI)

Attenzione: tutte le funzioni che operano su matrici hanno dei


vincoli sugli operandi introdotti.
Ad esempio non si pu invertire una matrice non quadrata.
Per ulteriori spiegazioni sulla sintassi della funzione utilizzare
il comando help.
Attenzione: nelle operazioni tra matrici non sempre vale la
propriet commutativa:
A + B
A * B

B + A
B * A

Il programma MATLAB

COSTRUTTI LOGICI - IF (I)

La forma generale del costrutto IF la stessa di un qualsiasi


linguaggio di programmazione:
condizione1

if condizione1
operazioni1;
elseif condizione2
operazioni2;
else
operazioni3;
end

operazioni1

no

condizione2

no
operazioni3

operazioni2

Il programma MATLAB

COSTRUTTI LOGICI - IF (II)

condizione1, condizione2 devono essere tali da restituire


come risultato VERO o FALSO.
operazioni1, operazioni2, operazioni3
sono le
operazioni da compiere se la condizione corrispondente
risulta vera.

Gli operatori disponibili per tali confronti sono:


< , >
minore di, maggiore di
<= , >=
minore o uguale a, maggiore o uguale a
==
uguale a
~=
diverso da
&
AND logico
|
OR logico
~
NOT logico

Il programma MATLAB

CICLI DI CONTROLLO - FOR

Uno dei principali vantaggi nellimpiego del calcolatore la


capacit di ripetere operazioni semplici un gran numero di
volte, per mezzo di strutture (o cicli) di controllo.
La principale struttura di controllo la struttura FOR:
k=1

for k = 1:step:n
operazioni;
end

k <= n?
k = k + step

s
operazioni

no

END

Il programma MATLAB

CICLI DI CONTROLLO - WHILE

Nel caso in cui unoperazione debba essere compiuta fino a


che una certa condizione verificata, allora preferibile
ricorrere alla struttura WHILE:
while condizione
operazioni;
end
Attenzione: occorre prevedere una inizializzazione prima del
ciclo che verifichi la condizione per far s che il programma
entri nel ciclo, ed inoltre inserire nelle operazioni qualcosa
che possa modificare la condizione, altrimenti il ciclo sar
ripetuto all'infinito.

Il programma MATLAB

CICLI DI CONTROLLO

Esercizio: creare uno script MATLAB in grado di creare una


tabella (= matrice) che contenga nella prima colonna gli
angoli in sessadecimali (GRA), da 0 a 90, separati in
intervalli da 10, e nella seconda colonna gli stessi angoli
espressi in radianti (RAD), tenendo conto della proporzione:

GRA : GRA = 360 : 2


Utilizzare prima un ciclo FOR e poi ripetere loperazione con
un ciclo WHILE (ricordandosi di incrementare langolo!).

Il programma MATLAB

DEFINIZIONE DI NUOVE FUNZIONI (I)

In MATLAB possibile creare nuove funzioni.


Basta creare un file con estensione .m e nome del file uguale
a quella della funzione desiderata.
La prima riga del file deve contenere il nome della funzione e
gli argomenti di ingresso e di uscita.
Ad esempio, in:
function z = fun1(a,b)
oppure in:
function [x,y] = fun2(a,b)
risulta che fun1 e fun2 sono nomi di funzioni; a e b sono
argomenti dingresso; x, y e z sono argomenti duscita.

Il programma MATLAB

DEFINIZIONE DI NUOVE FUNZIONI (II)

Il blocco di linee di commento consecutive che


eventualmente segue la prima linea del file viene visualizzato
digitando il comando:
>> help nome_funzione

Attenzione: Le variabili utilizzate in una funzione sono


variabili locali e quindi indipendenti da quelle dellambiente
chiamante.
Quindi, le variabili utilizzate allinterno di una funzione e che
non vengono date in output non sono richiamabili fuori dalla
funzione stessa!

MATLAB e Geomatica

INTRODUZIONE

Uno degli scopi della Topografia la rappresentazione,


ovvero la costituzione di un elaborato cartografico che
rappresenti tridimensionalmente loggetto da esaminare.

MATLAB e Geomatica

INTRODUZIONE

I punti significativi per tale rappresentazione vanno rilevati


mediante misure di:
angoli
distanze
dislivelli

Rilievo di inquadramento
della citt di Bologna
http://sit.comune.bologna.it

GLI ANGOLI (I)

Lampiezza di un angolo pu essere espressa in diversi


sistemi di misura; quelli pi utilizzati in Topografia sono:

Sistema matematico: lunit di misura il radiante (rad)


definito come lampiezza dellangolo al centro che
sottende un arco di lunghezza pari al raggio della
circonferenza stessa.
Sistema centesimale:
lunit di misura il grado
centesimale (gon) definito come 1/400 dellangolo giro.

GLI ANGOLI (II)

Sistema sessagesimale: lunit di misura il grado


sessagesimale () definito come 1/360 dellangolo giro.
I sottomultipli del grado sessagesimale sono il primo
sessagesimale (), pari a 1/60 di grado sessagesimale, e il
secondo sessagesimale () pari a 1/60 di primo
sessagesimale. Le frazioni di secondi sono espresse nel
sistema decimale.
Sistema sessadecimale: lunit di misura il grado
sessagesimale ().
I sottomultipli sono il primo sessadecimale (), definito come
la centesima parte del grado sessagesimale e il secondo
sessadecimale (), definito come la centesima parte del primo
sessadecimale.

MATLAB e Geomatica

GLI ANGOLI (III)

Valori notevoli:
Matematico

Centesimale

Sessagesimale

Sessadecimale

/ 2 rad

100 gon

90 00 00

90.0000

rad

200 gon

180 00 00

180.0000

3/2 rad

300 gon

270 00 00

270.0000

2 rad

400 gon

360 00 00

360.0000

MATLAB e Geomatica

GLI ANGOLI (IV)

Conversioni

Sessagesimale

Sessadecimale
Si utilizza lalgoritmo per il cambio di base (da base 60 a base
10) di un numero.
Es.
= 47 25 12

= 47 + 25/60 + 12/3600 = 47,4200


Sessadecimale

Centesimale

Matematico
Questi tre sistemi sono tutti a base decimale. In questo caso
la conversione da un sistema di misura ad un altro si basa su
una semplice relazione di proporzionalit.

deg

gon

rad
=
=
180 200

MATLAB e Geomatica

GLI ANGOLI (V)

Esercizio: Creare una serie di funzioni (mediante il comando


function) per la conversione tra i vari sistemi di angoli.
In particolare:
Matematico
Sessadecimale
Sessagesimale

Sessadecimale
Sessagesimale
Centesimale

rad2deg
deg2gps
gps2gon

Sessagesimale
Sessadecimale
Matematico

gon2gps
gps2deg
deg2rad

e viceversa!

Centesimale
Sessagesimale
Sessadecimale

MATLAB e Geomatica

GRANDEZZE ANGOLARI (I)

In Topografia vengono utilizzate convenzioni angolari che si


differenziano da quelle adottate in matematica, infatti:
1) lo zero si trova sullasse Y delle ordinate,
2) il verso positivo orario e quindi il I quadrante sar
compreso tra 0 e /2, il II quadrante sar compreso tra /2
e , ecc.

IV

+
III

II

MATLAB e Geomatica

GRANDEZZE ANGOLARI (II)

Si consideri un punto di origine (V) e due semirette uscenti da


questo passanti per i punti A e B. Si stabilisca
convenzionalmente quali dei due punti rappresenti il "Punto
avanti (PA)" e quale il "Punto indietro (PI)".
Definiamo angolo la rotazione oraria che deve compiere la
direzione corrispondente al punto indietro per sovrapporsi a
quella del punto avanti.

= PA PI
Se:
(PA)= B e (PI) = A = AVB
viceversa se
(PA) = A e (PI) = B = BVA

MATLAB e Geomatica

GRANDEZZE ANGOLARI (III)

Si consideri un riferimento ortonormale R(O,X,Y) nel quale


siano noti i punti P e Q tramite le loro coordinate.
Definiamo "Angolo di direzione di Q rispetto a P (PQ o (PQ)),
l'angolo di cui la parallela all'asse Y del riferimento passante
per P, deve ruotare in senso orario per sovrapporsi alla
direzione PQ.

PQ

XQ XP
= arctan
YQ YP

Nellambiente MATLAB tale


angolo si pu calcolare
mediante la funzione:
atan2(X, Y)

MATLAB e Geomatica

GRANDEZZE ANGOLARI (IV)

Esercizio:
Verificare in MATLAB i seguenti angoli di direzione calcolati
rispetto al punto P di coordinate:
XP = 123,49 m

YP = 144,35 m

considerando i seguenti punti di coordinate:


X = 103,41 m
X = 224,35 m
X = 62,62 m
X = 183,92 m

Y = 182,52 m
Y = 327,42 m
Y = 37,24 m
Y = 42,32 m

(4 quadrante)
(1 quadrante)
(3 quadrante)
(2 quadrante)

MATLAB e Geomatica

GRAFICI (I)

La funzione plot crea grafici bidimensionali: riceve in


ingresso due vettori della stessa lunghezza e stampa i punti
corrispondenti alle coordinate fornite dai due vettori.
Ad esempio se si hanno due vettori x e y, il grafico
corrispondente si ottiene come:
>> plot(x,y);
Per tracciare il grafico
necessario crearsi un
ascisse, passarlo alla
contenente le ordinate,
vettori cos ottenuti.

di una qualsiasi funzione, perci


opportuno vettore da usare come
funzione per ricavare un vettore
ed usare la funzione plot sui due

MATLAB e Geomatica

GRAFICI (II)

Ad esempio per tracciare la funzione sin(x) in un intervallo


compreso tra -4 e 4 si pu usare la serie di comandi:
>> x=-4:0.01:4;
>> y=sin(x);
>> plot(x,y);

MATLAB e Geomatica

GRAFICI (III)

Per creare grafici di colori diversi o usando caratteri diversi


dal punto si pu specificare dopo le coordinate una stringa di
2 elementi.
Il primo il colore del grafico, il secondo il simbolo usato per
contrassegnare i punti.
Ad esempio
>> plot(x,y,'g+');
crea un grafico in verde usando dei + al posto dei punti.

Le scelte possibili possono essere visualizzate con il


comando:
>> help plot

MATLAB e Geomatica

GRAFICI (IV)

Altri comandi sono:

grid
title
xlabel
ylabel
axis
legend

: sovrappone al grafico un grigliato


: aggiunge un titolo del disegno
: aggiunge una legenda per lasse x
: aggiunge una legenda per lasse y
: riscala gli assi del grafico
: crea una legenda del grafico

Il comando figure crea una nuova finestra grafica in cui far


comparire il disegno; per spostarsi sulla n-esima finestra
grafica, basta digitare figure(n)

MATLAB e Geomatica

GRAFICI (V)

Esercizio: disegnare la funzione di probabilit normalizzata


fx =

x2
1
exp

2
2

Nellintervallo compreso tra -4 e +4.


Inserire allinterno del grafico un titolo, le etichette degli assi
cartesiani e la griglia.

MATLAB e Geomatica

GRAFICI (VI)

Il comando hold on permette di sovrapporre due o pi


grafici, mentre il comando hold off elimina tale possibilit
di sovrapposizione di grafici.
Le impostazioni standard di MATLAB hanno il comando hold
disattivato.
Ad esempio per avere sullo stesso grafico le curve di livello e
i vettori gradiente come nella figura seguente:

MATLAB e Geomatica
I comandi necessari sono:

xx = -2:0.1:2;
yy = xx;
[x,y] = meshgrid(xx,yy);
z = x .* exp(-x.^2 - y.^2);
[px,py]=gradient(z,1,1);
h=[-.2 -.1 0 .1 .5 1];
hold on
contour (z,h);
quiver(px,py)
hold off

GRAFICI (VII)

MATLAB e Geomatica

BIBLIOGRAFIA

Gamba A., Laboratorio di calcolo con Matlab, Politeko, 2000


(disponibile in forma elettronica su http://ebook.polito.it/)
Palm W., Matlab 7 per l'ingegneria e le scienze, McGraw,
2005 (Biblioteca VC 512.9434 PALMW)

Biran A., MATLAB for engineers, Addison- Wesley, 1995


(Biblioteca VC 512.9434 BIR/A)