Matematiikan opiskelussa on alettu käyttää symbolisia laskentaohjelmia. Näiden käyttö ei kuitenkaan ole aina sitä, mitä äkkiseltään voisi odottaa. Ohjelman antamat tulokset voivat näyttää yllättäviltä, jopa vääriltä verrattuna matematiikassa totuttuun. Onkin syytä ajatella, että ohjelma elää omaa elämäänsä, vaikka sillä toki onkin läheinen suhde matematiikkaan.
Symbolisella laskennalla on ohjelmoinnin luonne, ja tämän takia olisi parempi käyttää laskennan syötteissä ohjelmointikielen tyyppisiä komentoja ja funktioita traditionaalisen matemaattisen notaation sijasta, vaikka aloituskynnyksestä ehkä tuleekin korkeampi. Matematiikan notaatio ei myöskään ole yksikäsitteistä, vaan tarvitsee asiaa ymmärtävän ihmisen tulkintaa. Esimerkiksi $a(b+c)$ saattaa tarkoittaa summan $b+c$ kertomista luvulla $a$ tai funktion $a$ arvoa argumenttina $b+c$.
Paitsi että syötteiden ajatteleminen ohjelmointikielenä korostaa matematiikan ja ohjelmalla tehdyn laskennan eroa, se myös auttaa eteenpäin: yksinkertaiset syötteet on helpompaa oppia laajentamaan usean komennon jonoiksi, ts. pieniksi ohjelmiksi. Ainakin jos ohjelmoinnin perusidea on tuttu.
Esitän seuraavassa joitakin esimerkkejä hieman yllättävistä tilanteista. Nämä on laskettu Mathematicalla; pdf-muotoinen laskentadokumentti löytyy osoitteesta
http://www.elisanet.fi/simo.kivela/blg/SymbLask.pdf . Eri ohjelmat ovat erilaisia. Ilmiö, joka esiintyy yhdessä, ei ehkä esiinny toisessa. Kaikissa kuitenkin on jotakin yllättävää, mikä on osoitus symbolisen laskennan vaikeudesta: tuskin mikään algoritmi on täydellinen. Kyse voi myös olla tasapainoilusta täydellisyyden ja kohtuullisen laskenta-ajan välillä.
Jos joku on kiinnostunut ratkaisemaan samat esimerkit jollakin muulla ohjelmalla, julkaisen dokumentin mielelläni.
Neljännen asteen yhtälö
Jos yhtälöstä $ax^4 + bx^3 + cx^2 + dx + e = 0$ ratkaistaan $x$ symbolisella ohjelmalla, saadaan periaatteessa neljännen asteen yhtälön ratkaisukaavat. Kertoimille voidaan sijoittaa numeeriset arvot joko yhtälöön tai ratkaisukaavoihin. Edellisessä tapauksessa ratkaisualgoritmia sovelletaan numerokertoimiseen yhtälöön, jälkimmäisessä vain sijoitetaan arvot valmiisiin lausekkeisiin.
Tulosten tietenkin pitäisi olla samat. Useimmiten näin toki onkin, mutta toisinkin voi käydä: Jos $a = 1$, $b = c = d = 0$ ja $e = -1$ ja nämä sijoitetaan yhtälöön, on ratkaistavana yhtälö $x^4 - 1 = 0$. Mathematica antaa oikean tuloksen $\pm 1$, $\pm i$. Ratkaisukaavoihin sijoittamalla saadaan neljään kertaan
Indeterminate. Jos kertoimen $b$ arvoa hieman muutetaan, $b = 1/1000000$, molemmat tavat antavat saman oikean tuloksen.
Oikeastaan tilanne ei ole kovin kummallinen: eivät toisen asteen yhtälön ratkaisukaavatkaan toimi, jos $a = 0$.
Yliharmoninen sarja
Sarja $\displaystyle\sum_{n=1}^{\infty}\frac{1}{n^s}$ suppenee, jos $s > 1$ (jos kompleksiset arvot sallitaan, niin tulee olla $\mathrm{re}(s) > 1$).
Mikäli symbolinen ohjelma yleensä pystyy laskemaan sarjan summan, se saattaa antaa tulokseksi
zeta(s). Kyseessä on Riemannin $\zeta$-funktio. Tapauksessa $s = 2$, on $\zeta(2) = \dfrac{\pi^2}{6}$, mikä on oikea sarjan summa. Tapauksessa $s = -1$ saataisiin sarjan summaksi $\zeta(-1) = -\dfrac{1}{12}$, jolloin siis luonnollisten lukujen summa olisi $1 + 2 + 3 + 4 + \dots = -\dfrac{1}{12}$.
Toimintoa on pidettävä virheellisenä. Summaan
zeta(s) tulisi liittyä rajoitus $\mathrm{re}(s) > 1$. Riemannin $\zeta$-funktio on nimittäin näillä arvoilla määriteltävissä sarjan summana, mutta vaikka se muilla keinoilla voidaankin määritellä myös negatiivisella puolella, harmonistyyppisestä sarjasta sitä ei saada.
Syynä omituiseen summaukseen saattaa olla, että symbolisissa ohjelmissa usein esitetään tulos ns. yleisessä tapauksessa jättäen poikkeukselliset arvot huomiotta. Tässä tapauksessa poikkeusarvoja on kuitenkin paljon.
Itseisarvoyhtälö
Yhtälön $|z - a| = |z - b|$ ratkaisuksi usein saadaan $z = \frac{1}{2}(a + b)$, mikä on tietenkin oikea tulos, mutta ei kata tapausta $a = b$. Tulos ei ole riittävä myöskään kompleksialueella, missä jokainen pisteitä $a$ ja $b$ yhdistävän janan keskinormaalin piste on ratkaisu.
Symbolisessa ohjelmassa saattaa olla yhtälön ratkaisemiseen tarkoitetun solve-funktion lisäksi jokin muu funktio tilanteen tarkempaa analyysia varten. Tämän avulla ehkä saadaan myös kompleksialueella pätevä ratkaisu, joka kuitenkin voi olla monimutkainen eikä kovinkaan helposti hahmotettavissa.
Trigonometrinen yhtälö
Yhtälöllä $\sin(x) = \sin(x + \frac{\pi}{5})$ on yksinkertainen ratkaisu $x = \frac{2\pi}{5} + n\pi$, mikä on käsinlaskulla helposti löydettävissä. Symbolinen ohjelma saattaa kuitenkin antaa monimutkaisempaa:
\[
x = \arctan\left(\frac{\sqrt{2(5 - \sqrt{5})}}{3 - \sqrt{5}}\right) + 2n\pi,
\quad
x = \arctan\left(\frac{\sqrt{2(5 - \sqrt{5})}}{3 - \sqrt{5}}\right) - \pi + 2n\pi.
\]
Tulos on sinänsä oikea. Jos ohjelma pystyy sieventämään sen, päästään samaan kuin käsinlaskulla.
Miksi sitten näin monimutkaista? Yhtälön ratkaisualgoritmi varautuu paljon hankalampiinkin yhtälöihin eikä siten aina löydä optimaalista ratkaisutapaa. Hyvä ohje onkin yrittää sieventää, jos lauseke näyttää kovin mutkikkaalta. Tämä tosin voi johtaa huomattavan kauan kestävään laskentaan, mahdollisesti päättymättömään. Käyttäjän on syytä tietää, millä loputon laskenta voidaan katkaista.