Usean yhtälön ryhmän ratkaiseminen yhteen yhtälöön palauttamalla

Olkoon tarkasteltavana kolmen differentiaaliyhtälön normaalimuotoinen ryhmä, jossa tuntemattomina funktioina ovat x(t), y(t) ja z(t):

dy1 =  x'[t]  ==   x[t]  +  y[t]  -  z[t]  +  
            1;

dy2 =  y'[t]  ==  - x[t]  +  5 y[t]  +  
            z[t]  +  t;

dy3 =  z'[t]  ==  - 2 x[t]  +  2 y[t]  +  
            4 z[t]  +  t^2;

{dy1, dy2, dy3} // TableForm

funktiot =  {x[t], y[t], z[t]};

Ryhmä pyritään ratkaisemaan eliminoimalla ensin yhtälöistä funktiot x ja y, jolloin saadaan yksinomaan funktiota z koskeva differentiaaliyhtälö. Tätä varten kaksi ensimmäistä yhtälöä derivoidaan kerran ja viimeinen yhtälö kaksi kertaa, jolloin saadaan kaikkiaan seitsemän yhtälöä:

dy4 =  D[dy1, t];

dy5 =  D[dy2, t];

dy6 =  D[dy3, t];

dy7 =  D[dy3, {t, 2}];

{dy1, dy2, dy3, dy4, dy5, dy6, dy7} // TableForm

Kuudesta ensimmäisestä yhtälöstä voidaan ratkaista funktiot x ja y derivaattoineen ja tämän jälkeen sijoittaa lausekkeet perättäin viimeiseen yhtälöön:

elimsij = 
      Solve[{dy1, dy2, dy3, dy4, dy5, dy6}, {x[t], 
          y[t], x'[t], y'[t], x''[t], y''[
            t]}]

dy =  dy7 /. First[elimsij]

Tuloksena on kolmannen kertaluvun yhtälö funktiolle z. Tämä voidaan löytää myös hieman suorempaan käyttämällä Mathematican Eliminate-komentoa:

Eliminate[{dy1, dy2, dy3, dy4, dy5, dy6, dy7}, {x[t], 
        y[t], x'[t], y'[t], x''[t], y''[
          t]}]

Yhtälön funktiomuotoiseksi ratkaisuksi saadaan

zratk =  DSolve[dy, z, t]

Yhtälöryhmän yleinen ratkaisu muodossa x(t), y(t), z(t) saadaan tätä ja aiempia lausekkeita käyttäen:

ylratk =  funktiot /. First[elimsij] /. First[zratk] // 
          Simplify;
ylratk // TableForm

Tiettyä alkuehtoa vastaavat vakioiden arvot saadaan tämän jälkeen tavalliseen tapaan ratkaisemalla algebrallinen yhtälöryhmä. Olkoon alkuehtona x(0)  =  1, y(0)  =  -2, z(0)  =  3. Tällöin

vakiot =  
      Solve[(ylratk /. t -> 0) == {1, -2, 3}, {C[1], C[2], 
            C[3]}] // Simplify

Vastaava yksittäisratkaisu saadaan sijoittamalla vakioiden arvot yleiseen ratkaisuun:

yksittratk =  
        ylratk /. First[vakiot] // 
          Simplify;
yksittratk // TableForm

Ratkaisujen kuvaajat:

Plot[Evaluate[yksittratk], {t, 0, 1}, 
      PlotRange -> {-20, 20}]

Edellä oleva esitys kuvaa, miten eliminointiprosessi ja yhtälöryhmän ratkaiseminen tapahtuu. Jos tavoitteena on ainoastaan saada tietyn alkuarvoprobleeman ratkaisu, päästään paljon vähemmällä kohdistamalla Mathematican DSolve-funktio suoraan alkuperäiseen yhtälöryhmään ja alkuehtoon:

suoraratk =  
        funktiot /. 
            Flatten[
              DSolve[{dy1, dy2, dy3, x[0] == 1, y[0] == -2, 
                  z[0] == 3}, funktiot, t]] // 
          Simplify;
suoraratk // TableForm

Eri tavoilla saadut ratkaisut ovat todellakin samat:

yksittratk  ==  suoraratk // Simplify

SKK 30.04.2001