
L’Idea
“…Il prode Achille e la piccola tartaruga decidono di fare una gara di velocità. Achille, sicuro di vincere decide di dare un bel vantaggio alla tartaruga. Come potrebbe mai perdere il grande guarriero contro il piccolo e lento animale? ….La tartaruga parte e Achille aspetta. Solo dopo qualche minuto il prode Achille parte all’inseguimento. Achille, in ogni minuto, dimezza la distanza che lo separa dalla tartaruga… riuscirà mai l’eroe a raggiungere la sua avversaria?”.
Se aveste fatto questa domanda a Zenone di Elea, matematico e filosofo vissuto in Grecia nel V secolo avanti Cristo, vi avrebbe risposto tranquillamente di no.
Immaginate che la distanza tra Achille e la tartaruga sia un numero intero che continuate a dividere per due ad ogni minuto della gara. Il risutato, per quanto piccolo, non sarà mai uguale a zero, bensì sarà un numero decimale sempre più piccolo.
Come risolvere il problema dal punto di vista matematico?
Il buon senso lascia pensare che Achille, ovviamente, prima o poi renderà nulla la sua distanza dalla tartaruga, certo…. ma sapreste dimostrarlo?
Questa situazione, rimasta paradossale per quasi duemila anni, ha preso il nome di “Paradosso di Zenone” ed è stata risolta solo in tempi relativamente recenti.
Dove stava l’errore del matematico e filosofo greco?
Ritorniamo all’esempio.
Dopo il primo minuto Achille avrà ridotto la sua distanza ad 1/2 della distanza iniziale. Il minuto seguente sarà diventata 1/4 di quella iniziale…poi 1/8… 1/16….1/32 e così via all’infinito… Un numero sempre più piccolo, quindi, ma mai uguale a 0.
Zenone concludeva, quindi, che la somma di tali grandezze desse un valore infinito.
1/2+1/4+1/8+1/16…= infinito, quindi?
L’errore sta proprio qui.
Zenone credeva che la somma di infinite grandezze debba per forza dare una grandezza infinita.
Come ci dimostra il calcolo infinitesimale non è sempre così…infatti:
1/2+1/4+1/8+1/16…= 1
Dimostriamolo:
Data la precedente serie e dato x=1/2, moltiplichiamo la serie ottenuta per (1-x).
(1-x)(x1+x2+x3+x4…) = x-xn+1
e cioè:
x1+x2+x3+x4…= (x-xn+1 )/(1-x)
Se x corrisponde ad 1/2 la somma totale degli spazi sarà
(1/2)/(1/2)=1
Questo vuol dire che il tempo impiegato da Achille non sarà infinito…bensì finito. Quesa conclusione ci porta a trattare il problema come un semplice problema di cinematica. Mettiamo in fila i nostri dati per risolvere il problema:
– Distanza iniziale Achille-Tartaruga = 1000 metri.
– Velocità Achille = 10 m/s
– Velocità Tartaruga = 1 m/s
quindi:
Lo spazio percorso da Achille, dato da 10t, deve risultare uguale alla somma del vantaggio iniziale della tartaruga con lo spazio che essa percorre. Si ottiene così l’equazione : 10t=1000+t
Proviamo a risolverla….
10t – t = 1000
9t = 1000
t = 1000 / 9
t = 111,(1) sec.
Il buon Achille, riesce a raggiungere la tartaruga e Zenone, dopo duemila anni, dorme sonni tranquilli.
L’esempio
Nell’esempio seguente proviamo a simulare la gara tra Achille e la Tartaruga con un piccolo programma ricorsivo scritto in C#. L’esempio mette in evidenza come, nonostante la corretta implementazione del paradosso, non sia possibile rappresentarlo realmente su una macchina di qualsiasi genere.
Questo perchè la distanza tra Achille e la Tartaruga deve, per forza di cose,essere rappresentata in una variabili di grandezza finita. Come anticipato il valore diventa sempre più piccolo ma non dovrebbe mai diventare uguale a zero, bensì un valore decimale sempre più piccolo…
Le variabili però, per forza di cose, possono rappresentare solo un numero finito di valori decimali (più o meno grande)… così quando il valore diventa troppo piccolo per essere rappresentato…. Achille raggiunge la tartaruga!!!!
NOTA: A scopo puramente didattico provate ad utilizzare variabili diverse per rappresentare la distanza Achille-Tartaruga…. cosa succederà?
Il Linguaggio: C#, Framework.NET 1.1
Il Codice:
using System;
namespace ZenoneInCSharp
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Achille e la Tartaruga: un'implementazione del paradosso di Zenone. n");
Zenone(ref x);
}
static public int min=0;
static public decimal x=1000;
static void Zenone(ref decimal x)
{
if(x>0)
{
Console.WriteLine("Achille dista " + x + " metri dalla tartaruga dopo " + min + " minuti.");
Console.Writeline("(Premi Invio)");
Console.ReadLine();
x=x/2;
min++;
Zenone(ref x);
}
else
{
Console.WriteLine("Achille prende la tartaruga in" + min + " minuti.");
Console.WriteLine("abbiamo uno spazio FINITO di memoria per contenere la distanza.");
Console.Writeline("In caso contrario la tartaruga, in virtù del paradosso vincerebbe la gara.");
Console.ReadLine();
}
}
}
}
Pubblicato su www.itvirtualcommunity.net, www.itvc.net il 21/10/2004