Eulerin yhtälön muuntaminen vakiokertoimiseksi

Mathematicaa voidaan käyttää yleisen Eulerin yhtälön muuntamiseen vakiokertoimiseksi yhtälöksi sijoituksella x  =  (e^t). Seuraava esitys toimii periaatteessa mille tahansa kertaluvulle n. Jos n  >  20, alkaa laskenta kuitenkin vaatia varsin paljon resursseja.

Syötetään Eulerin yhtälön kertaluku ja muodostetaan yhtälö:

n = 5

euleryht =  
      Sum[(Subscript[a, k]) x^k D[y[x], {x, k}], {k, 0, n}] == 0

Sijoituksen seurauksena syntyy uusi tuntematon funktio u(t)  =  y((e^t)). Funktiot y ja u toisiinsa sitova yhtälö talletetaan nimelle sijyhtalo:

sijyhtalo =  u[t] == y[Exp[t]]

Tätä yhtälöä derivoidaan muuttujan t suhteen n kertaa, jotta saadaan vastaavat derivaattojen väliset yhtälöt; nämä kerätään listaksi:

yhtalot =  
        Table[D[sijyhtalo, {t, k}], {k, 0, 
            n}];
yhtalot // TableForm

Tuntemattomat, ts. funktion y derivaatat kerätään omaksi listakseen, jossa muuttujaksi otetaan t:

tuntemattomat =  
      Table[D[y[x], {x, k}], {k, 0, n}] /. x -> Exp[t]

Jotta alkuperäinen differentiaaliyhtälö saadaan muunnetuksi funktiota u koskevaksi, yhtälöryhmästä ratkaistaan funktion y derivaatat ja sijoitetaan nämä differentiaaliyhtälöön; muuttujaksi otetaan t:

sij =  Solve[yhtalot, tuntemattomat]

vakiokertyht =  euleryht /. x -> Exp[t] /. 
        First[sij]

Tällöin on saatu Eulerin yhtälöä vastaava vakiokertoiminen yhtälö. Jotta tämä hahmottuisi selkeämmin, termit kootaan funktion u derivaattojen mukaan ryhmiteltyinä:

derivaatat =  Table[D[u[t], {t, k}], {k, 0, n}]

ryhmitettyvakiokertyht =  
      Collect[vakiokertyht[[1]], derivaatat]  ==  
        0

Collect-funktiota ei voida kohdistaa suoraan yhtälöön, vaan ainoastaan sen vasempaan puoleen vakiokertyht[[1]], mikä tuo syötteisiin ylimääräistä monimutkaisuutta. Toisaalta kaikki syötteet voidaan pakata myös yhdelle riville ja muutoinkin hyödyntää Mathematican ohjelmointikielen piirteitä:

Function[x, Collect[x, Table[D[u[t], {t, k}], {k, 0, n}]]] /@ 
      vakiokertyht

Saadun yhtälön vasemmasta puolesta voidaan myös poimia eri derivaattojen kertoimet ja esittää nämä taulukkona:

Table[
        Coefficient[ryhmitettyvakiokertyht[[1]], 
          D[u[t], {t, k}]], {k, 0, n}] // TableForm

Kertoimet ovat todellakin vakioita.

SKK 30.04.2001