Albrecht och trollet

En yngling vandrar omkring i skogen, uppenbart bekymrad över något. Han tycks djupt försjunken i något problem och märker inte var han går förrän han promenerar rakt in i en stor stenbumling med näsan före.
-Aj! säger ynglingen och ger stenbumlingen en irriterad spark.
-Aj! säger stenbumlingen och ger ynglingen en irriterad spark. Ynglingen kravlar sig upp efter den plötsliga luftfärden och tittar misstroget på stenbumlingen, som reser sig och visar sig vara ett stort fult troll.
-Vem är du, som springer omkring i min skog utan att se dig för? frågar trollet med hotfull röst.
-Jag är Albrecht Einstein, herr troll, och jag gick och tänkte på ett problem och såg inte vart jag gick, säger ynglingen.
-Jaså, vad då för problem? undrar trollet nyfiket.
-Jo, vi har just läst om kvadratrötter i skolan..., börjar Einstein.
-Jaså, kvadratrötter, säger trollet. Sådana brukar jag äta till frukost. Man tar rötterna från en ung björk, och sedan...
-Nej inte sådana rötter, avbryter Einstein, utan matematiska kvadratrötter. Jag har gått och övat mig på att ta kvadratroten på en massa tal, men jag har inte lyckats med ett enda negativt tal. Det verkar inte gå överhuvudtaget.
-Jo, det går visst, det! säger trollet. Du måste bara räkna med i.
-?!! säger Einstein.
-Det där var inte speciellt intelligent sagt, säger trollet.
-Vad menar du med att räkna med i, då? frågar Einstein.
-Talet i är det tal som multiplicerat med sig självt är minus ett, säger trollet. D.v.s. i*i=-1.
-Det var ett konstigt tal, tycker Einstein. Det kan ju inte ligga på tallinjen.
-Mycket riktigt, Sherlock! säger trollet.
-Jag heter Albrecht, protesterar Einstein, som aldrig intresserat sig för någon engelsk litteratur.
-Talet i ligger på den imaginära tallinjen, fortsätter trollet oberört.
-?!! säger Einstein.
-Nu sa du så där igen! anmärker trollet. Men jag förmodar att du menar något i stil med: 'Vad är den imaginära tallinjen för något?'.
-Ja, ungefär, erkänner Einstein.
-Vet du vad ett koordinatsystem är för något? frågar trollet.
-Ja, en x-axel och en y-axel, säger Einstein.
-OK, nu gör vi om x-axeln till en tallinje. Det är den vanliga, reella tallinjen. Då är y-axeln den imaginära tallinjen. Talet i ligger där ett på y-axeln ligger. Två på y-axeln blir i*2 på den imaginära tallinjen.
-Vad smart! utropar Einstein. Då kan man dra roten ur minus ett! Roten ur minus ett är i! Finns det kvadratrötter till alla negativa tal?
-Ja visst! säger trollet. Kvadratroten ur minus fyra är i gånger två, eftersom:
(i*2) * (i*2) = (i*i) * (2*2) = (-1) * 4 = -4
-Aha! Och kvadratroten ur minus nio är i gånger tre! Och kvadratroten ur minus två är i gånger kvadratroten ur två! Och...
-Ja, ja, lugna dig! utropar trollet. Kan du hitta kvadratroten till i, då?
-Ja visst! Det blir... Det blir... Öhh...
-Nu blev du tyst, minsann, säger trollet. Det är för att du inte vet vad ett komplext tal är för något.
-?!! säger Einstein.
-Det var tredje gången du sa '?!!', säger trollet irriterat. Och den här gången menar du antagligen 'Vad är ett komplext tal?'
-Ja, vad är ett komplicerat tal för något? säger Einstein.
-Ett komplext tal, sa jag! Det är vad du får om du lägger ihop ett reellt tal och ett imaginärt tal.
-Jaha. Blir det en tallinje till, då? säger Einstein.
-Nej, då, försäkrar trollet. Ta koordinatsystemet igen. Om du lägger ihop ett och i, var hamnar du då?
-Det går inte, säger Einstein efter en stunds funderande. Då hamnar jag på båda axlarna.
-Det kan man säga, men egentligen får du en punkt utanför båda axlarna. På koordinat (1,1) närmare bestämt.
-Aha! utropar Einstein. Varje punkt i koordinatsystemet är ett komplext tal! Punkten (2,2) är två plus i gånger två! Och (2,-2) är två minus i gånger två! Nu fattar jag!
-Bravo, Sherlock! säger trollet.
-Albrecht heter jag, säger Einstein. Vad kan man göra med komplexa tal, då? Jag har aldrig behövt använda några.
-Pja..., säger trollet. Man kan till exempel rita bilder med dem.
-Rita bilder! utbrister Einstein. Det gör ju bara konstnärer, och de är för det mesta knäppa. Skär av sig öronen och sånt där.
-Åja, jag har faktiskt själv ritat några bilder som inte är så dumma, säger trollet. Tycker du jag ser knäpp ut?
(Här infinner sig några sekunders pinsam tystnad)
-Hmmmf! säger trollet irriterat. Kom med till min grotta, så ska jag visa dig vad jag menar. Trollet lyfter undan ett stort klippblock och en grottöppning avslöjas innanför. Einstein följer osäkert med in. Längst in står en dator, som trollet sätter på.
-Wow! utbrister Einstein. En Amiga 5000 med åtta 68050-processorer på 102 MHz, 2 GB minne, 84 GB hårddisk, Extra-Super-Hires-skärm och Near Speach Quality! Wow igen!
-Vi troll är inte så ociviliserade som folk tror, säger trollet smickrad. Men titta nu! Ett konstigt mönster fyller skärmen på några sekunder.
-Oj, det var snyggt, säger Einstein. Fast det föreställer ju ingenting. Har du ritat det med Deluxe Paint VIII?
-Nej, det har datorn räknat fram, säger trollet. Med ett program som jag har gjort själv, tillägger han stolt.
-Kan man räkna ut sådana bilder? undrar Einstein förbryllad.
-Ja, om man använder komlexa tal. Hela bilden är en rektangel i koordinatsystemet, som förresten ofta kallas det komplexa talplanet. Varje punkt i bilden är en punkt i koordinatsystemet och representerar ett komplext tal. Och för varje punkt används en speciell formel för att räkna ut vilken färg punkten ska få.
-Vad då för formel? undrar Einstein
-Det är olika. Man kan till exempel ta:
(Trollet skriver på ett papper)
z(n+1) = z(n) * z(n) + z(0)
-?!! säger Einstein.
-?!! härmar trollet.
-Jag menar... Öhh...
-Varför ska jag hela tiden gissa vad du menar? frågar trollet. Den här gången undrar du kanske hur man använder den formeln för att få fram en färg på bildpunkten?
-Ja, det gör jag nog, svarar Einstein osäkert.
-Det var det jag trodde, säger trollet. z(0) är utgångsvärdet, det komplexa tal som motsvarar bildpunktens värde. z(1) är det första värdet du räknar ut. z(2) är det andra värdet du räknar ut o.s.v. Alltså:
z(1) = z(0) * z(0) + z(0)
z(2) = z(1) * z(1) + z(0)
o.s.v. Om absolutvärdet av z någon gång blir större än två, slutar man räkna på den punkten. Sen får den punkten en viss färg beroende på hur många gånger man räknade ut z. Om man t.ex. kommit till z(15) innan z blev större än två, får punkten en speciell färg. Om man kommit till z(16) så får den en annan färg. Förstår du?
-Jag tror det, säger Einstein. Hur många gånger får man räkna som mest?
-I evighet, säger trollet. En del punkter blir aldrig större än två. Då måste man bestämma i förväg hur många gånger man ska räkna innan man slutar i vilket fall och då får den punkten en egen färg.
-Men hur plussar och gångrar man komplexa tal, då? frågar Einstein.
-Adderar och multiplicerar heter det, rättar trollet. Vad lär du dig i skolan, egentligen? Och så tycker ni människor att troll är dumma och okunniga! tillägger han. Nåja, att addera är ganska enkelt. Det är bara att lägga ihop realdelen och imaginärdelen var för sig, så här:
(a+i*b) + (c+i*d) = (a+c) + i*(b+d)
Multiplikation är lite besvärligare: (a+i*b) * (c+i*d) = (a*c) + i*(a*d) + i*(b*c) + (i*i)*(b*d) = (a*c-b*d) + i*(a*d+b*c)
-Oj, det ser besvärligt ut, säger Einstein.
-Ja, fast det ser lättare ut om man stryker mellanledet och onödiga multiplikationstecken: (a+ib) * (c+id) = (ac-bd) + i(ad+bc)
-Nu ser det bättre ut, säger Einstein. Delat med, då?
-DIVISION, säger trollet tydligt. Det är ännu besvärligare, men det behöver du inte för att räkna på den här formeln. (Dessutom går det inte att visa ett bråk i det här programmet - förf.anm.) Däremot måste du veta vad absolutbeloppet av ett komplext tal är för något. Det är längden på den räta linje som går mellan origo och talet i fråga. Om du vet vad origo är för något, alltså.
-Jadå, det är skärningspunkten för x-axeln och y-axeln, säger Einstein ivrigt. Hur räknar man ut det då?
-Det är enkelt om man kan Pythagoras sats, säger trollet.
-Den förfärliga brygd som trollen förgiftar sina offer med...? börjar Einstein, och hejdar sig alldeles för sent.
-Förgiftar?!! utbrister trollet förgrymmad. Här förgiftas ingenting! Sådana dumheter lär ni er i skolan, men inte Pythagoras sats! Pythagoras var en stor grekisk matematiker som beskrev förhållandet mellan sidorna i en rätvinklig triangel! Vet du vad en rätvinklig triangel är för något?
-Ja, det är en triangel med en vinkel på nittio grader, säger Einstein försiktigt, lite blek efter trollets utbrott.
-Bra! Kvadraten på hypotenusan är lika med summan av de båda kvadraterna på kateterna.
Einstein är just på väg att säga '?!!' igen, men skiner plötsligt upp.
-Aha! Hypotenusan är den förfärliga kvinna som har ormar till hår och är så förskräckligt ful att den som tittar på henne förvandlas till sten. Fast kateterna har jag inte hört talas om. Vad har det med trianglar att göra?
(Djup suck från trollet.) -Nej, Einstein, hypotenusan är den längsta sidan i triangeln och kateterna är de båda korta, som bildar den räta vinkeln. Om längden på kateterna är a och b och hypotenusans längd är c, så säger Pythagoras sats:
a*a + b*b = c*c
-Åh, nu förstår jag, säger Einstein. Men vad har det med absolutbeloppet för komplexa tal att göra?
-Jo, säger trollet, om du drar en linje till från din punkt till en av axlarna, i rät vinkel mot axeln, så bildas en rätvinklig triangel.
-Nu förstår jag! utropar Einstein. Titta här:
|a+i*b| = Kvadratroten ur (a*a + b*b)
Skitenkelt!
-Så lagom enkelt för en minut sedan. Förgiftar! mumlar trollet. Då kan du göra ett eget fraktalprogram nu, fortsätter han.
-Fraktal? Det programspråket kan jag inte, säger Einstein.
-Det är inget programspråk, säger trollet muntert. Det är sådana här bilder som kallas fraktaler.
-Men eftersom det är matematiskt uträknat så blir det väl samma bild varje gång man kör det? frågar Einstein.
-Javisst, säger trollet. Om man har samma fromel, alltså. Men man kan förstora en liten del av bilden och få en ny bild.
-Men då blir det väl bara stora rutor med samma färg. Det har jag gjort med Deluxe Paint, säger Einstein.
-Nej, då, försäkrar trollet. Det kommer fram nya detaljer om du förstorar en bit av bilden på rätt sätt. Den här bilden täcker en rektangel i koordinatsystemet från -2 till +1 på x-axeln och från -1.2 till +1.2 på y-axeln. Om man ändrar dem till -0.4 och +0.25 på x-axeln och till +0.6 och +1.12 på y-axeln - det motsvarar en rektangel som täcker den där klumpen längst upp - så får man en ny bild där den där klumpen är mycket större.
Trollet ändrar några siffror i sitt program och kör det igen. En ny bild ritas upp på skärmen.
-Wow! utropar Einstein. Kan man förstora hur mycket som helst?
-Ja, teoretiskt, svarar trollet. Men ju mer man förstorar desto fler decimaler behöver man och desto längre tid tar det att räkna ut bilden. Dessutom måste man öka maxnivån för hur länge man räknar på en punkt när man förstorar många gånger, annars får man inte fler detaljer efter ett tag. Men 128 bitars precision , som den här systemversionen stöder, räcker för det mesta till.
-Kan du inte förstora den där, undrar Einstein och pekar på en liten svart fläck på bilden.
-Javisst, säger trollet och ändrar koordinaterna till -0.17 och -0.147 på x-axeln och till 1.0242 och 1.0426 på y-axeln.
-Men det är ju samma som den första bilden, säger Einstein förvånat. Fast nu är den på snedden.
-Ja, fast den är bara nästan likadan, säger trollet. Den figuren finns på många ställen i den här bilden. Ser du den där lilla svarta fläcken längst ut i "toppen" på figuren? Det är också en sådan figur.
-Det här måste jag pröva hemma, säger Einstein och rusar hemåt. Tyvärr har han så bråttom att han snubblar på en gren och bryter benet. Men så fort han fått benet gipsat sätter han sig framför sin gamla Amiga 3000 och gör ett program i AmigaBASIC som ritar fraktaler. I flera dygn i sträck sitter han och ritar olika typer av fraktaler tills han bryter ihop av överansträngning och sömnbrist. Men detta är det program han gjorde:

'Fraktalprogram
'av Albrecht Einstein 'Bildens specifika variabler 'Ändra dessa för att få en annan bild x1 = -2 x2 = 1 y1 = -1.2 y2 = 1.2 nmax = 16 'Öppna en 32-färgers lores-skärm SCREEN 2,320,256,5,1 WINDOW 2,,,0,2 'Huvudloop börjar FOR y = 0 TO 255 ypos = y2 - (y2-y1) * y / 255 FOR x = 0 TO 319 xpos = x1 + (x2-x1) * x / 319 'Beräkningsloop 'Formel: z(n+1) = z(n) * z(n) + z(0) '(a+ib) * (a+ib) = (aa-bb) + i*2ab n = 0 zx = xpos zy = ypos zx2 = zx * zx zy2 = zy * zy WHILE n

Förf.anm.: Det ska tilläggas att en fraktalbild normalt tar ganska lång tid, speciellt med AmigaBASIC. Det är en klar fördel om man har en Amiga 5000 och kan programmera C eller Assembler...

Tobias Bergsten


Till dikterna