Vakioiden variointi kolmannen kertaluvun yhtälölle

Olkoon tarkasteltavana kolmannen kertaluvun lineaarinen epähomogeeninen differentiaaliyhtälö

diffyht =  (x  -  1) y'''[x]  -  
          x y''[x]  +  y'[x]  == Exp[x^2]

Vastaava homogeeniyhtälö on

homogyht =  (x  -  1) y'''[x]  -  
          x y''[x]  +  y'[x]  ==  0

Tämän ratkaisut ovat suhteellisen yksinkertaiset ja pienellä pohdiskelulla arvattavissa. Jos y:n paikalle sijoitetaan eksponenttifunktio, niin yhtälö toteutuu:

homogyht /. y -> Exp // Simplify

Samoin käy, jos sijoitetaan funktio (x^2). Tämä voidaan antaa Mathematicalle muodossa #^2&, missä # tarkoittaa funktion argumenttia ja & osoittaa funktiomäärittelyn päättymisen:

homogyht /. y -> (#^2 &) // Simplify

Kolmanneksi perusratkaisuksi sopii vakiofunktio, joka kaikkialla saa arvon 1. Seuraavassa on käytetty kolmatta erilaista tapaa määritellä funktio Mathematicalle:

homogyht /. y -> Function[x, 1] // Simplify

Homogeeniyhtälön perusjärjestelmä on siten

perusjarj =  {Exp[x], x^2, 1}

ja homogeeniyhtälön yleinen ratkaisu

homogrtk =  perusjarj . {C[1], C[2], C[3]}

Epähomogeenisen yhtälön yksittäisratkaisu voidaan hakea vakioiden varioinnilla, jolloin yrite on

variot =  {u[x], v[x], w[x]}

yr0 =  variot . perusjarj

Tämä sijoitetaan differentiaaliyhtälöön ja pyritään määrittämään sellaiset funktiot u(x), v(x) ja w(x), että yhtälö toteutuu. Laskua yksinkertaistetaan kuten toisen kertaluvun yhtälön tapauksessakin asettamalla sopivia lisäehtoja. Toisen kertaluvun tapauksessa näitä on yksi, kolmannen kertaluvun tapauksessa kaksi.

Kerätään derivaatat listaksi:

derivaatat =  D[variot, x]

Muodostetaan yritteen derivaatta

der1 =  D[yr0, x]

ja yksinkertaistetaan sitä asettamalla funktioiden u, v ja w derivaattoja sisältävien termien summa nollaksi:

nollatermi1 =  
      Coefficient[der1, derivaatat] . derivaatat

Tällöin derivaatta on

yr1 =  der1 /. nollatermi1 -> 0

Edellä on käytetty komentoja tarvittavan lisäehdon muodostamiseen ja derivaatan yksinkertaistamiseen. Tämä on luontevaa kirjoitettaessa ohjelmakoodia Mathematicalle, mutta interaktiivisessa laskennassa on yksinkertaisempaa poimia tarvittavat termit hiirellä.

Vastaavalla tavalla muodostetaan yritteen toinen derivaatta, asetetaan toinen lisäehto ja yksinkertaistetaan derivaattaa:

der2 =  D[yr1, x]

nollatermi2 =  
      Coefficient[der2, derivaatat] . derivaatat

yr2 =  der2 /. nollatermi2 -> 0

Yritteen kolmas derivaatta saadaan yksinkertaisesti derivoimalla; lisäehtoja ei enää aseteta:

yr3 =  D[yr2, x]

Yritteen derivaatat sijoitetaan differentiaaliyhtälöön, jolloin saadaan vain funktioiden u, v ja w derivaattoja koskeva ehto. Funktiot itse supistuvat pois; tämä on seurausta siitä, että yrite muodostetaan homogeeniyhtälön ratkaisujen avulla.

ehto =  
      diffyht /. {y[x] -> yr0, y'[x] -> yr1, y''[x] -> 
              yr2, y'''[x] -> yr3} // Simplify

Derivaatat saadaan ratkaistuiksi tästä ehdosta ja aiemmin asetetuista lisäehdoista:

derivrtk =  
      Solve[{ehto, nollatermi1   ==  0,  nollatermi2  ==  0}, 
        derivaatat]

Funktiot u, v ja w saadaan tämän jälkeen integroimalla. Selkeintä on laskea funktiot määrättyinä integraaleina alarajan ollessa mielivaltainen. Mathematicassa voidaan aivan hyvin integroida listoja alkioittain:

integroitavat = derivaatat /. First[derivrtk] /. 
        x -> t

fktrtk =  Integrate[integroitavat, {t, a, x}]

Esiintyviä integraaleja ei onnistuta lausumaan alkeisfunktioiden tai Mathematican tuntemien funktioiden avulla.

Vakioiden varioinnilla on kuitenkin löydetty yksittäisratkaisu. Mathematican  funktioksi määriteltynä tämä on

(Subscript[y, 0]) =  
      Function[x, Evaluate[fktrtk . perusjarj]]

ja se toimii kuten mikä tahansa funktio:

(Subscript[y, 0])[x]

(Subscript[y, 0])'[x]

Ratkaisu voidaan sijoittaa differentiaaliyhtälöön ja tarkistaa, toteutuuko yhtälö:

diffyht /. y -> (Subscript[y, 0]) // Simplify

Differentiaaliyhtälön yleinen ratkaisu on siis

homogrtk  +  (Subscript[y, 0])[x]

Nimittäjien nollakohdan takia tarkastelualue on joko x  <  1 tai x  >  1. Integraalin alaraja on valittava siitä alueesta, jota tarkastellaan.

Lukija tutkikoon, miten Mathematica ratkaisee edellä käsitellyn yhtälön suoraan DSolve-komennolla.

SKK 27.04.2001