torstai 22. helmikuuta 2024

Koulumatematiikka ja alkeellinen ohjelmointi

Lukion opetussuunnitelman mukaan opiskelijan tulisi paljon muun ohella kehittyä hyödyntämään tietokoneohjelmistoja. Tarkemmin ei täsmennetä, mitä tämä oikeastaan tarkoittaa. Todetaan vain tavoitteeksi, että opiskelija osaa käyttä ohjelmistoja kunkin kurssin matemaattisissa tehtävissä. Huippuna on oppia ohjelmoimaan yksinkertaisia algoritmeja. Käytännössä tämä lienee johtanut melko triviaalien asioiden katsomiseen laskimista tai ohjelmistoista ja tutustumiseen muutamiin ohjelmistoihin, joita tuskin myöhemmissä opinnoissa tai elämässä yleensäkään tullaan käyttämään.

Kuitenkin matematiikka voisi tarjota ympäristön, jossa olisi luontevaa oppia ymmärtämään ohjelmoinnin idea. Tällä puolestaan on merkitystä tietotekniikkaa vahvasti hyödyntävässä yhteiskunnassa myös ihmiselle, joka ei koskaan tulisi ohjelmoimaan yhtään mitään. Jonkinlaisena ohjelmoinnin synonyymina usein käytetään koodausta, mutta tämä johtaa minusta harhaan. Kyse ei ole siitä, että pitäisi oppia kirjoittamaan tietyn syntaksin mukaista koodia, vaan periaatteen ymmärtämisestä. Toki mikä tahansa ohjelmointi edellyttää oikeaa syntaksia, mutta tätä ei ole syytä painottaa välttämättömyyttä enempää. 

Mitä tällainen ohjelmointi sitten voisi olla? Viime syksyn pitkän matematiikan ylioppilaskokeen neljäs tehtävä muodostaa hyvän lähtökohdan pohdiskeluille:

Vektorit $\vec{u} = 3\vec{i}+\vec{j}-2\vec{k}$ ja $\vec{v} = \vec{i}+2\vec{j}-2\vec{k}$ virittävät origon kautta kulkevan tason $T$, eli ne ovat tason suuntavektoreita. Määritä pisteen $(6,7,1)$ etäisyys tasosta $T$.

Tämä on kokeen A-osan tehtävä ja sellaisena tarkoitettu ratkaistavaksi varsin perinteiseen tapaan. Se on kuitenkin tehtävä, jonka ratkaiseminen symbolista laskentaa (CAS) hyödyntäen olisi matematiikan oppimisen kannalta perusteltua. Tällöin numeeriset laskut jäävät toissijaisiksi (toisin sanoen ohjelman tehtäviksi), mutta laskija joutuu miettimään algoritminsa rakenteen. Oleellista on, että tehtävän oliot (vektorit, pisteet jne.) esitetään symboleilla, joilla niihin algoritmissa viitataan. Ratkaisu GeoGebralla voisi näyttää seuraavalta (kuvan saa suurennetuksi klikkaamalla):


Tällaisena ratkaisu on oikeastaan ohjelmakoodi. Vaihtamalla tason virittäjävektorit ja tarkasteltava piste saadaan samantien tehtävä ratkaistuksi toisenlaisilla lähtötiedoilla. Näiden komponentit voivat jopa olla symboleja, jolloin tulos on jo aika pahannäköinen algebrallinen lauseke. Ohjelman syöttötietoina ovat siten vektorit $\vec{u}$ ja $\vec{v}$ sekä piste $P$, tuloksena saadaan pisteen etäisyys tasosta.


Luontevaa olisi tällöin kirjoittaa ohjelma erilliseksi tiedostoksi tai muodostaa siitä muusta laskennasta riippumaton itsenäinen funktio. Funktion määrittely näyttäisi periaatteessa seuraavalta:

etaisyys(u,v,p) = function{
q := r*u+s*v;
yhtalo := {dot(p-q,u)=0, dot(p-q,v)=0};
ratkaisu := solve(yhtalo,{r,s});
q1 := substitute(q,ratkaisu);
sqrt(dot(p-q1,p-q1))
}

(Olen siirtynyt englanninkielisiin termeihin, kuten ohjelmakoodissa on luontevaa.)

Käsittääkseni GeoGebra ei tue tämänkaltaista funktioiden määrittelyä eikä edellä oleva koodi ole minkään todellisen ohjelmointikielen mukaista. Riippuen ohjelmointikielen tavasta esittää vektorit funktion kutsu voisi olla edellä mainitun esimerkin tapauksessa

etaisyys((3,1,-2),(1,2,-2),(6,7,1))
tai vain
etaisyys(vec1,vec2,pst)
mikäli lähtötiedot on talletettu näihin symboleihin. Tuloksena saadaan kysytty etäisyys.

Valmiiksi ohjelmoitu funktio avaa tien monimutkaisempien tehtävien yksinkertaiseen ratkaisemiseen. Jos esimerkiksi pitäisi etsiä pisteen $(1,2,3)$ kautta kulkevalta vektorin $3\vec{i}-2\vec{j}+6\vec{k}$ suuntaiselta suoralta $s$ pisteet, jotka ovat etäisyydellä $2$ vektoreiden $\vec{u}$ ja $\vec{v}$ määräämästä tasosta, nämä saadaan muodostamalla ensin suoralla olevat pisteet parametrin $t$ funktiona ja ratkaisemalla sitten kyseeseen tulevat parametriarvot etäisyysfunktion avulla muodostetusta yhtälöstä:

suora := (1,2,3)+t*(3,-2,6)
solve(etaisyys(vec1,vec2,suora)=2, t)

Tämä antaa ratkaisuksi kaksi arvoa parametrille $t$ ja näiden avulla voidaan laskea kyseiset suoran pisteet.

Tällainen funktion määrittely voisi olla ensimmäinen askel ohjelmoinnin opetteluun. Kyseessä olisi luonnollinen osa matematiikan opiskelua. Tarpeen mukaan ohjelmointirakenteita voitaisiin ottaa käyttöön lisää painottamatta asiaa varsinaiseksi ohjelmointikielen syntaksin opetteluksi. Ohjelmoinnin kannalta tavoitteena olisi periaatteen ymmärtäminen, ei koodariksi opiskelu.

Matematiikan kannalta painottuisi kokonaisnäkemys tehtävän ratkaisemisen strategiasta laskun yksityiskohtiin keskittymisen sijasta. Tällaiseen työskentelyyn olisi yleensäkin hyvä oppia, ei yksinomaan matematiikassa. Se ehkä vastaisi myös paremmin opetussuunnitelman tavoitetta "kehittää laskemisen, luovan ajattelun sekä ilmiöiden mallintamisen, ennustamisen ja ongelmien ratkaisemisen taitoja".

Oleellinen edellytys on, että käytössä on laskentaohjelma, joka tukee edellä kuvattua menettelyä. En tarkoin tiedä, mikä tilanne on tavallisimmissa CAS-ohjelmissa. Jos GeoGebra ei tue, niin voisiko sitä kehittää?

Isot symbolilaskennan ohjelmistot kyllä tukevat menettelyä, mutta niiden koulukäyttö ei monestakaan syystä ole järkevää. Lopuksi esimerkki edellä olevista laskuista Mathematicalla suoritettuina.



torstai 11. tammikuuta 2024

Matemaattinen seinäkalenteri



American Mathematical Society (AMS) julkaisee vuosittain matemaattisen seinäkalenterin. Kiinnostuin ja tilasin, tuli kolmessa viikossa. EU:n ulkopuolelta tuleva lähetys piti tullata, mikä sujui kohtuullisen vaivattomasti netissä. Kulut: luottokortilla Amerikkaan 25 euroa (kalenteri ja postikulut), kotimaiselle postille ja tullille lisäksi 9 euroa.

Mitä sitten sain? Seinäkalenterin, jonka kuvat ovat upeita fraktaalikuvioita ja jossa on muutoin tavanomaiset kuukausilehdet, mutta jokaiselle päivälle on matemaattinen probleema. Tämän vastaus on tiedossa: se on kyseisen päivän numero. Tarkoitus ei siten ole vastauksen etsiminen, vaan sen pohdiskelu, miten tulokseen päästään tai mistä yleensä on kyse. Itse asiassa sain kaksi seinäkalenteria, vuosien 2023 ja 2024. Edellinen kaupanpäällisenä, koska niitä vielä oli jäljellä.


Millaisia päivittäiset ongelmat sitten ovat? Skaala ulottuu yksinkertaisesta aritmetiikasta suunnilleen ensimmäisen yliopistovuoden matematiikan opintojen tasolle. Usein ongelmassa on jokin hieman yllättävä piirre, joka tuottaa ahaa-elämyksen: tällainenkin riippuvuus on, näinkin voi asiaa katsoa. Muutaman kerran olen törmännyt minulle ennestään tuntemattomaan käsitteeseen, ja lisäopiskelua on tarvittu. Googlesta on yleensä apua. Tekijät sanovatkin esipuheessa, että ideana on myös ollut tutustuttaa ennestään todennäköisesti tuntemattomiin asioihin.

Esimerkiksi tammikuun toisena päivänä tarjolla oli lauseke \[\left(\sum_{k=1}^{\infty}\frac{1}{(2n-1)(2n+1)}\right)^{-1}.\] Tämän arvo siis tietenkin on 2, mistä voi varmistua vaikkapa syöttämällä sen laskentaohjelmalle. Sarjan summeeraamista voi kuitenkin pohtia, eikä se kovin vaikeata käsin laskijallekaan ole.

Joulukuun 30. päivän tehtävä oli geometrinen:

Sinisen neliön ala on siis ilmeisesti 30, mutta missä asennossa neliöt oikein ovat ja miten tämän laskisi. Kuvio on helppoa piirrellä GeoGebraan siten, että neliöiden asentoa voi muuttaa, ja todellakin näyttää siltä, että neliöiden asennolla ei ole vaikutusta tulokseen. Sen voi tietenkin laskea analyyttisen geometrian tempuilla, mutta näkisikö sen jotenkin elegantimmin? En ole jäänyt pohtimaan.

Tammikuun 7. päivänä kysyttiin 'How many frieze patterns are there?' Ilmeisesti siis seitsemän kappaletta, mutta mitä ne ovat? Google löytää aiheesta useita viitteitä, vaikkapa Wikipediaan tai Virginia Commonwealth Universityn kurssimateriaaliin.

Joillakin ongelmilla on kompatehtävän luonne, esimerkiksi 'Half of the oddiest prime' kuluvan vuoden huhtikuun ensimmäisenä päivänä. Ehkäpä kakkonen sitten on parillisena oudoin alkuluku. Hämäräksi minulle on jäänyt viime marraskuun 23. päivän tehtävä:

Olisiko Thanksgiving Day jonkinlainen avain ongelmaan vai mistä on kyse? Jos jollakulla lukijalla on idea, niin kertokaa.

Tällainen kalenteri on erinomainen virittelemään kiinnostusta ja harrastusta matematiikkaan. Kun vastaukset kerran tiedetään, ei ole paineita tehtävien ratkaisemiseen. Voi rauhassa ihmetellä ja mietiskellä. Ei ole myöskään ylioppilaskokeeseen valmentautumisen henkeä, vaikka toki voi olla hyödyksi siinäkin. Tekisikö joku vastaavan kotimaisen? Tai hankkisi lisenssin, jos ei oma into riitä.


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!

keskiviikko 29. marraskuuta 2023

MatTa-sivusto


Aikaa eläkkeelle jäämisestäni on ehtinyt kulua seitsemäntoista vuotta. Viimeiset varsinaiset vuoteni työelämässä kuluivat matematiikan alan digitaalisten opiskelumateriaalien kehittelyssä Teknillisessä korkeakoulussa, Aalto-yliopiston edeltäjässä. Tuotokset julkaistiin verkossa osoitteessa http://matta.hut.fi. Projektin nimenä oli MatTa, jonkinlainen lyhenne sanoista MATematiikkaa TietokoneAvusteisesti.

Verkkosivut — MatTa-sivusto — ovat olleet olemassa tuosta ajasta lähtien. Kävin syksyllä vanhalla työpaikallani ja sivusto tuli puheeksi. Olisiko aika poistaa vai mitä sille tehtäisiin? Lokitiedot osoittivat kuitenkin, että ainakin osalla materiaaleista oli edelleen käyttäjiä. Olisiko revisiointi paikallaan? Lupasin katsoa.

Kävin sivuston lävitse. Oli isompi työ kuin kuvittelin. Piti palauttaa mieleen kahdenkymmenen vuoden takaisia ajatuksia. Osa materiaaleista oli auttamatta vanhentunutta, suuri osa animaatioita, jotka eivät enää olleet pitkään aikaan toimineet. Matemaattinen sisältö ei niinkään vanhene, tietotekniset ratkaisut kyllä. Karsin vanhentuneet pois, jätin jäljelle materiaalit, joilla jotenkin voi kuvitella olevan vielä käyttöä. Näihinkin toki jäi vanhentuneita linkkejä enkä ryhtynyt varsinaisiin paikkauksiin.

Sivustolla on nyt uusi osoite: https://matta.math.aalto.fi/. Ainakin jonkin aikaa vanhasta osoitteestakin ohjataan tänne.

Avaamalla osoitesivun lukija näkee parhaiten, millaisista materiaaleista on kyse. Lyhyesti sanottuna taso ulottuu lukion pitkästä matematiikasta yliopisto-opintojen ensimmäiseen, osittain ehkä toiseen vuoteen. Lisäksi on alkeisopas LaTeXin ja Mathematica-laskentaohjelman käyttöön. Lukion osalta on tosin ehkä todettava, että nykyisiin digikirjoihin tottuneet opiskelijat saattavat kokea materiaalin vanhentuneeksi ja haasteelliseksi (= vaikeaksi).



Lukiolaisen tietosanakirja Iso-M

Erikseen kannattaa mainita tavallisten differentiaaliyhtälöiden opiskelupaketti DelTa, joka voidaan räätälöidä erilaajuisten kurssien materiaaliksi. Kyseessä oli kokeilu digitaalimateriaalin mahdollisuuksista. Kovin paljoa sitä ei kuitenkaan ole käytetty. Räätälöinti ei ole aivan yksinkertaista, mutta jos kiinnostusta löytyy, voin auttaa. (Kun nyt kerran palautin asiat mieleeni.)



DelTa-paketti

Digitaalista opiskelumateriaalia on maailmanlaajuisesti saatavissa paljon, huolellisesti tehdyistä kirjoista fragmentaarisiin artikkeleihin, animaatioihin ja videoihin. Saatavissa rahalla tai ilman. Kieli on useimmiten englanti tai ainakaan muunkielisten löytämistä ei useinkaan edes yritetä. Suomeksikin löytyy kaikenlaista, mutta aika hajanaisesti. Käsittääkseni yliopistoissakin tuotetaan kyllä kurssimateriaaleja, mutta näiden jakelu kurssin ulkopuolelle on vähäistä. Syynä usein ehkä puuttuva viimeistely, jolloin laajemman jakelun kynnys nousee.

Helposti tarjolla oleva materiaali saattaisi lisätä kiinnostusta matematiikkaan. Jonkinlainen ohjaus ja sopivien kokonaisuuksien paketointi olisi tarpeen. Tällaisena asiasta tulee paljolti organisointiongelma. Kuka tai mikä — esimerkiksi yhdistys tai muu organisaatio — ottaa asian hoitaakseen? Rahaakin tietysti tarvitaan.


keskiviikko 15. marraskuuta 2023

Gauss ja 17-kulmio

Kaikkien aikojen merkittävimpänä matemaatikkonakin tunnettu Carl Friedrich Gauss (1777 – 1855) osoitti teoksessaan Disquisitiones Arithmeticae (julkaistu 1801) paljon muun ohella, että säännöllinen 17-kulmio on mahdollista konstruoida geometrisesti, ts. ainoastaan harppia ja viivoitinta käyttäen. Konstruktiota Gauss ei kuitenkaan esittänyt.

Säännöllisten monikulmioiden geometrinen konstruointi on kiinnostanut geometrikkoja antiikin ajoista lähtien. Esimerkiksi viisikulmion konstruktion esittää Eukleides Stoikheia- (Elementa-) teoksensa neljännessä kirjassa propositioina 10 ja 11. (Katso esimerkiksi englanninkielistä tai kreikankielistä esitystä.) Seitsemäntoistakulmion ongelmaa ei kuitenkaan kukaan ole ennen Gaussia ratkaissut.

Miten asiaa voisi nykyisillä työvälineillä tutkia?


Seitsemäntoistakulmio

Seitsemäntoistakulmion piirtäminen grafiikkaohjelmalla on helppoa: Koska piste $(\cos(t),\sin(t))$ sijaitsee origokeskisellä yksikköympyrällä kulman $t$ (radiaaneissa) suunnassa, saadaan 17 tasavälistä ympyrän pistettä lausekkeista \[(\cos(2\pi k/17),\sin(2\pi k/17)),\] missä $k$ saa arvot $0,\ 1,\ 2,\ \dots\,\ 16$. Antamalla $k$:lle lisäksi arvo $17$ saadaan ensimmäinen piste uudelleen. Piirtämällä murtoviiva näiden pisteiden kautta saadaan yksikköympyrän sisällä oleva säännöllinen 17-kulmio.

Toinen vaihtoehto on laskea vaikkapa valmiilla laskentaohjelman komennolla numeerinen ratkaisu polynomiyhtälölle $x^{17} - 1 = 0$. Tällä on 17 ratkaisua, joista yksi on reaalinen, $x = 1$, ja muut kompleksisia. Näiden reaali- ja imaginaariosat antavat samat 17-kulmion kärkipisteiden koordinaatit kuin edellä.

Gauss tutki 18-vuotiaana vuonna 1796 polynomiyhtälöiden ratkaisemista ratkaisukaavoilla, ts. neljän peruslaskutoimituksen ja juurenoton avulla. Toisen asteen yhtälön ratkaisukaavat olivat tunnettuja jo vanhalla ajalla, kolmannen ja neljännen asteen yhtälön ratkaisukaavat olivat löytyneet 1500-luvulla. Viidennen asteen yhtälölle oli yleistä ratkaisukaavaa yritetty menestyksettä löytää parin sadan vuoden ajan, ja alkoi vaikuttaa ilmeiseltä, että sellaista ei ehkä voitaisikaan löytää. Vuonna 1824 Nils Henrik Abel lopulta todisti, että viidennen ja korkeamman asteen yhtälöille ei yleistä ratkaisukaavaa ole.


Gaussin esitys Disquisitiones Arithmeticae -teoksessa. Juurilausekkeessa
on painovirhe: neljännen termin edessä tulee olla plusmerkki.

Ratkaisu peruslaskutoimitusten ja juurten ottojen avulla voi kuitenkin olla erikoistapauksissa mahdollista. Gauss tutki muun muassa muotoa $x^n - 1 = 0$ olevia yhtälöitä ja totesi, että eräissä tapauksissa niiden ratkaisut voidaan lausua juurilausekkeita käyttäen. Arvo $n = 17$ on tällainen. Siten esimerkiksi pisteen $P_1$ x-koordinaatille $\cos(2\pi/17)$ saadaan lauseke \[-\frac{1}{16}+\frac{\sqrt{17}}{16}+\frac{1}{16} \sqrt{34-2\sqrt{17}}+\frac{1}{8} \sqrt{17+3 \sqrt{17}-\sqrt{34-2\sqrt{17}}-2 \sqrt{34+2 \sqrt{17}}}.\] Tämän löytäminen ei ole aivan helppoa enkä paneudu siihen, en myöskään lukua $n$ koskeviin ehtoihin.

Symbolisen laskentaohjelman käyttäjä voi yrittää löytää edellä mainitun juurilausekkeen muokkaamalla kosinifunktion arvoa $\cos(2\pi/17)$. Laskentaohjelma Mathematican komento ToRadicals tuottaa lausekkeen \[\frac{1}{4 \sqrt{\frac{2}{15+\sqrt{17}-\sqrt{2\left(17-\sqrt{17}\right)}+\sqrt{2 \left(34+6\sqrt{17}+\sqrt{2 \left(17-\sqrt{17}\right)}-\sqrt{34\left(17-\sqrt{17}\right)}+8 \sqrt{2\left(17+\sqrt{17}\right)}\right)}}}}.\] En saanut Mathematicaa sieventämään tätä. Sen ja edellä saadun juurilausekkeen erotuksen ohjelma kuitenkin sieventää nollaksi, joten ne esittävät samaa lukua.

Mistä Gauss sitten päätteli, että 17-kulmio voidaan piirtää geometrisesti? Mainittu kosinin arvo riippuu vain yhteen-, vähennys-, kerto- ja jakolaskusta sekä neliöjuuren otosta, ja jokainen operaatio voidaan erikseen toteuttaa harpilla ja viivoittimella. Janojen $a$ ja $b$ yhteen- tai vähennyslasku tarkoittavat janojen asettamista samalle suoralle, kerto- ja jakolasku niiden sekä yksikköjanan asettamista kahdelle toisensa leikkaavalle suoralle ja nelijuuren otto suorakulmaisen kolmion piirtämistä puoliympyrän sisään; kuviot alla. Täten juurilausekkeen edustama pituus saadaan vaiheittain konstruoiduksi. Kun yhden 17-kulmion kärjen paikka on täten konstruoitu, loput saadaan harpilla helposti. Tällä tavoin tehty konstruktio ei ole kovin sujuva, mutta se osoittaa  geometrisen konstruktion mahdolliseksi. Gaussille riitti tämä. Myöhemmin on toki esitetty sujuvampiakin konstruktioita.

Juurilausekkeen konstruoinnissa tarvittavat geometriset alkeiskonstruktiot.

Tarkempia tietoja ja yksityiskohtia löytyy ainakin Wikipedia-artikkeleista Konstruoituva monikulmio ja Seitsentoistakulmio sekä niiden englannin- (tai muun-) kielisistä vastineista. (Näissä on eroja. Esimerkiksi saksankieliset näyttävät sisältävän materiaalia, jota muissa ei ole.) Artikkelit sisältävät myös animaatioita 17-kulmion geometrisesta konstruointiprosessista. Juurilausekkeen laskeminen löytyy tietenkin Disquisitiones Arithmeticae -teoksesta ja ainakin Jörg Bewersdorffin kirjasta Galois Theory for Beginners, varmaan muualtakin. Saksankielisessä Wikipedia-artikkelissa näyttää periaate myös olevan kuvattuna.


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 23. toukokuuta 2023

Tekoälyä kiusaamassa


Bing Image Creatorin vastaus kuvapyyntöön aiheesta
'AI chatbot trying to solve a geometric problem'.

Tekoälybotti ChatGPT:n matemaattiset kyvyt ovat herättäneet mielenkiintoa: Mitä kaikkea se osaa ja mihin kaikkeen sitä voi käyttää?

Kyseessä on kielimalli, joka pystyy juttelemaan varsin luonnollisen tuntuisesti monista asioista monilla kielillä. Matematiikka on kuitenkin hieman eri asia: on pystyttävä ajattelemaan kerätyn valmiin tiedon lisäksi. (Aivan oikein: Matematiikassakin tarvitaan enemmän tai vähemmän ulkoa oppimista. Ilman asioiden tietämistä ei oikein ole, mitä ajatella.)

Timo Tossavainen on Tieteessä tapahtuu -lehdessä esittänyt ja kommentoinut keskustelunsa ChatGPT:n kanssa Bolzano-Weierstrassin lauseen todistamisesta. Varsin vaativaa pyytää tällaista todistusta eikä ChatGPT asiasta oikein suoriutunutkaan. Se osasi kyllä käyttää luontevia aiheeseen liittyviä fraaseja, mutta pitävää logiikkaa ei syntynyt. Eihän sitä voisi kielimallilta vaatiakaan.

ChatGPT osaa ainakin jonkin verran kirjoittaa ohjelmakoodeja. Python tuntuu olevan sille luonteenomainen ympäristö, nyt jo muinaiseksi käynyttä BASIC-koodiakin sain sen tuottamaan. Mathematica-ohjelmiston ohjelmointikieltä, Wolfram Languageakin se pystyy kirjoittamaan; tähän palaan joskus toiste.


Pyysin ChatGPT:ltä koodia kolmion pinta-alan laskemiseen, kun lähtötietoina ovat kärkipisteiden koordinaatit $(x_1,y_1)$, $(x_2,y_2)$, $(x_3,y_3)$. Tuloksena oli lyhyt täysin oikea koodi, joka perustui valmiin kaavan käyttöön: ala on $|x_3(-y_1 + y_2) + x_2(-y_3 + y_1) + x_1(-y_2 + y_3)|/2$. Näinhän asia tietenkin on. Olin vain ajatellut, että lähtökohtana olisi ollut puolet kannan ja korkeuden tulosta.

Jos kaavaa ei ennestään tunne, sen johtaminen lienee yksinkertaisinta ristitulon avulla: kolmion ala on $|\vec{a} \times \vec{b}|/2$, missä $\vec{a}$ ja $\vec{b}$ ovat kolmion sivuvektorit. Vektorialgebraa tuntemattomalle lienee kuitenkin helpointa ottaa lähtökohdaksi puolet kannan ja korkeuden tulosta. Pyysin siis ChatGPT:tä johtamaan käyttämänsä kaavan tästä lähtökohdasta.

Tapansa mukaan ChatGPT oli myönteinen:

Yes, the formula (x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2 can be derived from the fact that the area of a triangle is half of the product of its base and height. Consider a triangle with vertices A(x1,y1), B(x2,y2), and C(x3,y3). Let the base of the triangle be the line segment BC and let the height of the triangle be the perpendicular distance from A to BC, which we'll call h.

Tämän jälkeen se laski sivun $BC$ pituuden Pythagoraan mukaisesti ja totesi korkeudesta:

The distance between point A and the line BC is given by: h = (|x2*y3 + y2*x1 + x3*y1 - x1*y3 - y1*x2 - y2*x3|) / BC

Kolmion alan lauseke syntyi nyt tietenkin suoraviivaisesti, mutta en ollut tyytyväinen, vaan kysyin, mistä se sai korkeuden lausekkeen.

The expression |x2y3 + y2x1 + x3y1 - x1y3 - y1x2 - y2x3| can be derived using the formula for the distance between a point and a line.

Aivan oikein, näinhän voi edetä ja käyttää analyyttista geometriaa. ChatGPT muodosti suoralle $BC$ yhtälön ja saattoi sen standardimuotoon, vaikkei tätä myöhemmin käyttänytkään. Laski suoran kulmakertoimen ($m = \dots$) ja totesi, että korkeusjanan kulmakerroin on $-1/m$. Tämän jälkeen se muodosti korkeusjanasuoran yhtälön ja tavoitteena oli laskea korkeusjanan kantapisteen koordinaatit kahden suoran leikkauspisteenä. Sitten voikin laskea korkeusjanan pituuden ja kolmion alan lausekkeen.

Kaikki ei kuitenkaan mennyt niin kuin pitäisi. Kulmakertoimen $m$ lausekkeen sijoittaminen jäi puolinaiseksi: yhteen kohtaan sijoitettiin, kaikkialle ei. Yhtälöiden ratkaisemisessa termejä siirrettiin yhtäläisyysmerkin toiselle puolelle, mutta merkin vaihtaminen unohtui. Oikeaan lopputulokseen pääsemistä tämä ei kuitenkaan häirinnyt.

Esitin kritiikkiä:

I have studied your computations and there are some errors in the algebra of equations. But they annul each other, and then, the ultimate result is correct. I think, you shoud be more careful!

ChatGPT:

I apologize for any errors in my computations. As an AI language model, I try my best to provide accurate answers to the best of my knowledge and understanding. However, I understand that mistakes can still happen, and I appreciate you pointing out any errors you have found.

If you could let me know which equations you found errors in, I can take a closer look and see if there are any corrections I can make to improve the accuracy of my answer. Thank you for your feedback and for your understanding.

Huomautin kulmakertoimen sijoittamisesta ja termien merkinvaihdosta. Hän (tuntuu, että näin todellakin on syytä sanoa) kiitti ja erosimme toivottaen toisillemme hyvää yötä.

Mitä tästä kaikesta sitten pitäisi ajatella? Keskustelu saa hämmästyttävän inhimillisiä piirteitä. ChatGPT oli kohtelias eikä jankuttanut (vaikka tätäkin se tekee). Fraasit se hallitsee, mutta ajattelussa — tietenkin — on puutteita. Jään miettimään, kuinka paljon ihmisten välisessä kanssakäymisessäkin on vakiofraaseja ilman syvempää ajattelua.

Entä sitten tekoäly ja matematiikan opiskelu? ChatGPT:n esitystä en matematiikan opiskeluun suosittelisi. Ajattelu — jota siis oikeastaan ei ole — on sekavaa eikä virheettömyydestä ole takeita. Jos opiskelija ei asiaa ennestään tunne, hän hämmentyy. Tiettyjä faktoja ChatGPT:ltä voi kysyä (samoin kuin vaikka Googlen hakukoneelta) ja saattaa hyvinkin saada kelvollisia vastauksia. Hakukoneen käyttöön verrattuna haittana on, että lähdekritiikkiin on vähemmän mahdollisuuksia. Olen kysynyt ChatGPT:ltä matriisin häiriöalttiuden (condition number) määrittelyä ja saanut moitteettoman vastauksen (ainakin siis tässä tapauksessa).

On tietenkin vaikeata sanoa, mihin tekoälyn kehitys johtaa. Luovaan ajatteluun on kuitenkin vielä matkaa, jos siihen koskaan päästäänkään.