Differentiaaliyhtälön ratkaiseminen Mathematicalla algebrallisesti

Yleinen ratkaisu lausekkeena

Mathematicassa on käytettävissä differentiaaliyhtälöiden ratkaisemiseen komento DSolve. Tämä saa kolme argumenttia: ratkaistava yhtälö, tuntematon funktio ja muuttuja. Suositeltava käytäntö on tallettaa yhtälö aluksi jollekin nimelle ja käyttää tätä DSolve-komennon argumenttina:

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

ratkaisu =  DSolve[diffyht, y[x], x]

Yhtälön voi luonnollisesti kirjoittaa DSolve-komentoon suoraankin:

DSolve[x^2 y''[x] -  x y'[x]  +  y[x]  ==  0 , 
      y[x], x]

Ratkaisu antaa funktion y lausekkeen ja se saadaan sijoitussäännön muodossa listana. Kukin listan alkio on jokin yhtälön ratkaisuksi kelpaava lauseke. Tässä ratkaisulausekkeita on kuitenkin vain yksi, yhtälön yleinen ratkaisu. Määräämättömät vakiot ovat muodossa C[1], C[2] jne.

Jotta ratkaisun lauseketta voitaisiin helposti käyttää, se kannattaa tallettaa jollekin nimelle:

yleinenratkaisu =  y[x] /. First[ratkaisu]

(Lausekkeeseen y[x] siis tehdään listan ensimmäisen — ja tällä kertaa ainoan — alkion määräämä sijoitus ja tulos talletetaan nimelle yleinenratkaisu.)

Tästä saadaan yksittäisratkaisu sijoittamalla vakioille jotkin arvot, minkä jälkeen voidaan vaikkapa piirtää kuvaaja:

yksittaisratkaisu =  
      yleinenratkaisu /. {C[1] -> 2, C[2] -> -1}

Plot[yksittaisratkaisu, {x, 0.1, 5}]

Yleinen ratkaisu funktiona

Komennolla DSolve voidaan myös saada ratkaisu funktiona. Syöte on tällöin annettava hieman erilaisessa muodossa:

ratkaisu =  DSolve[diffyht, y, x]

Kun tämä funktio talletetaan jollekin nimelle, sitä voidaan käyttää kuten mitä tahansa funktiota:

yr =  y /. First[ratkaisu]

yr[t]

yr[2]

yr'[t]

Alkuarvoprobleeman ratkaisu

Komennolla DSolve voidaan myös ratkaista alkuarvoprobleema, jolloin differentiaaliyhtälö ja alkuehdot on annettava listana. Ratkaisu voidaan pyytää joko lausekkeena tai funktiona samalla tavoin kuin yleisen ratkaisun tapauksessa.

DSolve[{diffyht, y[1] == 2, y'[1] == 5}, y[x], 
      x]

DSolve[{diffyht, y[1] == 2, y'[1] == 5}, y, 
      x]

Differentiaaliyhtälöryhmän ratkaisu

DSolve-komennon ensimmäisenä argumenttina voi olla useamman differentiaaliyhtälön ja mahdollisten alkuehtojen muodostama lista, jolloin sitä voidaan käyttää yhtälöryhmien ratkaisemiseen. Toisessa argumentissa tulee tällöin olla tuntemattomien funktioiden muodostama lista.

DSolve[
{x'[t] ==  
          4 x[t]  -  2 y[t],  y'[t]  ==  
          x[t]  +  y[t],  x[0] == 3,  
        y[0] == 2}, 
{x[t], y[t]},  
      t]

DSolve[
{x'[t] ==  
          4 x[t]  -  2 y[t],  y'[t]  ==  
          x[t]  +  y[t],  x[0] == 3,  
        y[0] == 2}, 
{x, y},  t]

Aina ei onnistu

DSolve-komento ei onnistu ratkaisemaan läheskään kaikkia differentiaaliyhtälöitä; kaikkihan eivät ole alkeisfunktioiden tai edes ns. erikoisfunktioiden avulla ratkaistavissakaan. Se ei kuitenkaan ratkaise edes kaikkia sellaisia, jotka ovat käsin laskemalla suhteellisen helposti ratkaistavissa. Toisaalta työläissä tehtävissä se on korvaamaton apuväline.

Differentiaaliyhtälöiden ratkaiseminen on vaikea tehtävä ja tietokonealgebrassa käytetyistä algoritmeista tulee herkästi monimutkaisia. Tällaisina ne ovat myös alttiita virheille eikä tuloksiin siten pidä sokeasti luottaa. Ohjelmistot kehittyvät versio versiolta. Uudempi versio ratkaisee yleensä aina useampia yhtälöitä kuin edellinen — ja tekee virheitä eri paikoissa kuin edellinen.

SKK 30.04.2001