Si chiama pendolo semplice un punto materiale di massa m appeso tramite un filo inestensibile, di lunghezza \(\ell\) e massa trascurabile, a un punto O.
Dal momento in cui il pendolo viene spostato dalla sua verticale e quindi lasciato, esso inizierà un moto oscillatorio che, in caso di smorzamento trascurabile, proseguirà identico fino ad una nuova interazione con l’ambiente.
Volendo ricavare il periodo delle oscillazioni possiamo scrivere le equazioni di Newton per la massa in direzione centripeta e tangenziale:
Notando che il moto è circolare, per l’accelerazione centripeta \(\left(a_{c}=l \dot{\theta}^{2}\right) \) e l’accelerazione tangenziale \(\left(a_{t}=l \ddot{\theta}\right)\), dalla seconda equazione si ha:
che è l’equazione differenziale da cui si ottiene l’elongazione angolare istantanea del pendolo rispetto alla verticale.
Poiché la funzione cercata è argomento di una funzione trascendente, questa è una
equazione differenziale ordinaria non-lineare del secondo ordine.
In questo caso specifico esiste una complessa espressione analitica per il periodo (grazie al fatto che, per una data condizione iniziale, esso è una costante del moto), ma in generale, la soluzione numerica è l’unica strada possibile in simili casi.
Facciamo nostra l’approssimazione armonica, o di piccole oscillazioni:
Questa approssimazione è discretamente robusta: l’errore sulla forza per \(\theta = 0.1\text{rad}=57^o\) è circa 0.02%, e per un elongazione massima tripla (quindi oltre \(15^o\)) circa 0.5%.
L’equazione diventa:
che si riconosce essere l’equazione di un oscillatore armonico di frequenza \(\omega = \sqrt{g/l}\) e di periodo
Nel caso armonico, la frequenza, e con essa il periodo, non dipende dall’elongazione iniziale.
Calcolando il periodo da questa formula esatta (nell’approssimazione armonica) incorriamo inevitabilmente in vari errori. Oltre alle incertezze su \(g\) e \(\ell\), dobbiamo rappresentare il numero irrazionale \(\pi\) con un numero (ovviamente) finito di cifre, calcolare la radice quadrata, e moltiplicare i vari fattori. Ognuna di queste operazioni genera e propaga errori, schematizzabili come dovuti a:
- dati: incertezze sul valore o misura degli eventuali parametri e dei dati di input;
- rappresentazione: i numeri sono rappresentati con una precisione finita;
- aritmetica : errori dovuti all’implementazione approssimata delle operazioni
e noti genericamente come errori di round-off o di rappresentazione. In aggiunta, abbiamo errori di approssimazione, generati cioè dalle approssimazioni del modello fisico (quella armonica, ad esempio, fatta prima). Infine, molto importanti, ci sono gli errori algoritmici, che originano dalla maniera in cui scegliamo di approssimare le operazioni di alto livello nel nostro algoritmo di simulazione.
L’idea è di scrivere un codice per risolvere l’equazione differenziale dell’oscillatore armonico generica, implementando i metodi di : Eulero, Eulero-Cromer e Verlet.
Gli schemi di integrazione sono:
- Eulero: \(v_{n+1}=v_{n}+\tau F_{n} ; x_{n+1}=x_{n}+\tau v_{n}\)
- Eulero-Cromer: \(v_{n+1}=v_{n}+\tau F_{n} ; x_{n+1}=x_{n}+\tau v_{n+1}\)
- Verlet: \(x_{n+1}=x_{n}+\tau v_{n}+F_{n} \frac{\tau^{2}}{2} ; v_{n+1}=v_{n}+\frac{\tau^{2}}{2}\left(F_{n}+F_{n+1}\right) \)
dove con \(\tau\) indichiamo il passo temporale e con \(F_n\) indichiamo l’accelerazione, o la forza diviso la massa, a cui è sottoposto il nostro sistema. Nel nostro caso avremo:
\(\frac{d^{2} \theta}{d t^{2}}=-\frac{g}{l} \sin \theta=-\omega^{2} \sin \theta\)
La traduzione in codice di questi schemi è immediata. Vediamola di seguito e poi ci costruiamo il programma intorno:
#Accelerazione
F0 = -g/l*sin(x0)
#Eulero
v1 = v0+tau*F0
x1 = x0+tau*v0
#Eulero-Cromer
v1 = v0+tau*F0
x1 = x0+tau*v1
#velocity-Verlet
x1 = x0+v0*tau+0.5*F0*tau**2
F1 = -g/l*sin(x1)
v1 = v0+0.5*tau*(F0+F1)
Nel codice, facciamo uso di due variabili una denominata con 0 l’altra con 1 che si riferiscono al tempo \(n\) e \(n+1\) rispettivamente. Se ora si definiscono le costanti necessarie (g, l, τ) e le condizioni iniziali (x0,v0), la serie di righe scritte sopra ci permettono di calcolare la posizione e la velocità dopo un tempo τ, con il metodo che desideriamo.
Vediamo di seguito tali definizioni:
import numpy as np
import matplotlib.pyplot as plt
from math import sin, cos, pi
g = 1
l = 1
x0 = np.deg2rad(5)
v0 = 0.0
tau = 0.01
Facciamo notare l’uso della funzione deg2rad(alpha)
che permette di convertire l’angolo alpha espresso in gradi sessagesimali in radianti. Questo è necessario perché la funzione sin(alpha)
che troviamo per calcolare la forza prende in input un angolo alpha
in radianti. Esiste anche la funzione inversa rad2deg()
.
Ovviamente vorremo prolungare la nostra simulazione, calcolando la posizione e la velocità del nostro oscillatore, per un periodo di tempo più lungo di in solo passo τ, per esempio per T = N · τ, con N a piacere. E facile capire che dovremo ripetere lo schema di integrazione scelto per un numero N di volte, mediante un ciclo for
,
come vediamo di seguito:
N = 3000
for t_step in range(N):
#Accelerazione
F0 = -g/l*sin(x0)
#Eulero-Cromer
v1 = v0+tau*F0
x1 = x0+tau*v1
x0 = x1
v0 = v1
Nelle ultime due righe ci ricordiamo di aggiornare la variabile della posizione e della velocità denominata con 0 con quelle appena calcolate, denominate con 1.
A questo punto il nostro programma calcola la posizione e la velocità dell’oscillatore per gli N istanti di durata τ, ma è ancora poco utile, perché dopo l’uscita dal ciclo for
avremo a disposizione solo l’ultimo valori di posizione e velocità. Sarebbe utile quindi registrare l’intera dinamica per poi studiarne l’andamento mediante un grafico, per esempio. Facciamo in questo modo:
• Nelle righe iniziali del programma, quindi prima del ciclo for
, creiamo due array:
N = 3000
x_vet = np.zeros(N+1)
v_vet = np.zeros(N+1)
• registriamo nel primo elemento degli array le condizioni iniziali:
x_vet[0] = x0
v_vet[0] = v0
• all’interno del ciclo for registriamo ogni nuovo valore di x e v all’interno dei rispettivi array:
for timestep in range(N):
#Accelerazione
F0 = -g/l*sin(x0)
x1 = x0+v0*tau+0.5*F0*tau**2
F1 = -g/l*sin(x1)
v1 = v0+0.5*tau*(F0+F1)
x0 = x1
v0 = v1
x_vet[timestep+1] = x0
v_vet[timestep+1] = v0
Ora una volta eseguite le righe di codice precedenti potremo fare il grafico della posizione (velocità) in funzione del tempo, creando prima un array con tutti gli istanti temporali usati nella integrazione, mediante la funzione linspace()
:
time_vet = np.linspace (0,N*tau, N+1)
plt.xlabel('Tempo (sec)')
plt.ylabel('Ampiezza (rad)')
plt.plot(time_vet, x_vet)
plt.show()
Ecco il codice completo:
import numpy as np
import matplotlib.pyplot as plt
from math import sin, cos, pi
g = 1
l = 1
x0 = np.deg2rad(5)
v0 = 0.0
tau = 0.01
N = 3000
x_vet = np.zeros(N+1)
v_vet = np.zeros(N+1)
x_vet[0] = x0
v_vet[0] = v0
for timestep in range(N):
#Accelerazione
F0 = -g/l*sin(x0)
x1 = x0+v0*tau+0.5*F0*tau**2
F1 = -g/l*sin(x1)
v1 = v0+0.5*tau*(F0+F1)
x0 = x1
v0 = v1
x_vet[timestep+1] = x0
v_vet[timestep+1] = v0
time_vet = np.linspace (0,N*tau, N+1)
plt.xlabel('Tempo (sec)')
plt.ylabel('Ampiezza (rad)')
plt.plot(time_vet, x_vet)
plt.show()
e questo è il diagramma ottenuto:
There are many techniques to prove various statements. The simplest ones are direct proof, where you show that if the first statement (P) is true then the second statement (Q) is also true; the proof by contrapositive, where you assume that the negation of the second statement (~Q) is true and show that this forces the negation of the first statement (~P) to be true as well. Mathematical induction is a technique used to prove that an all statements of an infinite list of statements (instead of just two like in the first two techniques mentioned) are all true.
To motivate the discussion, let’s first examine the kinds of statements that induction is used to prove.
Consider the following statement.
Conjecture. The sum of the first \(n\) odd natural numbers equals \(n^2\).
The following table illustrates what this conjecture says. Each row is headed by a natural number \(n\), followed by the sum of the first \(n\) odd
natural numbers, followed by \(n^2\).
Note that in the first five lines of the table, the sum of the first \(n\) odd numbers really does add up to \(n^2\). Notice also that these first five lines indicate that the \(n\)th odd natural number (the last number in each sum)
is \(2n-1\). (For instance, when \(n=2\), the second odd natural number is \(2 \cdot 2−1 =3\); when \(n=3\), the third odd natural number is \(2 \cdot 3−1 =5\), etc.)
The table raises a question. Does the sum \(1+3+5+7+\cdots+(2n−1)\) really always equal \(n^2\)? In other words, is the conjecture true?
Let’s rephrase this as follows. For each natural number \(n\) (i.e., for each
line of the table), we have a statement \(S_n\), as follows:
Our question is: Are all of these statements true?
Mathematical induction is designed to answer just this kind of question.
It is used when we have a set of statements \(S_1,S_2,S_3,\cdots ,S_n,\cdots \), and weneed to prove that they are all true. The method is really quite simple.
In this setup, the first step (1) is called the basis step. Because \(S1\) is usually a very simple statement, the basis step is often quite easy to do.
The second step (2) is called the inductive step. In the inductive step direct proof is most often used to prove \(S_k \Rightarrow S_{k+1}\), so this step is usually carried out by assuming \(S_k\) is true and showing this forces \(S_{k+1}\) to be true.
The assumption that \(S_k\) is true is called the inductive hypothesis.
Now let’s apply this technique to our original conjecture that the sum of the first \(n\) odd natural numbers equals \(n^2\). Our goal is to show that for each \(n \in \mathbf{N}\), the statement \(S_n : 1+3+5+7+\cdots+(2n−1) = n^2\) is true. Before getting started, observe that \(S_k\) is obtained from \(S_n\) by plugging \(k\) in for \(n\).
Thus \(S_k\) is the statement \(S_k : 1+3+5+7+\cdots+(2k −1)=k^2\). Also, we get \(S_{k+1}\) by plugging in \(k +1\) for \(n\), so that \(S_{k+1} : 1+3+5+7+\cdots+(2(k +1)−1) =(k +1)^2\).
More:
la lettera…
“Anni fa – non molti, è bene saperlo in anticipo – un carteggio di raro tenore s’intrecciò tra due coniugi siciliani, lui emigrato per lavoro in Germania, lei rimasta in paese ad accudire la vecchia suocera e la giovanissima prole. Analfabeti entrambi e riluttanti a dividere con uno scrivano estraneo e venale i segreti della propria intimità (fossero effusioni d’affetto o notizie di spicciola economia domestica), i due sposi ricorsero, per corrispondere, ad un linguaggio di convenzione, un sistema di pittografie in sequenza, il cui senso risultasse intelligibile al destinatario. “Amore mio caro, il mio cuore è trafitto dal tuo pensiero lontano, e ti tendo le braccia insieme ai tre figli. Tutti in buona salute, io e i due grandicelli, indisposto, ma non gravemente, il piccino. La precedente lettera che t’ho spedito non ha ricevuto risposta e ne soffro. Tua madre, colpita da un male, si trova in ospedale, dove mi reco a trovarla. Non temere che ci vada a mani vuote; né sola, dando esca a malelingue: m’accompagna il figlio mezzano, mentre il maggiore rimane a guardare il minore. Il nostro poderetto, ho provveduto che fosse arato e seminato. Ai due “giornalieri” ho dato 150.000 lire. Si son fatte le elezioni per il Comune. Ho votato Democrazia Cristiana, come il parroco m’ha suggerito. Per la Falce e Martello la sconfitta è stata grande: come fossero morti, in un cataletto.
Ma che vincano gli uni o gli altri, è tutt’una. Nulla cambia per noi poveretti: abbiamo zappato ieri, zapperemo ancora domani. Molte ulive quest’anno, dai nostri ulivi. L’uomo e i due ragazzi che ho assunto, l’uno per bacchiarle, gli altri per raccoglierle a terra, mi sono costati 27.000 lire. Altre 12.000 lire le ho spese per il frantoio. Ne ho ricavato tant’olio da riempire una giara grande e una piccola. Posso ricavarne il prezzo corrente che è di 1.300 lire al litro.
Amore lontano, il mio cuore ti pensa. Ora, soprattutto, che viene Natale e vorrei essere insieme a te, cuore a cuore. Un abbraccio, dunque, da me e dai tre figliolini. Arrivederci, amore caro, il mio cuore è tuo e ti sono fedele, unita a te come i nostri due anelli”.
– Gesualdo Bufalino, La luce e il lutto