• Non ci sono risultati.

Introduzionea MATLAB(A. Andreazza)Scuola di Specializzazione in Fisica Medica

N/A
N/A
Protected

Academic year: 2021

Condividi "Introduzionea MATLAB(A. Andreazza)Scuola di Specializzazione in Fisica Medica"

Copied!
29
0
0

Testo completo

(1)

Introduzione a MATLAB

(A. Andreazza)

Scuola di Specializzazione in Fisica Medica

(2)

MATLAB

• Linguaggio di programmazione ad alto livello per applicazioni scientifiche

• Ambiente di sviluppo interattivo

• Disponibilità di funzione matematich per un’ampia varietà di applicazioni

• Strumenti per grafica 2D e 3D

• Possibilità di costruire interfacce grafiche ed interfacciarsi con librerie in altri linguaggi di programmazione.

– https://it.mathworks.com/products/matlab.html

• Disponibile su Windows, Linux e Mac

• L’Università di Milano ha una licenza campus, per cui è accessibile a tutti gli studenti

– Possibile installarlo sul proprio PC

– Istruzioni su: https://work.unimi.it/servizi/servizi_tec/79539.htm

(3)

A. Andreazza – Introduzione a MATLAB

Avvio MATLAB

• Aprire una finestra terminale

• (consigliato) Creare una directory per MATLAB

– mkdir MATLAB

• Entrare nella directory

– cd MATLAB

• Far partire MATLAB

– /tools/Matlab_R2018b/bin/matlab &

– La versione usata in laboratorio è la 2018b

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

3

& fa partire il processo in background,

permettendo di continuare ad usare il terminale

(4)

Pannello dei comandi

Pannello delle variabili Directory di lavoro

(5)

A. Andreazza – Introduzione a MATLAB

Primi comandi

• Provare ad eseguire dei calcoli:

– costanti: 5*3 2^10 pi/2

– funzioni: sin(pi/2) sind(90) exp(-1) – e cosa succede se facciamo sqrt(-3)?

• Definire della variabili (scalari)

– r = sqrt(2) – C = 2*pi*r – year = 2018

• Cambiare il formato di stampa

– format long

• Documentazione, cancellazione variabili e finestra

– help format – clear

– clc

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

5

Costanti predefinite:

p: pi

unità immaginaria: i j 1i 1j Variabile ans definita automaticamente

Per documentazione:

in linea: help comando dettagliata: doc comando

(6)

Gioco 1

format HEX mostra la rappresentazione interna dei numeri.

Per numeri reali, riuscite a capire la rappresentazione utilizzata?

E per interi?

(7)

A. Andreazza – Introduzione a MATLAB

Operazioni con vettori

• Una delle forze di MATLAB è la potenza delle funzioni vettoriali

• Creazione di un vettore:

– vettore riga: x = [ 1 2 5 4 ] oppure: x = [ 1, 2, 5, 4 ]

– vettore colonna: y = [ 1; 2; 5; 4 ] oppure: y = x’

– vettore equispaziato: x = inizio:passo:fine se passo è 1 si può omettere

oppure: x = linspace(inizio,fine,numeropunti)

• Molte operazioni vengono ripetute automaticamente su tutti gli elementi di un vettore:

– y = sqrt(2)*x – z = y-x

– w = exp(x)

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

7

Costanti predefinite:

’: operatore di trasposizione N.B.: per vettori complessi fa il trasposto coniugato

(8)

Operazioni vettoriali

Operatore Descrizione

+ - somma e sottrazione elemento per elemento

* / prodotto e divisione per uno scalare prodotto e divisione tra matrici

^ esponenziazione (tra scalari e matrici quadrate) .* ./ prodotto e divisione elemento per elemento .^ esponenziazione elemento per elemento

• Definito:

– x = 1:4

• Confrontare i risultati di:

– x*x – x*x’

– x’*x – x.*x

(9)

Esempio 1

Grafico di alcune funzioni

Impariamo:

utilizzo di indici per accedere ai dati

funzione plot e proprietà di un grafico

salvare istruzioni in una macro

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

(10)

Grafico di una funzione

• Creare un vettore di ascisse: 101 punti tra -10 e 10

– x = linspace(-10.,10.,101);

• Calcolare un vettore di ordinate:

– y = sin(x)./x;

• Verificare il valore del 51o elemento:

– y(51) corrisponde a x=0, ed il risultato è NaN = not a number – y(51) = 1 assegnare il limite per x che tende a 0

• Grafico di y(x)

– plot(x,y)

• Titolo e assi

– title('Grafico di funzione') – xlabel('x [rad]')

– ylim([-0.4,1.2]) – ylabel('sin(x)/x')

Indice del vettore in (), inizia da 1 In caso di vettori molto grandi,

‘;’al termine del comando sopprime la stampa a schermo

Vettore di estremi dell’asse

Variabili di testo tra ‘...’

(11)

A. Andreazza – Introduzione a MATLAB

• Sequenza di chiamata:

– plot(x,y,opzionibase,nomeopzione,valoreopzione,...)

• Opzioni base (un singolo testo)

• Opzioni avanzate:

Funzione plot

Carattere Colore Carattere Marker Carattere Linea

k black . punto - continua

r red * asterisco -- tratteggiata

g green o cerchio : punteggiata

b blue x croce :- dot-dash

c cyan

m magenta

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

11

‘LineWidth’ Spessore della linea, default: 1

‘MarkerFaceColor’ Colore di riempimento del marker, default: trasparente

‘MarkerSize’ Dimensione del marker, default: 10

Per documentazione:

help plot

(12)

File macro

• Si possono inserire i comandi in un file .m in modo da poterli richiamare più facilmente

• Aprire l’editor di macro

– edit grafico

si apre un nuovo pannello ed il file grafico.m compare nella directory di lavoro

• inserire nell’editor i comandi come sono dati

• salvare la macro (Save da GUI)

• eseguire la macro:

– clear – clc

– grafico

(13)

A. Andreazza – Introduzione a MATLAB

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

13

Commenti Il file appare

nella directory

Esecuzione (GUI)

Esecuzione

(linea di comando)

(14)

Altre funzioni

• Per provare altre funzioni basta modificare le linee di definizione della y

– y = sqrt(2)*ones(1,length(x));

– y = zeros(1,length(x));

• Possiamo sfruttarle per vedere diversi modi di

indicizzazione, usando vettori e condizioni logiche

– y = zeros(1,length(x));

y(51) = 1;

– y = zeros(1,length(x));

y(26:76) = 1;

– y = zeros(1,length(x));

y( x>0 ) = 1;

– y = cos(x);

y( y<0 ) = 0;

Funzione Delta

Funzione costante,

length dà la lunghezza di un vettore ones dà una matrice di 1

zeros dà una matrice di 0

Rettangolo, vettore di indici

Gradino, vettore di elementi che soddisfano una condizione logica Lobi positivi del coseno

(15)

Esempio 2

Generatori di numeri casuali

Impariamo:

generatori di distribuzioni uniformi e gaussiane

funzioni statistiche

istogrammi

cicli for

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

(16)

Generatori di numeri casuali

• MATLAB permette di riempire matrici con numeri pseudo-casuali:

– generatore uniforme in [0,1): ru = rand(1000,1);

– distribuzione normale: rn = randn(1000,1);

– interi equidistribuiti tra 1 e 6: ri = randi(6,1000,1);

• Possiamo verificare visivamente che le distribuzioni siano quelle attese costruendo un istogramma:

– histogram(ru)

– è possibile anche dare un vettore che definisce gli estremi dei canali dell’istogramma

histogram(ru,linspace(0.,1.,21) per avere N canali servono N+1 punti

– histogram(rn)

– histogram(ri,0.5:6.5)

Righe Colonne

(17)

A. Andreazza – Introduzione a MATLAB

Funzioni statistiche

• Possiamo verificare se i numeri generati possiedono le proprietà statistiche che ci attendiamo:

– valor medio: mean(ru) – deviazione standard: std(ru)

• I valori attesi sono:

– 0.5 e 1/sqrt(12) per la distribuzione uniforme

– 0 e 1 pe la distribuzione normale

– e per gli interi equiprobabili tra 1 e 6?

d = 1:6 mean(d) std(d)

• Esistono molte altre funzioni che

operano su un vettore

(o sulle colonne di una matrice)

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

17

Funzione Descrizione mean valor medio

std deviazione standard var varianza

max valore massimo min valore minimo median mediana

sum somma degli elementi prod prodotto degli elementi diff vettore differenze tra el.

cumsum vettore somme cumlative

(18)

Lancio di più dadi

• Come è fatta la distribuzione della somma di N dadi?

– il teorema del limite centrale dice che per N→∞ la forma tende ad essere gaussiana

– 2 dadi:

ri = ri+randi(6,1000,1);

histogram(ri) mean(ri)

std(ri)

• 3 dadi:

ri = ri+randi(6,1000,1);

histogram(ri) mean(ri)

std(ri)

• Possiamo automatizzare?

(19)

A. Andreazza – Introduzione a MATLAB

Strutture di controllo

• Cicli for

for variabile=vettore

...codice in cui variabile assume i valori in vettore

end

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

19

• Cicli while

while condizione

...codice in cui può

modificarsi la condizione

end

• Esecuzione condizionata

if condizione

codice se condizione è verificata

else if condizione2

codice se condizione2 è verificata

else

codice se nessuna condizione è verificata

end

(20)

Lancio di più dadi

• Costruiamo una macro sommadadi.m che guardi le distribuzioni fino a N dadi facendone gli istogrammi e mostrando l’andamento di valor medio e varianza.

Crea un nuovo pannello per i plot I vettori vengono allungati a mano a mano che si inseriscono i dati

hold permette di sovrapporre diverse linee su uno stesso grafico

(21)

Esempio 3

Calcolo di fase ed ampiezza di una sinusoide

Impariamo:

matrici e loro indicizzazione

operazioni tra matrici

risoluzione di sistemi lineari

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

(22)

Dati con rumore

• Supponiamo di avere una sinusoide misurata ad intervalli regolari, e con un certo errore di misura:

– x = (0:0.5:10)’;

– y = 1.5*sin(x+pi/4);

– yMis = y + 0.2*randn(length(y),1) – sovrapporre i grafici di y e yMis

• Vogliamo trovare i migliori parametri [a b] che descrivono i dati misurati:

• Minimizzando il c

2

:

y = Asin(x + f ) = asin x + bcos x A = a

2

+ b

2

, f = tan

-1

b

a

c

2

= ( y

i

- asin x

i

- bcos x

i

)

2

i

å

(23)

A. Andreazza – Introduzione a MATLAB

Fit di c

2

• Il c

2

:

• può venire espresso in forma matriciale:

• e la soluzione è data dal sistema

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

23

c

2

= ( y

i

- asin x

i

- bcos x

i

)

2

i

å

A

T

y - A

T

Ap = 0 p = A (

T

A )

-1

A

T

y

(24)

Fit di c

2

• Soluzione in MATLAB:

– A = [ sin(x) ; cos(x) ]’;

– ATy = A’*yMis;

– ATA = A’*A;

– p = inv(ATA)*ATy

– ampiezza = sqrt(p’*p) – fase = atan2(p(2),p(1))

• Residui del fit:

– yFit = A*p;

– yRes = yMis-yFit;

– sigma2 = var(yRes)/(length(yRes)-1)

• Matrice di covarianza dei parametri a e b:

C

p

= A (

T

A )

-1

A

T

C

y

A A (

T

A )

-1

C

y

= s

y2

1

Matrice da accostamento di colonne Usare ; per sovrapporre righe

Operazioni tra matrici

inv calcola la matrice inversa

Per sistemi lineari esiste un metodo computazionalmente migliore:

• A*p=y ⇒ p = A\y

p*A=y ⇒ p = y/A

(25)

A. Andreazza – Introduzione a MATLAB

Operazioni con matrici

• Creazione:

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

– A = eye(5)

– A = ones(Nrighe,Ncolonne) – A = zeros(Nrighe,Ncolonne)

• Indicizzazione:

– A(2,4) – A(:,2) – A(4,:)

• Funzioni:

– det(A) – inv(A) – diag(A)

– size(A,dim)

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

25

; separa le righe

matrice identica 5x5 matrice di 1

matrice di 0

Elemento nella 2a riga 4a colonna 2a colonna

4a riga

determinante di A Inversa di A

diagonale di A

lunghezza della dimensione di A

(26)

Fit di c

2

• Completare l’esempio con:

– calcolo della matrice di covarianza di a e b – calcolo della matrice di covarianza di A e f

• Vedere come si comportano le funzioni statistiche se

applicate ad una matrice

(27)

ESERCIZI

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

(28)

Esercizio 1

• Scrivere una macro che al suo interno:

– definisce un certo numero di punti su un intervallo

– calcola i valori di una funzione (definita all’interno della funzione) su quei punti

– calcola numericamente l’integrale della funzione sull’intervallo

(29)

A. Andreazza – Introduzione a MATLAB

Esercizio 2

• Prendere il file

/home/comune/SSFM/MATLAB/croce.mat

:

– caricare i dati del file usando il comando load croce

– contiene due misure dei punti [x y] di una croce nelle matrici A e B – fare la differenza delle misure e stimare la precisione in x e y

– la croce è ruotata: calcolare di quale angolo

– applicare una matrice di rotazione per “raddrizzarla”

SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA

29

Riferimenti

Documenti correlati

I risultati sono raccolti in forma matriciale dove ogni matrice rappresenta le simulazioni implementate con determinate condizioni

sono tornato nello script pippo = ciao dalla funzione1 script ./scriptfile: arg1 arg2. Variabili locali

•  ℓ = lunghezza lungo la traiettoria di riferimento della particella sincrona, corrispondene al valore nominale di p e R nel campo dipolare B. •  Per

–  le perdite di energia all’interno della sorgente;. –  le perdite di energia nel percorso tra sorgente

•  L’equazione del moto di una particella carica in un campo magnetico è.. •  in relatività ristretta la quantità di moto si può scrivere come pc = ε

Scrivere la funzione Matlab compute_inverse che prenda in input una matrice quadrata A di ordine N; dopo aver verificato che la matrice è invertibile,

Ogni oggetto è istanza di una classe che definisce il tipo di dati che l’oggetto memorizza e le operazioni possibili su tali dati Le classi sono quindi il modo Java per creare

ritorna una nuova stringa dove gli eventuali caratteri in maiuscolo sono rimpiazzati con i relativi caratteri in minuscolo. public