Ricerca nel sito web

Usa questo script Python per simulare il motore delle differenze di Babbage


La macchina per i calcoli seriali del matematico del diciannovesimo secolo Charles Babbage trova il suo abbinamento con il codice Python.

Charles Babbage (1791–1871) era un appassionato matematico con interessi molto ampi. È noto per aver immaginato l'idea dei computer e per aver sviluppato da solo quello che ha chiamato motore delle differenze per eseguire calcoli seriali. Era una macchina meccanica con una serie di assi e ingranaggi per eseguire calcoli, il cui risultato era una tabella stampata. Recentemente ho iniziato a leggere il suo libro del 1864, Passages from the Life of a Philosopher, in cui spiega come sono nati i motori delle differenze.

Uno dei problemi per cui il suo Motore è stato progettato per risolvere riguarda l'idea di bambini che giocano con le biglie e le dispongono in una forma piramidale progressiva, con una biglia nella fila superiore, due nella seconda, tre nella terza e così via. Per le piramidi piccole, puoi semplicemente contare le biglie per scoprire quante ce ne sono. Ma Babbage voleva creare un elenco o una tabella automatica con una colonna che mostrava il numero di righe e un'altra colonna che mostrava il numero totale di biglie.

opensource.com

Le differenze di cui parla sono in primo luogo, tutte le differenze successive nel numero di righe (pari a uno in questo esempio), e in secondo luogo, la differenza tra il numero di biglie aggiunte da una riga alla successiva (anche una). A quanto ho capito, il Motore delle differenze aggiunge successivamente il numero di biglie per ogni nuova riga al totale precedente, creando la tabella nel processo.

E così ho cominciato a giocare con le biglie nella mia testa, per così dire. Mi sono ritrovato sveglio a letto alle 5 del mattino a giocherellare mentalmente e a contare le biglie. Una cosa che mi ha colpito è che per sei righe il totale era 21 e per sette era 28, entrambe equamente divisibili per sette. Per otto o nove righe il totale era divisibile per nove. Man mano che aumentavo il numero di righe, questo schema si ripeteva. Tutto questo era nella mia testa (intanto speravo che finisse per potermi riaddormentare), quindi non era molto sistematizzato.

Quando mi sono svegliato, ho deciso di provare a capire perché ciò accadeva e se potevo prevedere quali numeri avrebbero mostrato questo fenomeno. La risposta mi ha sorpreso: risulta che ogni numero dispari di righe avrà un numero di biglie equamente divisibile per quel numero.

Ma come potrei dimostrarlo? Ecco un esempio. Per la piramide con sette file, guarda prima la piramide con sei file, con sei biglie sul fondo. Crea alcune coppie di righe: la prima e la sesta, la seconda e la quinta, la terza e la quarta. Per ciascuna di queste tre coppie la somma è sette; quindi, il totale dei tre gruppi di coppie è 21, e se aggiungi sette per la riga successiva, anch'esso rimarrebbe equamente divisibile per sette.

(Greg Pittman, CC BY-SA 4.0)

Puoi continuare a farlo con esempi specifici, ma l’obiettivo è comprendere questo fenomeno in generale. Immagina un numero pari casuale di righe, N. Crea le tue coppie, quindi aggiungi 1 a N, 2 a N-1, 3 a N-2 e così via. In ogni caso, la somma sarà N+1. Il numero di queste coppie sarà N/2, quindi il numero totale di biglie sarà N/2*(N+1), un numero uniformemente divisibile per N+1. Anche l'aggiunta di N+1 biglie per la riga successiva è equamente divisibile per N+1.

(Greg Pittman, CC BY-SA 4.0)

Ad esempio, puoi dire che una piramide con 128.948 file avrà un totale di 8.313.857.826 biglie; una piramide con 128.949 righe avrà 8.313.986.775 ed entrambi questi totali saranno equamente divisibili per 128.949.

Non so se Babbage lo abbia considerato, ma è probabile che, anche se lo facesse, direbbe che questo rappresenta solo problemi matematici di moltiplicazione e divisione di numeri a sei cifre, e voleva una macchina per fare quel genere di cose. Ha immaginato e iniziato a lavorare su una macchina analitica, che forse avrebbe potuto svolgere questo tipo di operazione.

Al giorno d'oggi, questo è un lavoro banale per i computer, quindi ecco uno script Python per contare le tue biglie prima di perderle, in sole 4 righe di codice.

#!/usr/bin/env python
# babbage.py
"""
Using Charles Babbage's conception of a marble-counting
operation for a regular pyramid of marbles,starting with
one at the top with each successive row having one more 
marble than the row above it.

Returns total number of marbles in a pyramid of any size.
"""

MarbRows = input("Enter the number of rows of marbles:  ")
MarbRows = int(MarbRows)

MarbNum = int((MarbRows)*(MarbRows+1)/2)
print ("The number of marbles is "+ str(MarbNum))

Ed è così che il motore delle differenze di Babbage incontra Python.

Articoli correlati: