Akilles och Sköldpaddan

I en av Zenos paradoxer springer Akilles ikapp med en sköldpadda, som startar ett stycke, L, före honom. Frågan är om Akilles någonsin kommer ikapp sköldpaddan - trots att han springer q gånger snabbare. Först måste Akilles ju springa sträckan L för att komma fram till sköldpaddans startposition. När Akilles kommit dit så har sköldpaddan hunnit ett stycke L/q. Akilles måste alltså också springa denna sträcka - men när han gjort det har sköldpaddan hunnit ytterligare ett stycke (L/q2). Hur skall Akilles komma förbi sköldpaddan?

Låt oss undersöka detta problem grafiskt med utnyttjande av matlab! (Starta matlab i ett eget fönster. Du kan med musen (vänster knapp nedtryckt) markera de bitar kod du vill använda i ditt Netscape fönster och klistra in dem (använd mellersta musknappen) i matlab fönstret.).

Först ger vi värden på variabler vi vill använda, t.ex. (prova gärna andra värden!):

  n=10;  L=1; q=2;  %Antal tidpunkter, sträcka och kvoten mellan hastigheterna

Som gammal fortran eller basic eller...? programmerare kan det vara frestande att generera läget vid de olika tidpunkterna med en loop. I matlab kan detta skrivas

   
xa(1)=L; xs(1)=L/q
for j=2:n;
  xs(j)=xs(j-1)/q;  % För varje steg krymper sträckan med en faktor q
  xa(j)=xs(j-1);    % I steg j tillryggalägger Akilles den sträcka sköldpaddan gjorde under steg j-1
end

I matlab kan detta göras mera kompakt

 

j=1:n;
xs=L*q.^(-j);       %Elementvis evaluering av tillryggalagd sträcka (Går det att göra xs=L*q.^(-([1:n]) ??
xa=[L xs(1:n-1)];
Eller ännu mer kompakt:
 
xs=L*logspace(-log10(q),-n*log10(q),n);
xa=[L xs(1:n-1)]; 

Eller ännu mer kompakt...?

Prova gärna några olika sätt att generera resultaten och övertyga dig om att de leder till samma värden. (Skriv t.ex. xa på en rad för att titta på vilka värden xa fått)

För att se hur långt Akilles och sköldpaddan kommit vid olika tillfällen måste vi summera de tillryggalagda sträckorna. Enkelt med cumsum!

 
ps=L+cumsum(xs) ;  % Sköldpaddans position
pa=cumsum(xa);

Dags att rita ett diagram (tyvärr har jag inte lyckats hitta några speciella 'sköldpadds' eller 'Akilles'-symboler i matlab, så 'o' och '+' får duga.)

 
plot (pa,'+'); hold on; plot(ps,'o'), title('Akilles (+) och Skoldpaddan(o)'),
Kommer Akilles någonsin ikapp?

Galileo och Tiden

För att förstå problemet med Akilles och sköldpaddan måste vi ta hänsyn till tiden! För oss är det så självklart att åtgången tid är viktig för beskrivning av rörelse, men var det inte alls för de gamla grekerna. Galileo arbetade mycket med tidsbegrepp och utnyttjade också grafisk framställning för att åskådliggöra data. Låt oss arbeta vidare i denna tradition!

Vi beräknar nu vid vilken tidpunkt Akilles och sköldpaddan befann sig i de olika punkterna. Lättast är att utnyttja Akilles läge, pa, eftersom han startade i position "0" vid tiden "0". Jag väljer här för enkelhets skull att sätta Akilles hastighet till 1 längdenhet/tidsenhet. Du kan naturligtvis välja något annat.

 
v=1;
t=pa/v;
hold off
plot (t,pa,'+'); hold on; plot(t,ps,'o'); title('Akilles (+) och Skoldpaddan(o)'),


Du bör nu ha fått två räta linjer. Om du drar ut dem ser du att de skär varandra i en punkt. Vid just denna tid hinner Akilles ikapp sköldpaddan! Du kan rita i linjerna med:

  
fplot('x',[0 3]) ;  fplot('1+x/2',[0 3])


Naturvetenskaplig problemlösning, Aug. 1996
http://fy.chalmers.se/~f3aamp/matlab/akilles.html
Ann-Marie.Pendrill@fy.chalmers.se