Tecnologie digitali
Scheda di laboratorio n. 1/2008
MatLab : che fare?
Avendo a disposizione gli elementi di base di un linguaggio di programmazione che permette di fare
calcoli con quantità numeriche, sorge il problema di quali applicazioni siano possibili. È bene tenere
presente che qualunque settore della matematica, in particolare se applicata alla fisica, usa il calcolo
numerico per eseguire conti altrimenti proibitivi1 . Il calcolo numerico, grazie anche alla efficienza
raggiunta nei moderni elaboratori, è dunque una tecnica tra le più importanti nel lavoro scientifico
moderno. Illustriamo una applicazione, in una situazione elementare, ma di notevole importanza storica:
l’uso di formule approssimate per il calcolo dell’integrale definito di una funzione di variabile reale.
Inoltre impareremo a rappresentare graficamente, anche in forma animata, leggi orarie di punti materiali
in movimento.
Vettori
Il tipo di dato fondamentale di MatLab è il vettore. In senso informatico esso è una raccolta di elementi
dello stesso tipo (numeri per il momento) ordinati in una successione finita. L’elemento generico del
vettore si indica con il suo nome-radice, ad esempio a, tramite la scrittura a(i) che indica l’elemento
che si trova all’i-simo posto: a(3) indica l’elemento che si trova al terzo posto a partire dall’elemento
iniziale a(1).
Esistono casi particolari in cui l’assegnazione di un vettore è facilitata dalla sintassi di MatLab.
Innanzitutto vi è il caso di vettori di numeri reali che rappresentino la equipartizione di un intervallo
chiuso I = [a, b] in un numero prefissato di N sottointervalli di ampiezza dx = (b − a)/N . L’istruzione
è, ad esempio:
x = linspace (a, b, N+1)
N+1 rappresenta il numero di punti equispaziati, compresi i due estremi in cui è suddiviso l’intervallo.
Questa istruzione è molto utile insieme con la proprietà delle funzioni di MatLab di agire attraverso i
vettori, ossia di restituire, quando hanno come argomento un vettore x, un vettore che ha per elementi
i valori della funzione f (x) calcolati per ciascun elemento di x.
√
Es.1 Sia N = 10, I = [0, 10] f (x) = x. Si assegni a=0, b=1, N=10 e si costruisca il vettore equispaziato x =
linspace(a, b, N+1), e da questo si costruisca il vettore
p f= sqrt(x). Si verifichi, scrivendo sul quaderno la tabella,
che i due vettori x ed f sono le righe di una tabella x, (x). Mediante l’istruzione
plot(x,f)
si tracci, usando i vettori cosı̀ costruiti, il grafico cartesiano della funzione radice quadrata.
1
Uno dei luoghi capitali della moderna scienza computazionale è il Courant Institute of Mathematical Sciences della
università di New York, intitolato al matematico Richard Courant, uno degli ideatori del metodo degli elementi finiti, tra i
maggiori progressi tecnici nel calcolo numerico. Nei programmi del Courant Institute, la teoria matematica si intreccia ai
risvolti applicativi nelle più diverse discipline per il tramite delle più avanzate tecniche computazionali. Notizie sull’istituto
sono reperibili in rete, all’indirizzo http://math.nyu.edu/.
1
2
Leggi orarie con MatLab
Descrivere il moto di un punto materiale significa individuare la posizione del punto nello spazio ad
ogni istante di tempo. Questa descrizione è usualmente chiamata legge oraria. Il moto generale di un
punto materiale nello spazio si ottiene assegnando una dipendenza dal tempo del suo vettore posizione2
−
→
r :
−
legge oraria → →
r (t)
Rappresentazione computazionale di una legge oraria: caso 1D
Rappresentare (ai fini del calcolo numerico) una legge oraria x(t) in una dimensione (ovvero di un
moto rettilineo) significa assegnare due vettori:
1. t = (t1 , t2 , ..., ti , ..., tn ) che elenca i tempi a cui si conosce la posizione del punto mobile.
2. x = (x1 , x2 , ..., xi , ..., xn ) che elenca la posizione (espressa come coordinata rispetto ad un’origine arbitraria) occupata dal corpo agli istanti elencati in t.
Si osservi che questa rappresentazione è anche quella che si otterrebbe se sottoponessimo la posizione
del punto mobile ad una operazione di misura. Per quanto rapida sia una singola misurazione
essa richiede un certo tempo Tc (detto tempo di campionamento) per cui la misura successiva
corrisponderà ad un tempo separato dal precedente all’incirca da Tc . L’insieme di dati sperimentali ( o
campioni) sarà quindi ordinabile nelle colonne di una tabella, ossia in vettori.
Es.2 Si consideri la legge oraria del moto armonico:
x = x0 cos(ωt) +
v0
sin(ωt)
ω
Si scriva una function che, avendo come input la frequenza del moto ω, la posizione x0 e la velocità v0 iniziali restituisca
i vettori x e t che rappresentano la legge oraria in un numero di punti N , anche esso dato come input, per un intervallo
di tempo che comprende circa 5 oscillazioni.
Es.3 Con i vettori x e t calcolati nell’esercizio precedente si tracci il grafico orario del moto (x vs. t)
Velocità
→
Come è noto la definizione di velocità si fa a partire dalla nozione di posizione −
r (t) tramite l’operazione
di derivata:
−
d→
r
−
→
v (t) =
dt
Se è nota la espressione analitica della legge oraria si possono applicare le regole di derivazione e
calcolare l’espressione analitica della velocità. Se, invece, la legge oraria è nota in forma computazionale,
ossia per valori discretizzati del tempo, tutto quello che si può fare è utilizzare i valori conosciuti per
approssimare il valore della derivata ossia della velocità. Nel caso unidimensionale note le coppie
(ti , xi ) del tempo e della posizione, la velocità al tempo corrispondente all’indice i si può approssimare
mediante:
xi+1 − xi
(1.1)
vi =
ti+1 − ti
Riducendo l’intervallo tra un istante ed il successivo, ossia aumentando il numero n dei campioni della
legge oraria, l’approssimazione diviene sempre migliore. Per eseguire l’operazione richiesta risulta utile
la funzione di MatLab
2
Si intende per vettore posizione del punto P la freccia che ha la coda in un punto O scelto come origine e la punta in
−−→
→
P. Si indica anche con −
r = OP .
A. Di Lieto, F. Maccarrone - Tecnologie Digitali I - 2008/09
3
diff(X)
la quale restituisce un vettore che ha come componente i-sima la differenza X(i+1)-X(i). Con questa
funzione, se x e t sono i vettori che rappresentano la legge oraria il vettore velocità calcolato applicando
la formula (1.1), si calcola mediante:
v = diff(x)./diff(t)
(1.2)
Es.4 Se x e t hanno N elementi, quanti elementi ha il vettore v calcolato mediante la (1.2)?
Es.5 Si modifichi la funzione dell’es. 2 in modo che oltre ad x e t restituisca anche i vettori v e v approx; il primo di
questi sia calcolato in corrispondenza degli stessi valori di t usati per la x(t) eseguendo direttamente la derivata analitica
della legge oraria:
vx = −ωx0 sin(ωt) + v0 cos(ωt)
e l’altro applicando la formula (1.2). Con i vettori t v e v approx si tracci il grafico cartesiano che confronta il valore
esatto della velocità con quello approssimato. Cosa si osserva al variare del numero N di elementi? In quali istanti la
approssimazione è meno accurata? Quale spiegazione daresti?
Integrali
Consideriamo una funzione f (x) senza particolari patologie, ossia che possa essere calcolata in tutti i
punti di un intervallo I = [a, b]. Esistono vari modi di definire l’integrale definito di f(x) tra a e b
che si indica con la scrittura:
Z
b
I=
f (x)dx
a
Una delle interpretazioni di questa operazione consiste nel calcolo dell’area compresa tra le rette x = a,
x = b, l’asse delle ascisse ed il grafico della curva (vedi figura). Una approssimazione dell’area si può
ottenere con il metodo dei rettangoli, ovvero suddividendo l’intervallo I in sottointervalli uguali di
ampiezza dx mediante i punti x1 = a, x2 = a + dx, ..., xN +1 = b e calcolando l’area dei rettangoli che
hanno altezza uguale al valore della funzione nell’i-simo intervallino (ad esempio nell’estremo sinistro
xi dove vale fi = f (xi )) e base uguale alla spaziatura dx. Evidentemente la somma approssima l’area a
meno dei triangoli curvilinei che sono sopra o sotto la curva a seconda che nell’intervallino la funzione
sia crescente o decrescente3 . In simboli l’operazione è:
I'
N
X
fi ∗ dx
(1.3)
i=1
3
La funzione può anche essere in parte sopra e in parte sotto. Si faccia un disegno in cui ciò avviene. Discutere
graficamente l’approssimazione cercando di illustrare qualitativamente in quali casi sia migliore o peggiore.
A. Di Lieto, F. Maccarrone - Tecnologie Digitali I - 2008/09
4
Es.6 Si scriva una function che, avendo come input il numero N di sottointervalli e gli estremi di integrazione a e b,
definisca due vettori: x equispaziato tra a e b con N + 1 elementi e f che contiene i valori della funzione f = x3 calcolati
nei punti di x. Mediante una opportuna istruzione si eseguano le operazioni espresse dalla eq. (1.3) e si assegni il risultato
alla variabile I approx che deve essere restituita dalla function. Si ricordi che in MatLab l’istruzione S = sum (x)
restituisce la somma delle componenti del vettore x. Il risultato è una approssimazione dell’integrale
Z b
b4 − a4
x3 dx =
4
a
Si consideri il calcolo fatto con a = 0, b = 1 e diversi valori di N . Descrivere qualitativamente come varia il valore approssimato al crescere di N . Quali sono i valori di N affinché l’approssimazione differisca dal valore esatto rispettivamente
alla terza o alla sesta cifra decimale?
Es.7 Cerchiamo di rendere quantitativa la dipendenza dello scarto tra l’approssimazione I approx ed il risultato esatto
I ex = 1/4. Per valori crescenti di N si annoti in una tabella a tre colonne il valore di N, della ampiezza dx degli elementi
della partizione di I e dello scarto delta I = abs(I approx - I ex). Dopo avere raccolto un numero sufficiente di dati
si faccia il grafico di delta I in funzione di dx. Cosa si osserva?
Il metodo dei rettangoli è estremamente semplice, ma non è particolarmente efficiente e preciso. Sono
possibili molti altri metodi che richiedono il calcolo della funzione in un insieme di punti (anche non
necessariamente equispaziati) dell’intervallo di integrazione I. Un esempio è il metodo dei trapezi.
Esso consiste nel approssimare l’area tracciando il segmento che unisce gli estremi di ogni sottointervallo.
In questo modo per ogni sottointervallo c’è da calcolare l’area di un trapezio rettangolo (vedi figura),
da cui il nome. Usando la formula per il calcolo dell’area di un trapezio le cui basi sono i valori della
funzione f agli estremi dell’intervallo e l’altezza è l’ampiezza del sottointervallo, il metodo dei trapezi
si traduce nella relazione:
N
X
1
I'
(fi + fi+1 ) ∗ dx
(1.4)
2
i=1
Es.8 Si ripeta l’esercizio 6 usando la regola dei trapezi. Si assegni il risultato alla variabile I2 approx. Quale è il valore
di N affinché l’approssimazione differisca dal valore esatto alla terza cifra decimale? E alla sesta? Trarre una conclusione
sensata, tra le molte che si potrebbero trovare, dal confronto dei due metodi.
Es.9 Si ripeta l’esercizio 7 usando la regola dei trapezi.
Es.10 Si tracci sullo stesso grafico l’andamento dello scarto della approssimazione dal risultato esatto in funzione di N
per i due metodi. Quale conclusione si trae?
Fast food
Come per gran parte dei problemi numerici MatLab si preoccupa di fornire funzioni che eseguano il
lavoro richiesto. Ciò che si deve fare è imparare la sintassi di tali funzioni. Naturalmente è altamente
sconsigliato per un fisico utilizzare le funzioni a scatola chiusa in particolare se dal risultato del calcolo
dipende una conclusione interessante. Nei casi in cui si conosce il risultato esatto può essere tuttavia
utile fare esercizio con le funzioni predefinite valutando l’attendibilità delle risposte. Per l’integrazione
numerica MatLab fornisce varie funzioni. Esaminiamone una la cui sintassi minimale è:
quad(FUN,a,b)
dove a e b sono gli estremi di integrazione e FUN è la funzione da integrare. La funzione FUN può essere
definita in forma simbolica tramite l’istruzione
FUN = inline(’f(x)’,’x’)
A. Di Lieto, F. Maccarrone - Tecnologie Digitali I - 2008/09
5
essendo f(x) l’espressione di MatLab che calcola la funzione da integrare, considerando l’argomento
x come vettoriale e quindi usando il . per indicare le operazioni componente per componente quando
necessario. Per illustrare il funzionamento si esegua il seguente esercizio:
Es.11
Si debba calcolare l’integrale
Z
1
I=
0
2x
dx
1 + x2
il cui risultato esatto4 è I = ln(2)..Si scriva uno script composto di quattro istruzioni. Le prime due devono definire gli
estremi di integrazione a = 0 e b = 1, la terza definisca la funzione F tramite F = inline(’2*x./(1+x.∧2)’,’x’);
e l’ultima l’integrale
I=quad(F,a,b); . Si confronti il risultato dello script con quello esatto.
Grafici orari in 2D
→
Rappresentare ai fini di calcolo numerico una legge oraria −
r (t) in due dimensioni significa assegnare:
1. Il vettore t = (t1 , t2 , ..., ti , ..., tn ) che elenca i tempi a cui si conosce la posizione del punto mobile.
2. I due vettori x = (x1 , x2 , ..., xi , ..., xn ) e y = (y1 , y2 , ..., yi , ..., yn ) che individuano la posizione
(espressa, ad esempio, come coordinate cartesiane rispetto ad un’origine arbitraria di una coppia
di assi ortogonali) occupata dal corpo agli istanti elencati in t.
Es.12
Si consideri la legge oraria del moto di caduta libera (uniformemente accelerato in direzione −y) :
1
x = x0 + v0x t; y = y0 + v0y t − gt2
2
Si scriva una function che, avendo come input il valore g del campo di gravità, le coordinate x0 e y0 e le componenti
della velocità v0x e v0y iniziali, tracci i grafici orari del moto (x vs. t e y vs. t) uno sotto l’altro (servirsi della funzione
subplot) nella stessa finestra grafica.
Animazione grafica
L’istruzione O = PATCH(X,Y,C) ha come argomenti due vettori di lunghezza uguale k e disegna in 2D
un poligono avente per vertici consecutivi i punti (X[i], Y[i]). Il parametro C può essere una lettera
che indica il colore della faccia del poligono, ad esempio ’r’ per il rosso, . . . 5 .
Es.13 Il centro di un poligono regolare di k vertici ha coordinate x0 , y0 ed il raggio del cerchio circoscritto C sia r.
Scegliamo una coppia di assi coordinati cartesiani con l’origine in C e si orienti l’asse x in modo che uno dei vertici sia
nel punto P1 = (r, 0). Muovendosi in senso antiorario su C si incontra il vertice adiacente a P1 quando si è percorso un
angolo:
2π
θ2 =
k
. Le coordinate cartesiane di P2 sono:
x2 = r cos θ2
y2 = r sin θ2
Analogamente si vede che lo i-simo vertice ha coordinate.
xi = r cos θi
con θi =
.
yi = r sin θi
i−1
2π. Il vettore degli angoli dei vertici si potrebbe assegnare in MatLab con teta = [0:2*pi/k:(k-1)/h*2*pi
k
Si scriva una function che avendo come input le coordinate del centro del poligono, il numero di vertici ed il suo raggio
restituisca le coordinate dei suoi vertici.
4
5
La primitiva della funzione integranda è, a meno di una costante F (x) = ln(1 + x2 )
In generale, C può essere una terna RGB e questo permette una maggiore scelta per il colore della faccia del poligono.
A. Di Lieto, F. Maccarrone - Tecnologie Digitali I - 2008/09
6
Es.14 Si prepari una function in cui si usano gli assi predefiniti (disponibili con l’istruzione axis) e si disegni un
poligono regolare di raggio r = 1/100 della lunghezza degli assi, con k = 50 vertici intorno al punto (x, y) = (0.5, 0.5),
facendosi restituire l’handle O all’oggetto grafico.
Un oggetto grafico è dotato di molte proprietà che ne rendono possibile la restituzione, ad esempio
sullo schermo corrente. In MatLab l’accesso a queste proprietà avviene attraverso la funzione set che
ha la seguente sintassi minimale:
SET(H,’PropertyName’,PropertyValue)
Qui H è l’handle all’oggetto, ’PropertyName’ è una parola, indicata tra apici, che denota la proprietà
sulla quale si vuole intervenire e PropertyValue il nuovo valore6 che deve avere la proprietà.
Es.15 Usando, dalla finestra dei comandi la funzione set applicata all’oggetto generato nell’esercizio precedente si
modifichino le proprietà XData ed YData, che contengono i vettori dei vertici del poligono traslando i punti secondo il
−
→
vettore T = (0.2, 0.2)
Es.16 Mettere insieme gli esercizi 2, 14 e 15 già svolti in un unica funzione. Si disegni il poligono nell’origine e poi,
rendendo generici i parametri Tx e Ty dell’esercizio precedente, si inserisca l’istruzione set in un ciclo che in successione
renda la coordinata x del centro del poligono quelle del punto mobile calcolate nell’esercizio 2. L’istruzione set va fatta
seguire dall’istruzione drawnow che forza il programma a applicare le modifiche al grafico immediatamente7 . Si dovrebbe
vedere una animazione del moto oscillatorio.
Traiettoria in 2D
Si può disegnare un nuovo oggetto grafico sovrapposto ad uno già esistente impiegando l’istruzione
hold. Questa modifica una proprietà degli assi correnti che riguarda appunto la persistenza degli oggetti
presenti in caso di un nuovo comando grafico applicato agli stessi assi. Normalmente la persistenza è
off e un nuovo comando grafico sostituisce quello precedente, sopprimendolo. Se si vuole mantenere
il vecchio oggetto grafico occorre modificare la proprietà facendola diventare on: questa istruzione ha
proprio questo funzione8 .
Si dice traiettoria del moto la curva che viene tracciata dal corpo in movimento. La sua rappresentazione in 2D sono i due vettori x e y, che rappresentano la funzione y(x) (o x(y)).
Es.17 Si scriva una function che, utilizzando quella scritta nell’esercizio precedente e modificata in modo che restituisca
i vettori x ed y, tracci con questi la traiettoria del moto. Mantenendo la curva tracciata (istruzione: hold) si ripeta
quanto fatto con l’esercizio 15, realizzando sul grafico della traiettoria una animazione del moto del proiettile.
6
Il tipo di valore, ad es. numerico, letterale, vettoriale etc., deve essere tra quelli legittimi della proprietà.
Senza questa istruzione le modifiche vengono applicate tutte alla fine della esecuzione e rimane solo l’ultima modifica.
8
In effetti la istruzione è di tipo toggle. Ciò significa che agisce come un pulsante che passa allo stato 1 se lo stato
attuale è 0 e allo stato 0 se quello attuale è 1. In altre parole se la luce è accesa il pulsante toggle la spegne, mentre se è
spenta, lo stesso pulsante la accende.
7
A. Di Lieto, F. Maccarrone - Tecnologie Digitali I - 2008/09
Scarica

MatLab: che fare? - Dipartimento di Fisica