Näytetään tekstit, joissa on tunniste Mathematica. Näytä kaikki tekstit
Näytetään tekstit, joissa on tunniste Mathematica. Näytä kaikki tekstit

sunnuntai 17. joulukuuta 2023

Littlewoodin joulukranssi



Joulukoristeeksi sopii varmaankin yllä olevan kuvion mukainen kranssi. Ajattelin kutsua tätä englantilaisen matemaatikon John Edensor Littlewoodin  mukaan Littlewoodin kranssiksi. Toivon, että hänellä ei ole mitään nimitystä vastaan.

Kranssin vihreä osa esittää astetta 14 olevien Littlewoodin polynomien nollakohtia kompleksitasossa. Littlewoodin polynomi taas on polynomi, jonka kaikki kertoimet ovat lukuja $+1$ ja $-1$. Astetta 14 olevia polynomeja on tällöin rajallinen määrä, $2^{15} = 32768$ kappaletta, joten kaikkien nollakohdat on mahdollista laskea. Aivan kaikkia näitäkään ei tarvitse laskea, koska polynomin nollakohdat eivät muutu, kun se kerrotaan luvulla $-1$. Puolet voidaan siis jättää pois, ja riittää hakea $16384$ polynomin nollakohdat.

Laskin kuvion Mathematica-ohjelmistolla kotikoneessani. Aikaa meni vajaa minuutti. Ei siis mikään raskas laskentatyö, vaikka käsin laskettaessa aikaa epäilemättä hieman enemmän meneekin. Alla on hiomaton Mathematica-koodi. Tässä ei edes ole otettu huomioon polynomien määrän puolittamista. Varsin vähäisellä vaivalla voi tehdä matemaattisia kokeiluja tai leikittelyjä.





Polynomin asteluvun noustessa nollakohtien määrä kasvaa nopeasti ja niiden muodostama rengas tihenee. Nollakohdat pysyvät kuitenkin rajatulla alueella. Voidaan osoittaa, että kaikkien eriasteisten Littlewoodin polynomien nollakohtien joukko $D$ sijaitsee renkaassa $\{\frac{1}{2} < |z| < 2\}$. Rengas $\{2^{-1/4} < |z| < 2^{1/4}\}$ puolestaan sisältyy nollakohtien joukon sulkeumaan $\overline{D}$. Alla 10. asteen polynomista syntyvä kuvio.




Erilaisten kuvioiden muodostamista voidaan tietenkin jatkaa valitsemalla polynomien kertoimet jollakin muulla vastaavalla tavalla. Alla olevat kuviot syntyvät 12. asteen polynomista, jonka kertoimina ovat luvut $0$ ja $1$ (vasen kuvio) tai $i$ ja $1$ (oikea kuvio).

  



Toivotan lukijoille rauhallista joulua!

sunnuntai 18. kesäkuuta 2023

Tekoäly, faktat ja laskeminen

Helsingin korkein rakennus?
(© Joneikifi, CC BY-SA 4.0)

Jatkan edellisessä blogipostauksessa aloittamaani tekoälyn pohdiskelua. Viime aikoina paljon huomiota herättänyt tekoälybotti ChatGPT juttelee sujuvasti ja inhimillisesti, mutta faktat ja matemaattinen laskeminen eivät ole sen vahvoja puolia. Eikä muuta toki ole väitettykään, kyseessä on ennen muuta ns. kielimalli, ts. se on opetettu isolla tekstimassalla, minkä perusteella se rakentaa oman tekstinsä, mutta ajattelua tai edes faktakokoelmia sillä ei ole. Matematiikastakaan se ei kovin hyvin suoriudu, vaikka saa myös oikeita tuloksia; esimerkkinä vaikkapa YouTube-video Can ChatGPT Pass the Oxford University Admissions Test?.

ChatGPT muodostaa yhden askelen siinä jatkumossa, jonka tunnetuimpia palasia ovat hakukoneet, Wikipedia ja lukuisat muut verkon informaatiolähteet. Tällainen on myös kesäkuussa 1988 symbolisen laskennan ohjelmistona syntynyt Wolfram Researchin Mathematica. Historiansa aikana siihen on ympätty — usein ilmeisesti kokeellisina hankkeina — monenlaisia piirteitä: ohjelmointikieli (Wolfram Language) on monipuolistunut, on luotu käsite computable document format (CDF), tarjolla on alkeisgeometrista päättelyä, monenlaista dataa sisältäviä tietokantoja jne. Käyttöliittymänä on Mathematica-ohjelmiston lisäksi verkkosivusto Wolfram|Alpha.

Kovin kaukana ei ole ajatus yhdistää ChatGPT:n kielimalli ja Mathematican laskentakyky sekä Wolfram Researchin tietokannat. Tämä antaa mahdollisuuden paikata ChatGPT:n faktatiedoissa ja matemaattisissa kyvyissä olevia puutteita. Itse asiassa yhdistämiseen tarvittava plugin on olemassa, kuten Stephen Wolfram kirjoittaa blogissaan. Pluginin avulla ChatGPT käy tarvittaessa tutkimassa tietokantoja.  En ole kokeillut, ainakaan vielä. Ei ilmeisesti ole vapaasti käytettävissä.

ChatGPT pystyy myös ainakin periaatteessa kirjoittamaan ohjelmakoodia Wolfram Languagea käyttäen. Koodi voidaan sitten ajaa Mathematicalla tai Wolfram Researchin pilvipalvelussa (jonka käyttöön tarvitaan sopimus).

Wolfram Researchin resurssit eivät luonnollisestikaan ole ainoa mahdollisuus laajentaa tekoälyjärjestelmien kykyjä. Tähän suuntaan varmasti edetään emmekä vielä ole nähneet alkua enempää.

Missä sitten tällä hetkellä ollaan? Miten luotettavia vastauksia ja miten helposti tekoälyltä saadaan? Seuraavassa kuvaan muutamia kokeilujani.

Yksinkertaista faktaa koskeva kysymys

Esitin ChatGPT:lle kysymyksen: Which is the highest building in Helsinki? Se ilmoitti tietojensa ulottuvan vain syyskuuhun 2021 ja tällöin korkein rakennus oli 134 metriä korkea 'the Maamerkki Tower, also known as the Landmark Tower or Pasila Tripla Tower'. En kommentoinut vastausta, mutta kysyin uudelleen. Tällä kertaa vastaus oli 19-kerroksinen 'the Helsingin Pörssitalo (Helsinki Stock Exchange Building), also known as the KPMG Tower'. Kysyin kolmannen kerran, jolloin vastaukseksi tuli 70-metrinen 'Torni Hotel'.

Kysyin samaa asiaa Mathematicalla Wolfram Researchin tietokannoista. Saman voisi tehdä Wolfram|Alphaa käyttäen. Vastaukseksi tuli 74-metrinen Johanneksen kirkko.

Seuraavaksi kysyin kummaltakin, oliko Englannin kuningas Henrik VIII naimisissa. Molemmat antoivat oikean vastauksen ja luettelivat kaikki kuusi vaimoa avioliittovuosineen.

Epämääräisempi pyyntö

Pyysin luetteloa Helsingissä syntyneistä merkittävistä henkilöistä. (Give a list of the most notable persons born in Helsinki.) Tähän ei tietenkään ole yhtä oikeata vastausta, mutta tulos kertonee jotakin tekoälyn luotettavuudesta. Kärkikymmenikkö:

ChatGPT: Jean Sibelius, Linus Torvalds, Aki Kaurismäki, Tove Jansson, Renny Harlin, Armi Ratia, Tarja Halonen, Juha Kankkunen, Tom of Finland, Esa-Pekka Salonen.

Wolfram Research: Linus Torvalds, Ville Valo, Teemu Selänne, George Gaynes, Tarja Halonen, Tove Jansson, Sam Lake, Michael Monroe, Pihla Viitala, Lauri Ylönen.

Kysyin kummaltakin myös syitä Suomen kansalaissotaan. (What are the reasons for the Finnish civil war in 1918?) ChatGPT antoi noin 300-sanaisen jokseenkin paikkansapitävän selostuksen. Wolfram|Alpha antoi sekalaista faktatietoa sodasta,  kun kysymys tehtiin verkkosivulla, Mathematicasta lähetettyä kysymystä se ei ymmärtänyt.

Ohjelmakoodit

Wolfram|Alpha-spesialisti Michael Trottin artikkelissa 100+ ChatGPT-generated Wolfram Language codes on esimerkkejä ChatGPT:n generoimista koodeista erilaisiin laskentatehtäviin. Ohjelmointikielenä on Mathematican käyttämä Wolfram Language.

Yhtenä esimerkkinä on Wolfram Researchin tietokantoja hyödyntävä koodi, joka tuottaa kartan Saksan dorf-, bach-, berg-, burg- ja feld-loppuisista kaupungeista eri väreillä merkittyinä. Trottin mukaan koodi on ChatGPT:n generoima. Kokeilin vastaavaa Suomen mäki-, järvi-, joki-, salmi- ja lahti-loppuisiin kuntiin sovellettuna. Pyysin ChatGPT:tä kirjoittamaan Wolfram Language -koodin tällaisen kartan tekemiseen käyttäen samoja ilmaisuja kuin Trott. Koodi tuli hetkessä ja siirsin sen ajettavaksi Mathematicaan. Ei toiminut, syntaksivirheitä. Valitin tästä ChatGPT:lle, se pyysi anteeksi ja teki uuden koodin. Ei taaskaan toiminut. Tämä toistui muutaman kerran eikä lopultakaan syntynyt toimivaa. Olisin voinut paikata koodin itse, mutta sen sekavuuden takia muunsin mieluummin Trottin esittämän koodin Suomea koskevaksi. Tulos alla.



Todennäköisesti Trottilla on ollut käytössään uudempi versio ChatGPT:stä, joten hän on voinut saada suoraan toimivan koodin. Toisaalta ChatGPT ei ole deterministinen, vaan se tekee samaankin pyyntöön eri kerroilla erilaisia koodeja. Virheellinenkin koodi voi tietenkin antaa hyvän pohjan kehittelyyn, mikäli sen rakenne on selkeä.

Esimerkki osoittaa myös tietokantojen mukaan kytkemisen mahdollisuudet. Koodi hakee ensin tietokannasta kaikki Suomen kunnat ('cities'). Wolfram Language tarjoaa suhteellisen valmiin keinon verrata näiden nimiä tarkasteltuihin loppuihin. Tietokannasta löytyvät myös kuntien maantieteelliset koordinaatit ja Wolfram Languagesta työkalut karttaprojektioihin ja grafiikkaan. Alla kuva koodista joki-päätteen osalta.



Toisena esimerkkinä pyysin ChatGPT:tä tekemään kartan lyhimmästä reitistä, jolla kierretään kaikki Euroopan pääkaupungit. Mathematica, Wolfram Language ja tietokannat antavat tähän tarvikkeet, myös valmiin funktion lyhimmän reitin laskemiseen. Tämäkään ei onnistunut. En saanut toimivaa koodia, vaikka yritin antaa yksityiskohtaisia ohjeita koodin kirjoittamiseen. Tein sitten itse. Ei ollut ihan helppoa, sillä vaikka Wolfram Languagessa tarvikkeet ovat olemassa, niiden logiikan hahmottaminen ei ole selkeää. (Lieneekö ChatGPT:lläkin ollut tässä vaikeuksia?) Kuva alla.



Miten luotettavia tekoälyn vastaukset sitten ovat?

Helsingin korkeinta rakennusta koskeva kysymys ei mennyt hyvin, mutta Henrik VIII:n vaimot olivat oikein. Erona tietenkin on, että jälkimmäinen on jo pysyvää tietoa, edellisessä täytyy pysyä ajan tasalla. Kriittisyyden merkitys korostuu, ja tieto lähteestä ja sen ajankohdasta olisi tarpeen. Epämääräisempiin kysymyksiin saadaan tietenkin epämääräisiä vastauksia, mutta ne saattavat olla kelvollisia lähtökohtia omalle pohdiskelulle. Faktoihin ja näkökulmiin ei kuitenkaan voi luottaa ja muitakin lähteitä on syytä katsoa. ChatGPT vähät välitti vaatimuksesta, että olisi pitänyt syntyä Helsingissä, mutta ei esittänyt mitään varauksia.

Ohjelmakoodin generointi ei esimerkeissä sujunut. Riittävän yksinkertaisissa tapauksissa kuitenkin syntyy toimivaa koodia, tai ainakin koodia, joka kelpaa kehittelyn pohjaksi. Wolfram Languagen liittymä tietokantoihin ei minusta myöskään ole selkeä, jolloin edellä olevat esimerkit saattoivat olla hieman epäreiluja ChatGPT:llekin.

Tarkkaavainen lukija on saattanut havaita, että kartta tiettyihin päätteisiin liittyvistä kunnista ei vastaa nykyistä kuntajakoa. Tietokantojen perusteella muodostettu kuntalista on nimittäin vanhentunut. Ongelmallista on myös, mihin termi 'city' oikeastaan viittaa. Ns. ääkkösissä on myös horjuvuutta. Esimerkin kaltaisissa tilanteissa tällaiset puutteet eivät ole kovin merkityksellisiä, mutta tietokannoissa on paljon dataa, joka on pidettävä ajan tasalla (tai lähteistettävä tarkasti). Suhtaudun tietyllä epäluulolla Wolfram Researchin tietokantoihin.

Kaikkiaan: Tekoälyllä on hauska leikkiä, ja hyötyäkin siitä on sopivissa tehtävissä, mutta kriittisyyttä ei pidä unohtaa. Tulevaisuutta varmasti on, mutta luotettavuuden ja käyttökelpoisuuden hyväksi on vielä paljon tehtävää.


tiistai 27. syyskuuta 2022

Geometrian probleema ja sen moderni versio


Vanha geometrian tehtävä saattaa antaa aihetta monenlaisiin pohdiskeluihin, kun avuksi otetaan laskentaohjelmat.

Annettuna on yllä olevan kuvion mukainen tilanne, jossa $\alpha = 60^\circ$ ja $\beta = 45^\circ$. Kysytään kulman $\gamma$ suuruutta. Tämä on tyypillinen tehtävä omalta kouluajaltani. Vaikeutena on liikkeelle lähtö, sopivan idean — ja apupiirroksen — löytäminen. Jos idea löytyy, tehtävä on melko helppo, ellei, ei synny juuri mitään.

Piirretään pisteestä $A$ normaali janalle $BD$ ja yhdistetään sen kantapiste pisteeseen $C$. Tällöin syntyy ns. muistikolmioita ja tasakylkisiä kolmiota. Kulmia päästään laskemaan vaiheittain eikä tarvita muuta tietoa kuin kolmion kulmien summa. Tuloksena on $\gamma = 75^\circ$. Kuva alla.

Mutta miksi tyytyä vain kulmien arvoihin $\alpha = 60^\circ$, $\beta = 45^\circ$? Voihan $\alpha$ olla mitä tahansa väliltä $]0^\circ,180^\circ[$ ja $\beta$ jotakin $\alpha$:aa pienempää.

Sijoitetaan tilanne koordinaatistoon, piste $A$ origoon ja pisteet $B$ ja $C$ x-akselille. Otetaan tuntemattomiksi kulman $\gamma$ ohella pisteen $D$ koordinaatit $(x,y)$. Jos $\vec{i}$ on tavanomainen yksikkövektori, skalaaritulon avulla saadaan ehdot \[ \cos(\alpha) = \frac{-\vec{i}\cdot\vec{BD}}{|\vec{BD}|}, \quad \cos(\beta) = \frac{-\vec{i}\cdot\vec{CD}}{|\vec{CD}|}, \] jotka määrittävät tilanteen. Nämä tuottavat yhtälöt \[ \cos(\alpha) = \frac{2-x}{\sqrt{(2-x)^2 + y^2}}, \quad \cos(\beta) = \frac{3-x}{\sqrt{(3-x)^2 + y^2}}, \] joista voidaan ratkaista $x$ ja $y$. Ratkaiseminen käsin voi olla työlästä, mutta (ainakin hyvä) symbolisen laskennan ohjelma suoriutuu. Kokeilin Mathematicalla ja GeoGebralla. Kumpikin antaa neljä ratkaisua, GeoGebra tavattoman paljon hankalammat lausekkeet. Tuloksiin on syytä suhtautua rauhallisesti. Ei laskentaohjelma tee sitä, mitä käyttäjä haluaisi, vaan mitä se on ohjelmoitu tekemään, ja tulokset voivat olla mutkikkaita eivätkä aina edes oikeita. Ohjelma pyrkii ottamaan huomioon kaikki tapaukset, mutta ei välttämättä onnistu.

Sijoittamalla Mathematicassa tulokset takaisin yhtälöihin nähdään, että vain kaksi ratkaisuista toteuttaa yhtälöt. Kaksi muuta on ilmeisesti syntynyt neliöjuurien käsittelyn myötä. Vastaavasta sijoittamisesta ei ainakaan käyttämäni GeoGebran versio suoriutunut, mutta numeerisen tarkastelun perusteella tässäkin on kaksi oikeaa ja kaksi väärää ratkaisua. Oikeissa ratkaisuissa x-koordinaatit ovat samat, y-koordinaatit vastalukuja, joten toinen tarkoittaa vain kuvion peilaamista x-akselin alapuolelle.

Mathematican tapauksessa tulos on \[ x = \tfrac{1}{2}(5 - \csc(\alpha - \beta)\sin(\alpha + \beta)), \quad y = \csc(\alpha - \beta)\sin(\alpha)\sin(\beta). \] Suomalaiselle nämä saattavat näyttää hieman oudoilta $\csc$-funktion takia. Tämä on kosekantti, yksinkertaisesti sinin käänteisarvo. Vastaavasti $\sec$, sekantti on kosinin käänteisarvo. Monissa maissa ja sen seurauksena laskentaohjelmissa usein käytetään näitä.

Kun pisteen $D$ koordinaattien lausekkeet ovat käytettävissä, voidaan laskea kaikenlaista. Kulma $\gamma$ saadaan kaksiargumenttisella $\arctan(x,y)$-funktiolla, joka antaa pisteen $(x,y)$ napakulman ja joka on useimmissa ohjelmissa käytettävissä.

Sijoittamalla ratkaisuun esimerkiksi $\beta = \alpha - 15^\circ$ voidaan etsiä ne pisteet $D$, jotka vastaavat kulmien $\alpha$ ja $\beta$ 15 asteen erotusta. Pisteitä voi piirtää ohjelmasilmukalla tai parametrikäyränä, jota useimmat ohjelmistot tukevat. Alkeisgeometriansa hallitsevaa henkilöä ei yllätä, että kyseessä on ympyränkaari. Laskentaohjelma saattaa parametriesityksen perusteella kyetä löytämään myös ympyrälle yhtälön: $x^2 + y^2 - 5x - (2 + \sqrt{3})y + 6 = 0$. Kuva alla, pisteen $D$ mahdollinen sijainti punaisella.

Pienillä muutoksilla voidaan tutkia erilaisia tehtävän variaatioita, mikä usein johtaa algoritmiseen ajatteluun ja kirjoittamaan muutaman rivin ohjelmakoodeja. Edellytyksenä on, että laskentaohjelma tukee ainakin pienimuotoista ohjelmointia. Mathematicassa sujuu hyvin, GeoGebrassa on hankalaa. Mikä esimerkiksi olisi kulman $\gamma$ maksimiarvo, kun kulmien $\alpha$ ja $\beta$ erotus on vakio? Miten maksimiarvo riippuu erotuksen suuruudesta? Sopivatko nämä geometriseen havaintoon?



Ylhäällä: Pisteen $D$ sijainti tapauksessa $\beta = \alpha/3$. Alhaalla vasemmalla: Kulma $\gamma$ kulman $\alpha$ funktiona, kun $\beta = \alpha - 15^\circ$. Alhaalla oikealla: Kulma $\gamma$ kulmien $\alpha$ ja $\beta$ funktiona sekä edellä mainittu käyrä, joka sijaitsee pinnalla.

Erilaisen lähestymistavan tehtävään tarjoavat dynaamisen geometrian ohjelmat, joista GeoGebra lienee tunnetuin. Näissä tarkasteltava kuvio konstruoidaan ohjelman tarjoamien geometristen operaatioiden avulla piirtämällä, jolloin ohjelma laskee pisteiden koodinaatit ja suorien yhtälöt, usein myös perustyyppisten käyrien yhtälöt. Jälkikäteen kuviota voidaan muunnella pisteitä siirtämällä. Urakäyriä (locus) saadaan myös piirretyksi. Symbolisiin lausekkeisiin tai ns. tarkkoihin arvoihin (joita ehkä olisi parempi kutsua symbolisiksi arvoiksi, onhan kymmendesimaalinen likiarvokin jo kohtalaisen tarkka) ei yleensä päästä käsiksi ilman symbolista laskentaa.

sunnuntai 12. joulukuuta 2021

Miltä $\pi$ kuulostaa?

 Blogijutussani Irrationaalikävelyllä  tarkastelin luvun $\pi$ desimaalien mukaan eri suuntiin eteneviä askelia ja näistä muodostuvaa polkua. Luvun irrationaalisuus näkyy polun ennakoimattomuutena.
Olisiko muita tapoja havainnollistaa piitä tai ainakin leikitellä sillä? Mitä saadaan, jos esimerkiksi asetetaan desimaalit vastaamaan tiettyjä sävelkorkeuksia? Ja miten helposti tällaisia kokeiluja pääsee tekemään.

Olen kokeiluissani yleensä käyttänyt laskentaohjelma Mathematicaa, johon on versio versiolta kertynyt jatkuvasti lisää kaikenlaisia, usein hieman sekavia ja kokeellisia ominaisuuksia. Esimerkiksi 12-sävelasteikon sävelet yksiviivaisesta c:stä alkaen saadaan muutamalla komennolla ja tulos voidaan tallentaa äänitiedostona:


Piin esitykseen päästäänkin tämän jälkeen varsin vähällä:


Ajatus piin esittämisestä äänitiedostona ei toki ole uusi. Piin desimaalit ovat lukujono A000796 kokonaislukujonojen ensyklopediassa (The On-Line Encyclopedia of Integer Sequences) ja täällä on myös mahdollista kuunnella pii jopa useana erilaisena esityksenä.

Vähän yksitoikkoiselta pii toki kuulostaa. Mathematican kokeelliset piirteet antavat mahdollisuuden muuhunkin. Sävelet voidaan määritellä myös suoraan nuotteina, niiden kesto voidaan määritellä erikseen ja jopa soitinkin voidaan valita. Viimeksi mainittu on kyllä musta laatikko: missään ei käsittääkseni ole dokumentoituna, miten eri soitinten äänet on muodostettu. Pii voidaan tietenkin esittää muutoinkin kuin 10-kantaisena ja esityksen numerot sitoa sävelkorkeuksiin miten halutaan. En esittele tarvittavia komentoja, niissä tuskin on mitään yleispätevää kiinnostavuutta.

Ensimmäisenä esimerkkinä on 10-kantainen pii 12-asteikossa uruilla soitettuna, sävelten kestot Neperin luvun 10-kantaisesta esityksestä. Tästä voi piirtää kuvankin, eräänlaiset nuotit nämäkin:


Toisena esimerkkinä on 'kolmisointu-pii', ts. pii esitettynä 3-kantaisena, tämän numerot sidottuina säveliin c, e, ja g, kestot Neperin luvun 3-kantaisesta esityksestä, soittimena edelleen urut.

Monilla matemaattisilla ongelmilla on käänteiset ongelmansa. Niin tässäkin. Edellä kuvatulla tavalla voidaan muuntaa luku musiikiksi, tai siis ainakin ääneksi, mutta entä musiikin muuntaminen luvuksi? Sitäkin voi kokeilla:

Olkoon \begin{align*} a &= \frac{2819342985735813859733523604893034305465368787123665428766810701824}{1730765619511609209510165443073365}, \\[5pt] b &= \frac{2934443644746840392851674865259212716387069853696}{4238682002231055}. \end{align*} Tällöin komennot

tuottavat joulunaikaan sopivan äänitiedoston. (Miksi heksadesimaalikanta? Jotta 12-järjestelmässä saadaan esitetyksi tarvittava ääniala ...)

Lopuksi toivotan kaikille lukijoille riemullista joulujuhlaa.

keskiviikko 17. marraskuuta 2021

Yhtälön $2^{\sin(x)^2} + 2^{\cos(x)^2} = 3$ ratkaisemisesta

Koulutason matematiikan opinnoissa yhtälöiden ratkaisemisen merkitys on ollut lähinnä sujuvan lausekkeiden käsittelyn synnyttämisessä. Nykyään kuitenkin ratkaiseminen usein onnistuu jopa yhdellä laskentaohjelman komennolla. Mihin opetuksessa silloin tulisi keskittyä? Edelleen lausekkeiden manipulointiin vai ohjelmistojen komentoihin tai johonkin muuhun?

Otsikon yhtälö on peräisin venäläisestä A. N. Kolmogorovin tekemäksi nimetystä oppikirjasta Алгебра и начало Математического анализа 10-11 класс (algebra ja matemaattisen analyysin alkeet, sivu 299).  Maineikas matemaatikko A. N. Kolmogorov kuoli vuonna 1987, joten hänellä ei ilmeisestikään ole osuutta kirjan nykyisen painoksen laatimiseen, mutta alkuperäinen teksti lienee häneltä.




Kirja sisältää melkoisen määrän käsin laskettaviksi tarkoitettuja harjoitustehtäviä, ja onkin ilmeistä, että tavoitteena on sujuvuuden saavuttaminen mekaanisessa laskemisessa ja lausekkeiden käsittelyssä.  Kokonaisuutena harjoitustehtävät antavat jopa hieman tylsän vaikutelman. Tietotekniikan rooli ei näy eikä se kirjan iästä johtuen voisikaan. Pohtimisen aihetta tehtävien tarkastelu kuitenkin antaa.

Esillä olevan yhtälön käsin ratkaiseminen on suhteellisen helposti tehtävissä, jos on kykyä muokata lausekkeita ja tämän seurauksena taito nähdä erilaisia mahdollisuuksia. Ottamalla uudeksi tuntemattomaksi $t = 2^{\sin(x)^2}$ yhtälö pelkistyy toisen asteen yhtälöksi $t^2 - 3t +2 = 0$, jonka juuret ovat $t_1 = 1$ ja $t_2 = 2$. Tällöin tulee olla $\sin(x)^2 = 0$ tai $\sin(x)^2 = 1$ ja ratkaisuksi saadaan $x = n\pi/2$, missä $n$ on kokonaisluku.

Miten laskentaohjelmat sitten suoriutuvat? GeoGebra löytää tuloksen vaivatta. Mathematica ei suoriudu yhtä vaivatta, mutta antaa toisaalta enemmän ajattelemisen aihetta ja lisää ratkaisuja. Tästä seuraavassa tarkemmin. Jos lukija kokeilee muita ohjelmia, kuulen asiasta mielelläni.

Ensimmäinen yritys Mathematicalla epäonnistuu. Grafiikka kuitenkin osoittaa, että yhtälöllä on juuri sellaiset ratkaisut kuin käsin laskussa todettiin:




Lisäämällä komentoon vaatimus ratkaisujen reaalisuudesta päästään haluttuun tulokseen:


Tämä antaa kuitenkin aiheen epäillä, että yhtälössä on jotakin kompleksisuuteen liittyvää, joka on Mathematicalle vaikeata. Helpotetaan tilannetta muokkaamalla yhtälö uuteen muotoon, ts. lausutaan trigonometriset funktiot eksponenttifunktion avulla, ja tällöin saadaankin ratkaisu:



Tulos on kuitenkin yllättävän monimutkainen. Näyttää siltä, että yhtälöllä on kompleksisia ratkaisuja ja näiden löytämiseen eivät Mathematican rutiinit riitä ilman lisäohjausta. Tämä ei ole kovin yllättävää: lausekkeiden muokkaus ei aina ole yksinkertaista ja täydellistä algoritmia tuskin on. Käyttäjän näkemys ja ohjaus saattaa olla tarpeen. Reaalinen ratkaisu tästä löytyy sijoittamalla vakiolle $C_2$ arvo nolla, mutta myös kompleksisia ratkaisuja on, alla joitakin likiarvoina:



Näiden sijoittaminen yhtälöön näyttää todellakin toteuttavan sen:



Grafiikka antaa mahdollisuuden pidemmälle meneviin tutkimuksiin. Jos yhtälöön sijoitetaan $x$:n paikalle $x + iy$ ja tuloksesta erotellaan reaali- ja imaginaariosa, saadaan kaksi varsin monimutkaista lauseketta:

Nämä ovat $= 0$ eräillä käyrillä kompleksitasossa (xy-tasossa) ja käyrien leikkauspisteet ovat yhtälön kompleksisia juuria. Kuvan piirtäminen auttaa hahmottamaan tilannetta.

Reaaliosa sininen, imaginaariosa vihreä, kompleksiset juuret (osa) punaiset


Kiinnostuneelle lukijalle on tarjolla Mathematican syöttötiedoksi kelpaava dokumentti ja tämän pdf-muoto.

Mitä tästä sitten pitäisi opetuksen suhteen päätellä?

Kompleksisilla potensseilla ei kannata hurjastella, mutta kompleksilukujen alkeet ehkä pitäisi tuntea, aikoinaan ne on opetettukin. Laskentaohjelmien tulostukset eivät tällöin aiheuttaisi ihmettelyä.  Laskentaohjelmat ovat hyviä työkaluja, ja niiden käyttöön on hyvä harjaantua. Tämä ei kuitenkaan tarkoita ainakaan ensisijaisesti komentojen opettelua vaan asenteen omaksumista: kokeillaan ja tutkitaan. Ei pidä jahdata ns. oikeata ratkaisua, vaan pyrkiä lisäämään asian ymmärtämistä.  Komentoja ei tarvitse muistaa, mutta tulisi kehittää kyky löytää ohjelman dokumentaatiosta se, mitä kulloinkin tarvitaan, ja myös se, mitä koskaan ennen ei ole käytetty. Grafiikkakin on erinomainen työkalu, jota ei pidä väheksyä.

tiistai 25. elokuuta 2020

Newtonin iteraatio ja kaoottisuus

 


Yhtälön $f(x) = 0$ ratkaiseminen Newtonin iteraatiolla

Jos yhtälön $f(x) = 0$ ratkaiseminen ei onnistu algebrallisella manipuloinnilla, voi yrittää ratkaisun likarvon etsimistä jollakin numeerisella menettelyllä. Toisen asteen yhtälön ratkaiseminen algebrallisesti tunnetusti onnistuu, kolmas aste on jo vaikeampi (vaikkei mahdoton). Ehkä tunnetuin numeerinen menetelmä on Newtonin iteraatio, jossa lähdetään jostakin ratkaisun $x^*$ likiarvosta $x_0$ ja tarkennetaan tätä askel askeleelta. Periaatteena on asettaa käyrälle $y = f(x)$ tangentti pisteeseen $(x_0,f(x_0))$ ja etsiä tarkempi likiarvo tangentin ja x-akselin leikkauspisteestä $x_1$. Toistamalla askel uudesta likiarvosta $x_1$ lähtien saadaan seuraava likiarvo $x_2$ jne. Tuloksena on lukujono $x_0,\ x_1,\ x_2,\ \dots$, joka suppenee kohden ratkaisua $x^*$, jos alkuarvo $x_0$ on ollut riittävän lähellä.

Iteraatiokaavaksi, jolla seuraava likiarvo lasketaan edellisestä, saadaan
\[
x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}
\]
muodostamalla edellä mainitun tangentin yhtälö.

Lukija voi kokeilla vaikkapa yhtälön $x^4 - 2 = 0$ ratkaisemista eri alkuarvoista $x_0$ lähtien.

Newtonin menetelmä voidaan monella tavoin yleistää. Periaatteessa samalla idealla voidaan ratkaista esimerkiksi kahden tuntemattoman yhtälöpari $f(x,y) = 0,\ g(x,y) = 0$ tai etsiä kompleksilukuratkaisu yhtälölle $f(z) = 0$. Jälkimmäisessä tapauksessa toimii sama iteraatiokaava kuin edellä, vaikka sen johtamisessa ei voidakaan käyttää samaa tangentti-ideaa.

Jos yhtälöllä on useita ratkaisuja, saadaan yleensä tietty ratkaisu aloittamalla riittävän lähellä olevasta likiarvosta. Newtonin menetelmän ominaisuus kuitenkin on, että suppeneva jono saadaan aloittamalla melkein mistä tahansa pisteestä, mutta ei ole niinkään helppoa sanoa, mitä ratkaisua kohden jono suppenee.

Yhtälöllä $z^3 - 1 = 0$ on kompleksitasossa kolme ratkaisua: $z = 1$, $z = -\frac{1}{2}(1-i\sqrt{3})$ ja $z = -\frac{1}{2}(1+i\sqrt{3})$. Aloittamalla Newtonin iteraatio jostakin kompleksitason pisteestä saadaan melkein aina jono, joka suppenee kohden jotakin ratkaisua. Mikä näistä on kyseessä, vaihtelee kuitenkin kaoottisella tavalla. Jos ratkaisuja em. järjestyksessä kutsutaan punaiseksi, vihreäksi ja siniseksi ratkaisuksi ja aloituspiste väritetään sen mukaan, mitä ratkaisua kohden jono suppenee, saadaan oheinen kuva. Mitä vaaleampi värisävy, sitä nopeammin jono on supennut.

Suppenemisalueet erivärisiin juuriin

Moni on varmaankin nähnyt kuvan, sillä se on julkaistu lukemattomia kertoja niin painetuissa kuin verkkodokumenteissakin. Oheinen on tehty Takashi Kanamarun vapaasti jakamalla ohjelmalla. Kyseessä on esimerkki kaoottisesta käyttäytymisestä tai fraktaaleista: tietyissä kohdissa pienikin muutos aloituspisteessä muuttaa suppenemisen kohdetta; rakenne toistuu periaatteessa samanlaisena yhä pienemmissä mittakaavoissa.

Osasuurennos edellisestä kuvasta

Suppeneminen ei välttämättä tapahdu kovin suoraviivaisesti, vaan heilahtelua saattaa olla, kuten alla oleva kuva osoittaa. Laskenta ja animointi on tehty Mathematicalla. Animaatiosta on saatavissa myös video, jossa aloituspiste liikkuu hitaasti punaisen aloitusympyrän sisällä ja likiarvopisteiden muodostama jono heilahtelee voimakkaasti. Eräänlainen epäjatkuvuusilmiö tämäkin.

Ratkaisua $z^*$ lähestyvä likiarvojono, kun alkupisteenä on $z_0$

sunnuntai 21. kesäkuuta 2020

Laskentaohjelman rönsyt

Olen käyttänyt laskentaohjelma Mathematicaa sen syntymästä saakka, vuodesta 1988. Pääversioita on tähän mennessä kertynyt 12 ja laajentuminen on ollut melkoista. Kyseessä on edelleen pääasiassa matemaattinen laskentaohjelma, mutta rönsyilyä on tapahtunut moneen suuntaan: dynaamisia animaatioita, dokumenttimuoto nimeltään computable document format, ohjelmointikieli, verkkoresursseja, kuvankäsittelyä, kartografiaa jne. Ehkä erikoisimpana Wolfram Researchin tietokanta, josta Mathematican komennoilla voidaan hakea monenlaista silpputietoa. Osittain nämä rönsyt ovat varmaan kokeellisia: katsotaan, mikä voisi olla järkevää ja miten se pitäisi toteuttaa.

En pyri minkäänlaiseen kattavaan esittelyyn, vaan jätän markkinoinnin Wolfram Researchille (https://www.wolfram.com/). Tyydyn kertomaan kartografiaan ja tietokantoihin liittyvistä kokeiluistani kesähelteiden ratoksi.

Wolfram Knowledgebase sisältää mm. luettelon Europpan maista. Jokaisesta maasta löytyy kartografista tietoa ja melkoinen määrä tilasto- ym. dataa. 

Euroopan maat Wolfram Knowledgebasen mukaan

Suomeen liittyvien ominaisuuksien listan alkuosa Wolfram Knowledgebasessa

Tietoja voidaan yhdistellä ja kohdistaa niihin laskutoimituksia computable document format -hengessä. Siten on esimerkiksi mahdollista koostaa kuva Euroopan valtioiden ääriviivoista ja värittää maa harmaasävyllä, joka on sitä tummempi, mitä suurempi on maan pääkaupungin väkiluvun suhde koko maan väkilukuun.

Euroopan maat ääriviivoina

Lukija voi yrittää tunnistaa maat oheisesta kuvasta. Kunkin maan kohdalla mittakaava on mitä on, pohjoinen on kuitenkin kaikissa ylöspäin.

Data on peräisin Wolframin tietokannoista, mutta mistä se on sinne tullut, ei käsittääkseni ilmene.  Lähdekritiikkiä ei siis pääse helposti harjoittamaan. Tietokannassa on Suomen väkiluku vuosittain aika pitkältä ajalta. Otin tiedot sadan vuoden ajalta 1910–2010, piirsin grafiikan ja vertasin Tilastokeskuksen sivuilta saatavaan dataan. Olivat samanlaiset.

Otin vastaavalla tavalla Helsingin väkilukutiedot ja laskin suhteen Suomen väkilukuun vuosittain. Grafiikka tuotti yllätyksen:

Helsingin väkiluvun suhde Suomen väkilukuun vuosittain Wolfram Knowledgebasen mukaan

Tarkempi selvittely osoitti, että tietokannassa ei olekaan Helsingin väkilukua kuin kymmenen vuoden välein ja välivuosina toistetaan samaa lukua. Dataa pyydettäessä tämä ei kuitenkaan ilmene. Suomen väkiluku sen sijaan on vuosittain.

Lähdekritiikki siis on tarpeen. Millä perusteella monet valinnat on tehty, jää myös avoimeksi. Edellä olevassa Euroopan valtioiden luettelossakin on monia, joita ei oikeastaan odottaisi. Vielä selkeämmin tämä tulee esiin pyydettäessä Helsingin osalta luetteloa 'notable people who died in city', joka sisältää 77 henkilöä ja alkaa seuraavasti:

Alvar Aalto, Tom of Finland, Tove Jansson, Paavo Johannes Nurmi, Urho Kekkonen, Mika Waltari, Juho Kusti Paasikivi, Frans Eemil Sillanpää, Artturi Virtanen, Hannes Kolehmainen, Kaarlo Juho Ståhlberg, Carl Ludvig Engel, Harri Holkeri, Rolf Herman Nevanlinna, Timo Sarpaneva, Tapio Rautavaara, Ville Ritola, Paavo Berglund, Leena Peltonen-Palotie, Ernst Leonard Lindelöf, Lauri Kristian Relander, Karl Frithiof Sundman, Edward Vesala, Clas Thunberg, Matti Järvinen, Hjalmar Mellin, Albin Stenroos, Lars Sonck, Tommy Tabermann, Heino Kaski, Richard Stites, J. S. Sirén, ...

Ehkäpä, mutta miksi juuri nämä? Ja onko kuolinpaikka merkityksellinen näkökulma?

Vertailun vuoksi otin Botswanan pääkaupungin Gaboronen 'notable people born in city'. Tuloksena yksi henkilö, Mpule Kwelagobe, jonka 'occupation' on 'beauty queen' ja josta 'notable facts' ei anna mitään. En Botswanan merkkihenkilöistä paljoakaan tiedä, mutta Wikipedia-artikkeli antaa Mpule Kwelagobesta paljon monipuolisemman kuvan.

Edellä sanottu antaa Wolframin tietokannoista ehkä hieman turhan huonon kuvan. Kyllä siellä on hyödyllistä ja hyvin järjestettyäkin tietoa, mutta vaikeata on välttyä silppukokoelman vaikutelmalta. Lähdekritiikkiä ei voi harjoittaa, ajantasaisuus jää avoimeksi. Maailmassa ja verkossa on luotettavampiakin lähteitä. Ihmettelen Mathematican laajentamista tähän suuntaan. On lähdetty puremaan liian suurta palaa. Kaikenkattavuus ei ole järkevä tavoite. Ja lisääkö vai vähentääkö tämä ohjelman arvostusta?

perjantai 24. huhtikuuta 2020

Differentiaaliyhtälöiden vaikeus

Differentiaaliyhtälöiden alkeiskurssilla keskitytään usein ratkaisemaan yhtälöiden yksinkertaisia perustyyppejä ja näkemään teoria näiden kautta. Opiskelijalle jää helposti käsitys, että lähes kaikki differentiaaliyhtälöt voidaan ratkaista jollakin algebrallisluonteisella tempulla. Ratkaiseminen tarkoittaa tällöin ns. yleisen ratkaisun löytämistä tavallisten alkeisfunktioiden avulla esitettynä. Tavallisiksi alkeisfunktioiksi kutsutaan potensseja, eksponentti-, logaritmi- ja trigonometrisia funktioita sekä näiden käänteisfunktioita ja niistä peruslaskutoimituksilla tai funktioiden yhdistämisellä saatuja funktioita.

Differentiaaliyhtälön ratkaisun olemassaolo on eri asia. Esimerkiksi varsin yksinkertaiselle differentiaaliyhtälölle $y' = x^2 - y^2$ voidaan piirtää suuntakenttä, koska suoraan yhtälöstä voidaan laskea ratkaisukäyrän derivaatta, ts. sen suunta missä tahansa pisteessä $(x,y)$. Suuntakenttäkuva antaa aiheen uskoa, että jokaisen tason pisteen kautta todellakin kulkee jonkin ratkaisufunktion kuvaaja. Voidaanko funktio lausua alkeisfunktioiden avulla, on täysin eri ongelma. Tietyn pisteen kautta kulkevan (eli tietyn alkuehdon täyttävän) ratkaisufunktion olemassaolon varsinainen todistaminen on hankalampi asia enkä tässä siihen paneudu.


Differentiaaliyhtälön $y' = x^2-y^2$ suuntakenttä
(https://homepages.bluffton.edu/~nesterd/apps/slopefields.html)

Differentiaaliyhtälön $y' = x^2 - y^2$ yleisen ratkaisun lausekkeen löytäminen ei peruskurssitiedoilla onnistu. Hyvät laskentaohjelmat suoriutuvat kuitenkin monista differentiaaliyhtälöistä peruskurssitaitoja paremmin. Esimerkiksi laskentaohjelma Mathematica antaa em. yhtälölle yleisen ratkaisun
\[
y(x)=-\frac{i x^2 \left(-C J_{-\frac{5}{4}}\left(\frac{i x^2}{2}\right)+C
   J_{\frac{3}{4}}\left(\frac{i x^2}{2}\right)-2 J_{-\frac{3}{4}}\left(\frac{i
   x^2}{2}\right)\right)-C J_{-\frac{1}{4}}\left(\frac{i x^2}{2}\right)}{2 x \left(C
   J_{-\frac{1}{4}}\left(\frac{i x^2}{2}\right)+J_{\frac{1}{4}}\left(\frac{i
   x^2}{2}\right)\right)}.
\]
Tässä $C$ on yleisessä ratkaisussa esiintyvä vakio, jonka eri arvoilla saadaan eri pisteiden kautta kulkevat ratkaisukäyrät (ei tosin aivan ongelmitta). Ratkaisussa esiintyy imaginaariyksikkö $i$, vaikka funktion arvot ovatkin reaalisia, kun $x$ on reaalinen. Funktio $J$ eri alaindekseillä on Besselin funktio. Tämä on yksi ns. erikoisfunktioista ja $J_n$ on määritelty eräänä Besselin differentiaaliyhtälön $x^2y'' + xy' + (x^2-n^2)y =0$ ratkaisuna. Tämäkin on sellainen yhtälö, jonka ratkaisua ei voida lausua alkeisfunktioiden avulla. Besselin differentiaaliyhtälö esiintyy monissa fysiikan ilmiöiden mallinnuksissa ja sen seurauksena sen ominaisuudet tunnetaan ja arvot voidaan laskea varsin tarkasti. Laskentaohjelmien kannalta se ei ole sen ihmeellisempi funktio kuin $\sin(x)$ tai $\cos(x)$ (jotka myös voidaan määritellä erään differentiaaliyhtälön ratkaisuina, nimittäin $y'' + y = 0$).

Yleinen ratkaisu kovin monimutkaisen lausekkeen avulla esitettynä ei välttämättä ole käyttökelpoinen.  Sellaistakaan ei läheskään aina voida löytää edes erikoisfunktioiden avulla. Usein onkin luontevampaa etsiä ratkaisua numeerisesti, jolloin tavoitteena on löytää yleisen ratkaisun sijaan vain yksi, sopivan lisäehdon täyttävä ratkaisu.

Tälle hetkelle tyypillinen esimerkki on epidemian kehitystä koskeva SIR-malli. Tämä on kolmen differentiaaliyhtälön ryhmä, jossa on kolme tuntematonta funktiota $S(t)$, $I(t)$ ja $R(t)$, muuttujana aika $t$:
\[
\left\{
\begin{aligned}
S'(t) &=-\beta I(t) S(t), \\ I'(t) &= \beta I(t) S(t) - \gamma I(t), \\ R'(t) &= \gamma I(t).
\end{aligned}
\right.
\]
En puutu tässä yhteydessä siihen, miten malli on muodostettu ja mikä on funktioiden $S$, $I$ ja $R$ merkitys. $\beta$ ja $\gamma$ ovat epidemialle ominaisia vakioita. (Tiivis esitys mallista on esimerkiksi Mikko Rahikan blogissa.  Muutoinkin verkosta löytyy aiheeseen liittyvää materiaalia runsain mitoin.)

Odotin, että Mathematica ei löytäisi mallille yleistä ratkaisua, mutta yllätyksekseni tällainen löytyi. Se on kuitenkin siinä määrin monimutkainen, että käytännöllistä merkitystä ei varmastikaan ole. Jonkinlaisella kritiikilläkin siihen lienee syytä suhtautua.

Numeerisen ratkaisun etsiminen on tarkoituksenmukaisempaa. Tällöin tarvitaan lisäehtoja, esimerkiksi ns. alkuehdot, ts. funktioiden arvot aloitushetkellä. Jos näiksi valitaan $S(0) = 10000$, $I(0) = 1$, $R(0) = 0$ ja vakioille käytetään arvoja $\beta = 0.0007$, $\gamma = 1.5$, saadaan epidemialle tyypilliset ratkaisufunktioiden kuvaajat:

SIR-mallin tyypilliset ratkaisukäyrät

Mathematica antaa ratkaisufunktiot interpoloivina funktioina (InterpolatingFunction). Nämä ovat sopivalla algoritmilla laskettuja approksimaatioita, mutta niitä voidaan Mathematicassa käsitellä funktioina samalla tavoin kuin mitä tahansa muuta funktiota, mm. niitä voidaan derivoida. Jos ratkaisut sijoitetaan alkuperäiseen yhtälöryhmään, tämä ei tarkalleen toteudu, mutta saadaan jonkinlainen kuva approksimaation tarkkuudesta. Alla oleva kuva esittää keskimmäisen yhtälön toteutumisessa olevaa virhettä. Ratkaisujen tarkkuus on käytännössä riittävä, mutta tietty varauksellisuus on paikallaan. Vaikka Mathematican interpoloivia funktioita voidaankin esimerkiksi derivoida, ei derivaattojen tarkkuus ole enää yhtä hyvä.

SIR-mallin keskimmäisen yhtälön toteutumisessa oleva virhe

Mitä tästä pitäisi oppia? Laskentaohjelma on hyvä työkalu, mutta ei pidä odottaa, että se ratkaisee kaikki matemaattiset ongelmat vaivatta. Käyttäjän tulee ymmärtää, mitä on tekemässä.


lauantai 17. elokuuta 2019

Geometrista päättelyä Eukleideen tapaan laskentaohjelmalla

Kaupallisista tietokoneohjelmista ilmestyy ajoittain uusi versio, jossa vähäisten paikkailujen lisäksi täytyy olla jotakin oleellisesti uutta. Tämä tarvitaan uuden version markkinointiin, mutta uutuuksien merkitys ja kohtalo ilmenee vasta myöhemmin. Ne saattavat olla uusia aluevaltauksia, joita kukaan ei ehkä osannut edes kaivata, mutta ne muuttavat työskentelytapojamme ja näkökulmiamme joko hyvään tai huonoon suuntaan. Toisaalta ne saattavat osoittautua tarpeettomiksi ja jäädä olemattomalle käytölle.

Laskentaohjelma Mathematica on jokaisessa kokonaislukuversiossaan pyrkinyt tuomaan jotakin uutta.  Usein kyse on ollut merkittävistä uusista mahdollisuuksista, mutta joukossa on myös unohduksiin painuneita ideoita. Versio 12 tuo Eukleideen geometrian, ei laskennallisena analyyttisena geometriana, vaan eräänlaisena päättelynä.

Olkoon esimerkkinä kolmioiden yhtenevyysteoreema KSK. Aluksi määritellään lähtötilanne oletuksineen: kaksi kolmiota, $ABC$ ja $PQR$, sekä näiden yhtä suuret vastinosat, yksi sivupari ja kaksi kulmaparia.


Konfiguraatiosta voidaan piirtää haluttu määrä kuvioita, joissa kärkipisteiden koordinaatit valitaan satunnaisesti, mutta oletusehdot toteutuvat.


Mielenkiintoisin on kolmas vaihe, jossa pyritään etsimään kuvion uusia ominaisuuksia, ts. mitä voitaisiin yrittää todistaa lähtötilanteen pohjalta. Alla olevan tuloksen kaksi ensimmäistä riviä väittävät, että kolmiot ovat yhteneviä ja että ne ovat yhdenmuotoisia. Loput rivit tarkoittavat vastinosien yhtäsuuruutta.


En tiedä, millaista algoritmia tässä käytetään, ts. miten uudet ominaisuudet itse asiassa etsitään.

Vastaavalla tavalla käy, jos määritellään lähtötilanteeksi kolmio keskijanoineen, jolloin uudeksi ominaisuudeksi löydetään keskijanojen kulkeminen saman pisteen kautta (ovat concurrent).

Kyseessä ilmeisesti on uusi kokeellinen innovaatio tekoälysovellusten kehittelyssä. Taustatiedot ovat tässä suhteessa aika niukkoja. Tilanne tietenkin houkuttelee kokeilemaan erilaisia konfiguraatioita, eikä uusia ominaisuuksia aina löydykään. Jos keskijanat korvataan kulmanpuolittajilla tai keskinormaaleilla, mitään uusia ominaisuuksia ei löydy. Sovelluksen kehittely näyttää olevan vielä kesken, minkä avoin kertominen olisi paikallaan.

Kaikenlaista voidaan kehitellä, ja tuloksena saattaa olla ideoita, joista saatava hyöty on jossakin kokonaan muualla. Jään kuitenkin ihmettelemään, mikä hyöty laskentaohjelman käyttäjälle olisi kuvatunkaltaisesta euklidisesta geometriasta. Jos sovellus alkaa toimia edes lähes moitteetta, kyseessä on eräänlainen geometrinen laskin: syötteeksi annetaan jokin konfiguraatio, ja tulokseksi saadaan luettelo siitä, mikä tässä konfiguraatiossa on totta. Eräänlainen teoreemalaskuri siis. Mutta tarvitsemmeko me tällaista?

Euklidisen geometrian todistamista ei varsinaisesti opeteta sen takia, että tiedettäisiin, mikä on totta, vaan sen takia, että opitaan päättelyn metodi. Tämän näkökulman sovellus ainakin nykymuodossaan ohittaa. Toisaalta voidaan tietysti ajatella, että riittävän pitkälle kehittyessään sovellus alkaa löytää ennen tuntemattomia tuloksia ja ehkä jopa kykenee raportoimaan menettelyn näiden todistamiseen. Tähän on kuitenkin melkoinen matka.

Minkälaiseen käyttöön ja minkälaiseen tehtävään sovellus sitten olisi tarkoitettu?

maanantai 6. toukokuuta 2019

Kuution pyörittelyä

Linkki liikkuvaan kuvaan

xy-tason pistettä $(x,y)$ voi kiertää origon ympäri kulman $w$ verran kertomalla pystyvektoriksi kirjoitetut koordinaatit kiertomatriisilla matriisitulomielessä:
\[
\begin{pmatrix}\cos(w) & -\sin(w) \\ \sin(w) & \phantom{-}\cos(w)\end{pmatrix}
\begin{pmatrix}x \\ y\end{pmatrix}\ .
\]
Kuvion kiertäminen tapahtuu kiertämällä periaatteessa sen jokainen piste, mutta esimerkiksi neliötä kierrettäessä riittää kiertää sen kärkipisteet ja piirtää kierretty neliö näiden avulla.

Mikä olisi kaksiulotteisen kierron kolmiulotteinen vastine? Kiertokeskuksena oleva origo on tällöin korvattava origon kautta kulkevalla kiertoakselilla, jonka ympäri kierretään kulman $w$ verran. Tällöinkin kierto voidaan kuvata matriisilla, joka nyt on kokoa $3 \times 3$.

Matriisi saadaan suhteellisen helposti, jos käytettävissä on riittävästi matriisilaskentaa tukeva symbolinen ohjelma. Jos kiertoakselin yksikön pituinen suuntavektori on $\vec{n} = n_1\vec{i} + n_2\vec{j} + n_3\vec{k}$, muodostetaan matriisi
\[
N = \begin{pmatrix} 0 & -n_3 & n_2 \\ n_3 & 0 & -n_1 \\ -n_2 & n_1 & 0 \end{pmatrix}.
\]
Eksponenttifunktio voidaan määritellä myös matriiseille ja kiertomatriisi saadaan tämän avulla:
\[ Q = \exp(wN),
\] missä $w$ on kiertokulma.

Matriisieksponenttifunktio voidaan määritellä eksponenttifunktion tavanomaisen sarjakehitelmän avulla:
\[
\exp(A) = \sum_{k=0}^\infty \frac{A^k}{k!}.
\]
Tässä potenssit $A^k$ tarkoittavat matriisituloja ja sarjan suppeneminen täytyy luonnollisesti osoittaa. Symboliset ohjelmat eivät kuitenkaan laske matriisieksponenttifunktion arvoja tästä määritelmästä, vaan matriisien ominaisarvoteoria antaa siihen paremmat mahdollisuudet.

Alla oleva lasku näyttää kiertomatriisin laskemisen Mathematicalla tarkkoja arvoja käyttäen. Graafisiin demonstraatiotarkoituksiin on kuitenkin luonnollisempaa käyttää numeerista laskentaa, ts. riittävän tarkkoja likiarvoja.


Mathematica — kuten monet muutkin kehittyneet ohjelmat — tarjoavat mahdollisuuden laatia animaatioita ja säädettäviä demonstraatioita niin ilmiön kuin sitä kuvaavan koodin tutkimiseen: katso kuvakaappausta artikkelin alussa ja linkin takana olevaa liikkuvaa kuvaa.

Matemaattisen tekstin lukijan on syytä olla hereillä ja aina hieman epäluuloinen. Mistä tiedetään, että menettely todella antaa kiertomatriisin? Onko selvää, että kolmiulotteisella kierrolla on aina akseli, kuten edellä ohimennen oletettiin? Jos kuutiota jotenkin pyöräyttelee, niin pääseekö alkuasennosta loppuasentoon aina yhdellä sopivan suuruisella kierrolla sopivan akselin ympäri? Työkaluiksi tarvitaan melkoinen annos matriisilaskentaa. Alaan perehtynyt lukija voi kokeilla taitojaan.

lauantai 16. helmikuuta 2019

Sieventäminen ei aina mene niin kuin luulisi

GeoGebran CAS

Potenssilausekkeen (herätteenä K. Väisälän algebran kirjan harjoitustehtävä, joskaan ei ihan tässä muodossa)
\[
x^{1+n} (x^{n-1})^n (x^n)^{-n}
\]
sieventäminen on useimmille lukiolaisille yksinkertainen juttu: tulos on $x$. GeoGebrakin sieventää sen ongelmitta: pelkän lausekkeen syöttäminen tosin antaa kesken jääneen tuloksen mutta lausekkeen uudelleen kutsuminen (tai suoraan Simplify/Sievennä-komennon käyttö) antaa tuloksen $x$.

Mathematica ei kuitenkaan suostu sieventämään lauseketta Simplify-komennolla, vaan palauttaa sen muuttumattomana. Mitä tästä pitäisi ajatella? Sievennys kyllä onnistuu, jos asetetaan sopiva lisäehto, esimerkiksi Simplify[lsk,x>0] tai Simplify[lsk,Element[n,Integers]], missä lsk tarkoittaa kyseistä lauseketta ja komennon jälkimmäinen argumentti määrittelee $x$:n positiiviseksi reaaliluvuksi tai $n$:n kokonaisluvuksi. Eikö sievennys pädekään rajoituksitta?

Mathematican oletuksena on, että symbolit ovat kompleksilukuja (joiden osajoukkona tietenkin ovat reaaliluvut). Tällöin siis $x$, $n$ tai laskennan välitulokset voivat olla kompleksilukuja, ellei toisin ilmoiteta. GeoGebra sen sijaan ei kompleksilukualgebraa kaikissa suhteissa käytä eikä ota huomioon mahdollisia kompleksiarvoja.

Onko sitten olemassa joitakin arvoja luvuille $x$ ja $n$, joilla lausekkeen arvo ei olekaan $x$?  Ehkä helpoin tapa lähteä tutkimaan asiaa on ajatella lauseke kahden muuttujan, $x$ ja $n$ funktioksi ja piirtää sen kuvaaja, ts. kolmiulotteisen avaruuden pinta. Tähän on olemassa komento, ja tulos on oheisen kuvan mukainen. Mitä ovat pinnan liuskat ja niiden välissä olevat tyhjät tilat?

Plot3D[lsk, {x, -2, 2}, {n, -5, 5}]

Komento Plot3D piirtää reaaliarvoisten funktioiden kuvaajia. Jos arvo on jossakin pisteessä kompleksinen, se jätetään yksinkertaisesti piirtämättä. Lausekkeen reaaliosa ja imaginaariosa ovat kuitenkin reaaliarvoisia:

Plot3D[Re[lsk], {x, -2, 2}, {n, -5, 5}]

Plot3D[Im[lsk], {x, -2, 2}, {n, -5, 5}]

Vaikuttaa siis siltä, että esimerkiksi arvolla $n = -1/5$ funktion arvot ovat kompleksisia, jos $x < 0$. Näin onkin. Arvoksi saadaan Mathematicalla laskettuna
\[
\left(\frac{\sqrt{5}-1}{4} - i\sqrt{\frac{\sqrt{5}+5}{8}}\right)x.
\]
Jos $n = -1/2$ ja $x < 0$, tulos on $-x$.

Lukija ehkä kysyy, miten murtopotenssit — tai niiden päähaarat — on tällöin määritelty ja voiko olla varma, että Mathematica laskee oikein. Tai että ylipäätään jokin laskentaohjelma laskee oikein. Varovaisuus on paikallaan. Mikään ihmisen tekemä ei yleensä ole täysin virheetöntä eivätkä määritelmätkään ole aina samoja. Saman laskun voikin varmuuden vuoksi laskea useammalla ohjelmalla. Ihan itse käsin laskeminen on lisäksi opettavaista, mutta saattaa olla työlästä eikä sekään aina virheetöntä.

Onko edellä oleva sitten laskettu oikein? Ainakin Matlab-klooni Octave laskee samoin.