Sarjaratkaisun etsiminen Mathematicalla

Olkoon tarkasteltavana ensimmäisen kertaluvun differentiaaliyhtälö:

diffyht =  y'[x] == 1  +  y[x]^2

Tälle pyritään etsimään sarjaratkaisu origokeskisenä potenssisarjana. Tavoitteena on laskea sarjan termien kertoimet n-asteiseen termiin saakka:

n = 10

Tarvittava potenssisarjamuotoinen yrite jäännöstermeineen on

yrite :=  
      Function[x, 
        Sum[(Subscript[a, k]) x^k,  {k, 0, n}]  +  
          O[x]^(n + 1)]

Tämä on esitetty funktiona eikä lausekkeena, jotta yhtälöön sijoitettaessa myös derivaatta saadaan sijoitetuksi:

sarjayht =  diffyht /. y -> yrite

Yhtälön oikealla ja vasemmalla puolella on potenssisarja. Jotta nämä olisivat samat, tulee samakorkuisten potenssien kertoimien yhtälön oikealla ja vasemmalla puolella olla samat. Kertoimien välille tällöin syntyvät yhtälöt voidaan muodostaa Mathematican LogicalExpand-komennolla. Ensimmäinen yhtälö saadaan vertaamalla vakiotermien kertoimia, toinen vertaamalla ensimmäisen asteen termejä jne.

yhtalot =  LogicalExpand[sarjayht]

Tuloksena on rekursiivinen epälineaarinen yhtälöryhmä: ensimmäisestä yhtälöstä voidaan ratkaista (Subscript[a, 1]), jos (Subscript[a, 0]) tunnetaan, toisesta tämän jälkeen (Subscript[a, 2]), kolmannesta (Subscript[a, 3]) jne. Kokonaisuudesaan ryhmä voidaan ratkaista Solve-komennolla. Tässä jälkimmäiseksi argumentiksi pitäisi oikeastaan antaa lista yhtälöryhmän tuntemattomista, mutta oletuksena on, että ratkaisu tapahtuu kaikkien ryhmässä esiintyvien symbolien suhteen. Kaikkia tuntemattomia ei saada ratkaistuiksi, vaan muut voidaan ainoastaan lausua ensimmäisen kertoimen (Subscript[a, 0]) avulla; tästä annetaan varoitus.

ratk =  Solve[yhtalot]

Sijoittamalla kertoimet yritteeseen saadaan ratkaisuna olevan potenssisarjan alkupää:

sarjaratk =  yrite[x] /. First[ratk]

Tämä sisältää yhden määräämättömän vakion (Subscript[a, 0]), kuten ensimmäisen kertaluvun differentiaaliyhtälön yleiselle ratkaisulle luonnollista onkin. Jos alkuehdoksi valitaan y(0)  =  0, tulee olla (Subscript[a, 0]) = 0. Vastaava yksittäisratkaisu on

yksittratk =  sarjaratk /. (Subscript[a, 0]) -> 0

Tämä on sama kuin funktion tan x origokeskinen Taylorin sarja:

Series[Tan[x], {x, 0, n}]

Näin tulee ollakin, sillä differentiaaliyhtälö on separoituva ja sen yleiseksi ratkaisuksi saadaan y  =  tan(x  +  C):

DSolve[diffyht, y[x], x]

Jotta sarjaratkaisulle voitaisiin piirtää kuvaaja, siitä on pudotettava jäännöstermi pois. Tämän tarkkaa lausekettahan ei tunneta eikä sille siis voida laskea numeerisia arvoja piirtämistä varten. Jäännöstermin poistaminen tapahtuu komennolla Normal:

poly =  Normal[yksittratk]

Sarjaratkaisu ja funktio tan x samassa kuvassa:

Plot[{poly, Tan[x]}, {x, 0, 1.5}]

Esitetty lasku ei anna viitteitä sarjaratkaisun suppenemisalueesta. Kokonaan muilla keinoilla voidaan osoittaa, että tangentin origokeskisen Taylorin sarjan suppenemissäde on π/2. Sarja suppenee siis vain välillä ] -π/
          2,  π/2[.

Haluttua termilukua n voidaan edellä olevassa laskussa muuttaa ja tämän jälkeen laskea kaikki uudelleen valinnalla Evaluate Notebook valikosta Kernel/Evaluation.

SKK 30.04.2001