Most recent comments
2021 in Books -- a Miscellany
Are, 2 years, 3 months
Moldejazz 2018
Camilla, 4 years, 8 months
Romjulen 2018
Camilla, 5 years, 3 months
Liveblogg nyttårsaften 2017
Tor, 6 years, 3 months
Liveblogg nyttårsaften 2016
Are, 7 years, 3 months
Bekjempelse av skadedyr II
Camilla, 3 months
Kort hår
Tor, 3 years, 3 months
Ravelry
Camilla, 2 years, 10 months
Melody Gardot
Camilla, 4 years, 9 months
Den årlige påske-kommentaren
Tor, 5 years
50 book challenge
Camilla, 3 months, 3 weeks
Controls
Register
Archive
+ 2004
+ 2005
+ 2006
+ 2007
+ 2008
+ 2009
+ 2010
+ 2011
+ 2012
+ 2013
+ 2014
+ 2015
+ 2016
+ 2017
+ 2018
+ 2019
+ 2020
+ 2021
+ 2022
+ 2023

Python FTW!, v.3

Jørgen ringte i går, og lurte på om jeg hadde noen tanker om en matteoppgave han hadde sett på. Oppgaven går som følger: Man begynner med en sirkel. Så tegner man en likesidet trekant som omskriver sirkelen, og en ny sirkel som omskriver trekanten.


Man gjentar så prosessen med en firkant

og videre med en femkant, etc., etc. Hver nye sirkel vil være større enn den forrige, men radien vil øke mindre for hver gang, og oppgaven går ut på å vise at når antallet figurer går mot uendelig vil radien til den største sirkelen gå mot en grense. Her må vi altså ty til matematikk.

Hvis radien til den første sirkelen er R0 vil radien til den andre sirkelen være R1, der


og videre vil radien til den neste sirkelen være

og vi ser at radien vil gå mot

Det kan tenkes at dette kan skrives om til noe mer elegant, muligens ved hjelp av en eller annen frekk representasjon av cosinus som et uendelig produkt og en smart måte å sette sammen faktorer slik at man ser et slags mønster, men jeg har ikke greid det. Oppgaven gikk imidlertid ut på å finne det minste heltallet som er større enn grensen radien går mot, og hvis man er på en pubquiz eller noe, så holder det ikke å si at du har funnet svaret representert som et uendelig produkt. De vil ha et tall. Jeg prøvde å putte uttrykket inn i Wolfram Alpha og regne ut produktet opp til et stort tall, men den sluttet å samarbeide før jeg kom til 10000, og selv om det sikkert er bra nok ville jeg ikke gi meg der, så jeg fant frem python.

Siden dette er et eksempel på en ting som er vanskelig å regne ut på papir, men lett å regne ut med bittelitt programmering, og siden Jørgen og jeg disukterte python sist jeg var i Oslo, tenkte jeg å vise hvordan man kan studere dette problemet. På Mac eller linux, åpne en terminal og skriv python. Da får du opp et interaktivt python shell som du kan bruke som en kalkulator.

For å studere dette problemet trenger vi først cosinus og pi, som vi kan importere fra math-modulen. Skriv

from math import cos, pi

Så skal vi definere en funksjon. Skriv
def f(N):
    p = 1
    for n in xrange(3,N):
        p = p * 1 / cos( pi / n )
    return p

Legg merke til at indenteringen er viktig i python. Nå har vi laget en funksjon som regner ut produktet vårt fra 3 og opp til N. Dermed kan vi lettvint teste ulike verdier av N og se om det ser ut til at vi nærmer oss en grense. Skriv for eksempel
f(1000)

og
f(10000)

og
f(100000)

og se hva som skjer. Det ser ut til at det minste heltallet som er større en grensen vi leter etter er 9, og når jeg beregnet det undelige produktet numerisk med Mathematica fikk jeg 8.7004, så vi ser at rekken har konvergert ganske fint allerede ved N=100000.

Det er naturligvis juks & fanteri å løse en slik oppgave på denne måten, men det er likevel noe tilfredsstillende i å skrive noen få linjer kode og regne ut et produkt av hundre tusen eller en millon faktorer på et lite sekund, og se at svaret konvergererer fint.

-Tor Nordam

Versions:

Version 1

Tor, 10.12.11 13:13

Version 2

Tor, 05.01.12 23:08

Version 3

Tor, 05.01.12 23:14