Differentiaaliyhtälön ratkaiseminen Mathematicalla numeerisesti

Differentiaaliyhtälön numeerisen ratkaisemisen edellytyksenä on, että kyseessä on alkuarvoprobleema, ts. annettuna on sekä differentiaaliyhtälö että alkuehto. Etsittävä ratkaisu on yksikäsitteinen eikä sisällä määräämättömiä vakioita.

Tarkoitusta varten on NDSolve-komento, jonka syntaksi on hyvin samanlainen kuin algebrallisen ratkaisemisen DSolve-komennon. Ainoana erona on, että viimeisessä argumentissa on annettava myös muuttujan x väli, jolla ratkaisua etsitään. Ratkaisu on mahdollista saada lausekkeen tai funktion muodossa.

Ratkaisu lausekkeena

diffyht =  y'[x]  ==  x^2  -  y[x]^2

alkuehto =  y[0]  ==  1

ratkaisulauseke =  
      NDSolve[{diffyht, alkuehto}, y[x], {x, 0, 5}]

ylauseke =  y[x] /. First[ratkaisulauseke]

Ratkaisu saadaan tarkkaa ratkaisua approksimoivana interpolaatiofunktiona. Hieman erikoisesta esitystavasta huolimatta tämä on kuin mikä tahansa muuttujan x sisältävä lauseke:

ylauseke /. x -> 0.8

derivlauseke =  D[ylauseke, x]

derivlauseke /. x -> 0.8

Plot[ylauseke, {x, 0, 5}, 
      AspectRatio -> Automatic]

Ratkaisu funktiona

ratkaisufunktio =  
      NDSolve[{diffyht, alkuehto}, y, {x, 0, 5}]

y0 =  y /. First[ratkaisufunktio]

Kyseessä on aito funktio:

y0[0.8]

y0'[0.8]

Integrate[y0[x], {x, 0, 5}]

NDSolve ja InterpolatingFunction

Mathematican funktio NDSolve käyttää alkuarvoprobleeman numeeriseen ratkaisemiseen erilaisia numeerisia algoritmeja yhtälöstä riippuen. Näiden avulla saadaan ratkaisufunktion arvoille approksimaatiot (Subscript[y, k]) sopivasti valituissa pisteissä (Subscript[x, k]).

Elementti InterpolatingFunction on interpoloiva funktio, joka perustuu Lagrangen ja Hermiten interpolaatiopolynomeihin. Näiden laskeminen pohjautuu  ratkaisua approksimoivaan pisteistöön ((Subscript[x, k]), (Subscript[y, k])). Tarkemman käsityksen interpoloivan funktion sisältämästä informaatiosta saa komennolla FullForm:

ylauseke // FullForm;

Tämän tulostus on huomattavan pitkä. Sen saa näkyviin poistamalla puolipisteen edellä olevan syötteen lopusta ja ajamalla syötteen uudelleen.

SKK 30.04.2001