scuola di specializzazione in fisica medica introduzione a ... · a. andreazza – introduzione a...
TRANSCRIPT
A. Andreazza – Introduzione a MATLAB
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: http://www.unimi.it/ateneo/80207.htm
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 2
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
– matlab2015 & – La versione usata in laboratorio è la 2015b
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 3
& fa partire il processo in background, permettendo di continuare ad usare il terminale
A. Andreazza – Introduzione a MATLAB SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 4
Pannello dei comandi
Pannello delle variabili Directory di lavoro
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: π: pi unità immaginaria: i j 1i 1j
Variabile ans definita automaticamente
Per documentazione: in linea: help comando dettagliata: doc comando
Gioco 1 format HEX mostra la rappresentazione interna dei numeri. Per numeri reali, riuscite a capire la rappresentazione utilizzata? E per interi?
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA
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
A. Andreazza – Introduzione a MATLAB
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
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 8
• Definito: – x = 1:4
• Confrontare i risultati di: – x*x – x*x’ – x’*x – x.*x
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
A. Andreazza – Introduzione a MATLAB
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')
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 10
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 ‘...’
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
A. Andreazza – Introduzione a MATLAB
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
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 12
A. Andreazza – Introduzione a MATLAB SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 13
Commenti Il file appare nella directory
Esecuzione (GUI)
Esecuzione (linea di comando)
A. Andreazza – Introduzione a MATLAB
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;
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 14
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
Esempio 2 Generatori di numeri casuali Impariamo: • generatori di distribuzioni uniformi e gaussiane • funzioni statistiche • istogrammi • cicli for
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA
A. Andreazza – Introduzione a MATLAB
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)
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 16
Righe
Colonne
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
A. Andreazza – Introduzione a MATLAB
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?
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 18
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
A. Andreazza – Introduzione a MATLAB
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.
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 20
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
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
A. Andreazza – Introduzione a MATLAB
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 χ2:
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 22
y = Asin(x +φ) = asin x + bcos x
A = a2 + b2 , φ = tan−1 ba
χ 2 = (yi − asin xi − bcos xi )2
i∑
A. Andreazza – Introduzione a MATLAB
Fit di χ2
• Il χ2:
• può venire espresso in forma matriciale:
• e la soluzione è data dal sistema
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 23
χ 2 = (yi − asin xi − bcos xi )2
i∑
χ 2 = (y −Ap)T (y −Ap)
y =
y1y2!yN
⎛
⎝
⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟
, p = ab( ), A =
sin x1sin x2!
sin xN
cos x1cos x2!
cos xN
⎛
⎝
⎜⎜⎜⎜
⎞
⎠
⎟⎟⎟⎟
ATy −ATAp = 0 p = ATA( )−1ATy
A. Andreazza – Introduzione a MATLAB
Fit di χ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:
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 24
Cp = ATA( )−1ATCyA ATA( )
−1Cy = σ y
21
Matrice da accostamento di colonne Usare ; per sovrapporre righe
Operazioni tra matrici
inv calcola la matrice inversa Per sistemi lineari esiste un metodo numericamente migliore: • A*p=y ⇒ p = A\y • p*A=y ⇒ p = y/A
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
A. Andreazza – Introduzione a MATLAB
Fit di χ2
• Completare l’esempio con: – calcolo della matrice di covarianza di a e b – calcolo della matrice di covarianza di A e φ
• Vedere come si comportano le funzioni statistiche se applicate ad una matrice
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 26
A. Andreazza – Introduzione a MATLAB
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
SCUOLA DI SPECIALIZZAZIONE IN FISICA MEDICA 28
A. Andreazza – Introduzione a MATLAB
Esercizio 2
• Prendere il file 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