# Macchina differenziale

La macchina differenziale (in inglese Difference Engine) è un'apparecchiatura meccanica sviluppata per tabulare funzioni polinomiali. La sua utilità discende dal fatto che tanto i logaritmi quanto le funzioni trigonometriche possono essere approssimate con i polinomi grazie alle serie di Taylor. Pertanto, la macchina differenziale apre la possibilità di accedere a una vasta gamma di calcoli matematici.

## Storia

L'ingegnere tedesco Johann Helfrich von Müller aveva descritto l'idea di una macchina simile in un libro pubblicato nel 1786, ma, non riuscendo a trovare i fondi necessari, non poté realizzarla.
Nel 1822 Charles Babbage propose lo sviluppo della macchina in un articolo inviato il 14 giugno alla Royal Astronomical Society e dal titolo "Note on the application of machinery to the computation of very big mathematical tables". La macchina avrebbe utilizzato il sistema decimale e sarebbe stata alimentata in modo meccanico tramite il movimento di una manovella che avrebbe fatto girare gli ingranaggi.
Il governo Britannico inizialmente finanziò il progetto, ma in seguito, quando nel 1842 ricevette da Babbage la richiesta di nuovi fondi nonostante lo sviluppo della macchina sembrasse a un punto morto, decise di abbandonarlo. Nel frattempo aveva comunque già speso una cifra pari a 17.470 sterline, quindi venti volte maggiore la spesa per la locomotiva a vapore. Sulla decisione di abbandono del progetto influì, inoltre, l'opinione negativa sull'utilità della macchina espressa dall'astronomo reale George Biddell Airy.
Il dispositivo era di una notevole complessità e di grandi dimensioni strutturali: basti pensare che richiedeva l'assemblaggio di 25.000 parti, e la macchina completa sarebbe stata alta circa due metri e mezzo, larga due metri e profonda uno, con un peso di varie tonnellate.
Babbage, durante la progettazione della macchina differenziale, aveva lavorato alla più generale macchina analitica. L'esperienza dello sviluppo di quest'ultima gli aveva permesso di migliorare il progetto della macchina differenziale e di svilupparne una seconda versione tra il 1847 e il 1849.
Ispirandosi al progetto di Babbage, Per Georg Scheutz costruì diverse macchine differenziali a partire dal 1855; una di queste venne venduta al governo Britannico nel 1859. Martin Wiberg migliorò le macchine di Scheutz e le utilizzò per produrre delle tavole logaritmiche che poi pubblicò.
Basandosi sui progetti originali di Babbage il Museo della scienza di Londra costruì una versione funzionante della seconda versione della macchina differenziale. Questa venne realizzata sotto la supervisione di Doron Swade che seguì il progetto tra il 1989 e il 1991. Nel 2000 venne realizzata anche la stampante che, ricevuti i dati dalla macchina differenziale, ne permetteva la riproduzione su carta. La trascrizione dei disegni originali in disegni utilizzabili per la realizzazione dei componenti mostrò che Babbage aveva commesso alcuni errori minori di progettazione, ma nulla che potesse inficiare il funzionamento della macchina. La macchina differenziale e la stampante vennero costruite con i materiali e le tolleranze disponibili nel XIX secolo e questo permise di dimostrare che il progetto di Babbage, se fosse stato finanziato adeguatamente, avrebbe potuto realmente funzionare.

## Operazioni

La macchina è formata da un certo numero di colonne numerate da 1 a N. Ogni colonna è in grado di memorizzare un numero decimale. L'unica operazione che la macchina è in grado di fare è l'addizione del valore presente nella colonna n + 1 alla colonna n immettendo il risultato nella colonna n. La colonna N poteva memorizzare solo delle costanti, la colonna 1 mostrava il risultato e se presente la stampante ne permetteva la stampa su carta.
La macchina era programmata mettendo i valori iniziali nelle colonne. La colonna 1 veniva regolata con il valore di partenza del polinomio. La colonna 2 con il valore della prima derivata del polinomio nel punto X. Le colonne successive contenevano i valori delle derivate successive sempre nello stesso punto.

## Sincronizzazione

Il progetto di Babbage prevedeva una somma completa con riporto ogni quattro rotazioni dei cilindri che formavano le colonne. Le colonne pari e dispari si alternavano ogni due rotazioni. Le operazioni seguivano la seguente sequenza:
* Addizione delle colonne n+1
* Propagazione dei riporti
* Addizione delle colonne n-1
* Resto

## Metodo delle differenze

Dato che la macchina non era in grado di eseguire le moltiplicazioni non poteva calcolare il valore dei polinomi. Tuttavia se era noto il valore di X e delle sue derivate la macchina poteva calcolare i valori vicini usando il metodo delle differenze finite.
Il metodo delle differenze finite si basa sul polinomio interpolatore di Newton. Il funzionamento verrà illustrato con un breve esempio. Considerando il seguente polinomio quadratico:
    $p(x)=2x^{2}-3x+2$
Supponendo di voler tabulati i valori p(0), p(0.1), p(0.2), p(0.3), p(0.4) ecc., la tabella viene costruita nel seguente modo: la prima colonna contiene il valore del polinomio, la seconda colonna contiene la differenza dei valori contenuti nella prima colonna, la terza colonna contiene la differenza dei valori contenuti nella seconda colonna.
| Polinomio | differenza | differenza |
| p(0)=2.0 | | |
| | 2.0−1.72=0.28 | |
| p(0.1)=1.72 | | 0.28−0.24=0.04 |
| | 1.72−1.48=0.24 | |
| p(0.2)=1.48 | | 0.24−0.20=0.04 |
| | 1.48−1.28=0.20 | |
| p(0.3)=1.28 | | 0.20−0.16=0.04 |
| | 1.28−1.12=0.16 | |
| p(0.4)=1.12 | | |
Si noti che il valore della terza colonna è costante. Questo non è un caso: per ogni polinomio di grado n la colonna n+1 contiene un valore che è costante; questo è cruciale per il funzionamento della macchina.
Si è mostrato come costruire la tabella partendo da sinistra verso destra, lavorando invece da destra verso sinistra si possono calcolare gli altri valori del polinomio.
| Polinomio | differenza | differenza |
| p(0.3)=1.28 | | 0.20−0.16=0.04 |
| | 1.28−1.12=0.16 | |
| p(0.4)=1.12 | | 0.16−0.12=0.04 |
| | 1.12−1=0.12 | |
| p(0.5)=1 | | 0.12−0.08=0.04 |
| | 1−0.92=0.08 | |
| p(0.6)=0.92 | | |
Per calcolare p(0.5) basta usare i valori già presenti alla fine della tabella. Si inizia sapendo che la terza colonna dovrà contenere il valore 0.04. Si continua nella seconda colonna sapendo che il valore presente è 0.16 e che questo valore meno quello incognito deve dare come risultato 0.04. Segue quindi che il valore incognito è 0.12 (0.16-0.12=0.04). Adesso che ha il valore della seconda colonna si può passare alla prima colonna. Si sa che il p(0.4) vale 1.12, che p(0.4)-p(0.5) vale 0.12, ne segue che p(0.5) vale 1 (1.12-1=0.12). Per calcolare p(0.6) si procede alla stessa maniera. La terza colonna deve contenere 0.04, quindi la seconda deve valere 0.08 e di conseguenza la prima colonna vale 0.92. Quindi il valore di p(0.6) è 0.92.
Questo metodo può essere reiterato quante volte si vuole. I valori dei polinomi sono ottenuti per sottrazioni senza dover effettuare moltiplicazioni e quindi la macchina differenziale doveva essere in grado di eseguire solamente delle sottrazioni. Per eseguire le operazioni era necessario tenere traccia dei valori precedenti a quelli che si stavano calcolando. Così, se il polinomio aveva grado n, erano necessarie n+1 colonne.
Il progetto della seconda macchina differenziale di Babbage, costruita nel 1991, prevedeva la possibilità di contenere sette numeri da trentuno cifre; la macchina poteva quindi calcolare polinomi fino al 7º grado (si ricordi che l'ultimo valore è una costante). La migliore macchina di Scheutz era in grado di calcolare quattro numeri con quindici cifre.