Esercitazione 3
Esercitazione 3
Esercitazione 3
(x,y)= ...,...
(dove al posto dei puntini di sospensione bisogna stampare i valori ottenuti). Stampate i
risultati con almeno 6 cifre di cui 4 dopo la virgola. Verificate che i risultati ottenuti con
il programma riproducano quelli che si otterrebbero risolvendo a mano le equazioni del
moto, ad esempio per i valori: t = 0, t = 5, t = 10 s.
Attenzione! Per sfruttare le funzioni della libreria matematica (come ad es. le funzione
seno e coseno) bisogna inserire prima del main() la riga di codice
# include < math .h >
1
e OMEGA. Per fare pratica, optiamo per le costanti simboliche. Il codice avrà quindi la
forma
# include .... // file di intestazione per leggere e stampare dati
e per le funzioni matematiche
# define R 6.2
# define // stessa cosa per OMEGA
int main () {
// definizioni delle variabili
return 0;
}
2. Una volta verificato che il programma produce risultati corretti, riformattate l’output
in modo da stampare i tre valori t, x, y su tre colonne, separate da spazi vuoti, come
nell’esempio sottostante (stampare ciascun valore con almeno 8 cifre di cui 4 dopo la
virgola):
2.5000 4.3841 4.3841
Suggerimento per tutti: Per modificare piccole parti di programma senza cancellare quello
che si è fatto in precedenza può essere utile commentare le istruzioni che non ci sono utili.
2
usare la funzione fprintf(stdout, "...", ...) per stampare su standard output e
fprintf(stderr, "...", ...) per stampare su standard error.
Ecco quindi un possibile schema del codice:
# include ... // files intestazione per leggere e stampare dati e
per le funzioni matematiche
# define R 6.2
# define // stessa cosa per OMEGA
int main () {
// definizioni delle variabili
return 0;
}
Quindi per redirigere i valori di t,x,y sul file traiettoria.dat basta usare il comando su
terminale
./ circle . x >> traiettoria . dat
Attenzione!
il comando >> aggiunge (“appende”) i dati al file dove vengono rediretti; ciò significa
che i dati contenuti nel file non vengono sovrascritti, e i nuovi dati vengono inseriti in
fondo al file. Se si vogliono sovrascrivere i dati con quelli nuovi usare:
./ circle . x > traiettoria . dat
Suggerimento: Per graficare solo due colonne di un file che ne contiene molte, la fun-
zione loadtxt va chiamata con il parametro usecols=(i,j), dove i e j sono le colonne
da graficare (partendo da 0, che indica la prima colonna). Nel nostro caso, se volessimo
graficare solo la seconda e la terza colonna il comando completo da usare nello script
python diventerebbe:
3. Create altri due grafici che mostrino l’andamento della coordinata x e della coordinata y
in funzione del tempo, rispettivamente.
3
4. Salvate i tre grafici in tre file separati, chiamati: traiettoria.png; x.png; y.png. Per
salvare i grafici con matplotlib, bisogna usare il seguento comando python
plt . savefig ( ’ traiettoria . png ’)
Suggerimento per tutti: Per fare più grafici (in finestre separate) usando lo stesso
script possiamo usare il comando plt.figure(x) dove x è un n. progressivo (ad es. 1
per la prima figura, 2 per la seconda figura, 3 per la terza figura ecc....). Lo script avrà
dunque la seguente forma
import ... # importo il modulo matplotlib . pyplot con alias plt
import ... # importo il modulo numpy con alias np
# leggo dal file traiettoria . dat i valori del tempo , delle x e
delle y
# e li associo a 3 vettori (t ,x , y )
t , x , y = np . loadtxt (.....)
Dato che la traiettoria deve essere circolare, ma python crea figure rettangolari, per
impostare lo stesso rapporto tra asse x e asse y nel primo grafico, prima di plt.plot(x,
y, ...) si può usare l’istruzione
plt . gca () . set_aspect ( ’ equal ’)
4
(c) Qual è il periodo della traiettoria?
(d) In quali punti sono massimi/minimi i valori di x(t) e y(t)? (Scrivere le risposte su
un file di testo risposte.txt ).
Terza parte (facoltativa)
L’andamento delle componenti della velocità in un moto circolare uniforme è dato da:
vx (t) = −ωR sin (ωt)
vy (t) = ωR cos (ωt) ,
1. Fate una copia del programma circle.c e rinominateo velocity.c. Modificate que-
st’ultimo in modo che calcoli anche la velocità del punto lungo la traiettoria, e inseri-
sca i risultati ottenuti nel file traiettoria.dat, aggiungendo altre due colonne oltre quelle
esistenti.
2. Graficate l’andamento della velocità in funzione del tempo lungo la traiettoria: quanto
vale il modulo della velocità? In che direzione punta il vettore velocità per t = 0? E per
t = 10? In quali punti sono massimi/minimi i valori di vx (t) e vy (t)? Qual è il significato
fisico di quello che osservate? (Scrivere le risposte sul file di testo risposte.txt creato
in precedenza.)
3. Disegnate il vettore velocità lungo la traiettoria come una freccia che punta nella direzio-
ne corretta sfruttando il seguente codice python che disegna len(x) frecce di lunghezza
(vx,vy) nei punti (x,y):
x , y , vx , vy = np . loadtxt ( ’ traiettoria . dat ’ , usecols =(1 ,2 ,3 ,4) ,
unpack = True )
for cc in range (0 , len ( x ) ) :
xi = x [ cc ]
yi = y [ cc ]
vxi = vx [ cc ]
vyi = vy [ cc ]
plt . arrow ( xi , yi , vxi , vyi , width =0.2 , head_width =0.5 ,
head_length =0.3 , fc = ’r ’ , ec = ’r ’)
5
Funzioni piú comuni della libreria math.h:
Se non indicato diversamente, le funzioni prendono un solo parametro.
acos arcocoseno
asin arcoseno
atan arcotangente
atan2(x, y) arcotangente di due parametri
ceil il più piccolo intero non minore del parametro
cos coseno
cosh coseno iperbolico
exp funzione esponenziale, calcola ex
fabs valore assoluto
floor il più grande intero non maggiore del parametro
fmod resto del numero in virgola mobile
frexp frazione e potenza di due.
ldexp operazione in virgola mobile
log logaritmo naturale
log10 logaritmo in base 10
pow(x, y) eleva un valore dato ad esponente, xy
sin seno
sinh seno iperbolico
sqrt radice quadrata
tan tangente
tanh tangente iperbolica