lin3ev.mws
Esimerkit : Lineaariset yhtälöt

Vakioiden variointi kolmannen kertaluvun yhtälölle

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

> diffyht:= (x-1)*diff(y(x), x$3)-x*diff(y(x), x$2)+diff(y(x), x)=exp(x^2);

diffyht := (x-1)*diff(y(x),`$`(x,3))-x*diff(y(x),`$...

Vastaava homogeeniyhtälö on

> homogyht:= lhs(diffyht)=0;

homogyht := (x-1)*diff(y(x),`$`(x,3))-x*diff(y(x),`...

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

> subs(y(x)=exp(x), homogyht):
simplify(%);

0 = 0

Samoin käy, jos sijoitetaan funktio x^2 :

> subs(y(x)=x^2, homogyht):
simplify(%);

0 = 0

Kolmanneksi perusratkaisuksi sopii vakiofunktio, joka kaikkialla saa arvon 1:

> subs(y(x)=1, homogyht):
simplify(%);

0 = 0

Homogeeniyhtälön perusjärjestelmä on siten

> perusjarj:= [exp(x), x^2, 1];

perusjarj := [exp(x), x^2, 1]

Linalg -paketista löytyvällä multiply -komennolla voidaan laskea matriisituloja. Kun kyseessä on kaksi vektoria, on tuloksena pistetulo. Ladataan paketti käyttöön.

> with(linalg):

Homogeeniyhtälön yleinen ratkaisu on:

> homogrtk:= multiply(perusjarj, [_C1, _C2, _C3]);

homogrtk := exp(x)*_C1+x^2*_C2+_C3

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

> variot:= [u(x), v(x), w(x)];

variot := [u(x), v(x), w(x)]

> yr0:= multiply(variot, perusjarj);

yr0 := u(x)*exp(x)+v(x)*x^2+w(x)

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:= diff(variot, x);

derivaatat := [diff(u(x),x), diff(v(x),x), diff(w(x...

Muodostetaan yritteen derivaatta

> der1:= diff(yr0, x);

der1 := diff(u(x),x)*exp(x)+u(x)*exp(x)+diff(v(x),x...

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

> termit1:= [seq(coeff(der1, derivaatat[k]), k=1..3)];

termit1 := [exp(x), x^2, 1]

> nollatermi1:= multiply(termit1, derivaatat);

nollatermi1 := diff(u(x),x)*exp(x)+diff(v(x),x)*x^2...

Tällöin derivaatta on

> yr1:= simplify(der1, {nollatermi1=0});

yr1 := u(x)*exp(x)+2*v(x)*x

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

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

> der2:= diff(yr1, x);

der2 := diff(u(x),x)*exp(x)+u(x)*exp(x)+2*diff(v(x)...

> termit2:= [seq(coeff(der2, derivaatat[k]), k=1..3)];

termit2 := [exp(x), 2*x, 0]

> nollatermi2:= multiply(termit2, derivaatat);

nollatermi2 := diff(u(x),x)*exp(x)+2*diff(v(x),x)*x...

> yr2:= simplify(der2, {nollatermi2=0});

yr2 := u(x)*exp(x)+2*v(x)

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

> yr3:= diff(yr2, x);

yr3 := diff(u(x),x)*exp(x)+u(x)*exp(x)+2*diff(v(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:= subs({diff(y(x), x$3)=yr3, diff(y(x), x$2)=yr2, diff(y(x), x)=yr1, y(x)=yr0}, diffyht):
factor(%);

(diff(u(x),x)*exp(x)+2*diff(v(x),x))*(x-1) = exp(x^...

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

> derivrtk:= solve({ehto, nollatermi1=0, nollatermi2=0}, {derivaatat[]}):
simplify(%);

{diff(v(x),x) = -1/2*exp(x^2)/(-2*x+1+x^2), diff(w(...
{diff(v(x),x) = -1/2*exp(x^2)/(-2*x+1+x^2), diff(w(...

Funktiot u , v ja w saadaan tämän jälkeen integroimalla. Selkeintä on laskea funktiot määrättyinä integraaleina alarajan ollessa mielivaltainen. Maplessa listojen integrointi tehdään integroimalla jokainen alkio erikseen map -komennon avulla:

> integroitavat:= subs(x=t, subs(derivrtk,derivaatat)):
simplify(%);

[t*exp(t*(-1+t))/(-2*t+1+t^2), -1/2*exp(t^2)/(-2*t+...

> fktrtk:= map(int, integroitavat, t=a..x):
simplify(%);

[int(t*exp(t*(-1+t))/(-2*t+1+t^2),t = a .. x), -1/2...

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

Vakioiden varioinnilla on kuitenkin löydetty yksittäisratkaisu:

> y0:= multiply(fktrtk, perusjarj):
simplify(%);

int(t*exp(t*(-1+t))/(-2*t+1+t^2),t = a .. x)*exp(x)...

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

> subs(y(x)=y0, diffyht):
simplify(%);

exp(x^2) = exp(x^2)

Differentiaaliyhtälön yleinen ratkaisu on siis

> homogrtk+y0:
simplify(%);

exp(x)*_C1+x^2*_C2+_C3+int(t*exp(t*(-1+t))/(-2*t+1+...
exp(x)*_C1+x^2*_C2+_C3+int(t*exp(t*(-1+t))/(-2*t+1+...

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

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


Teoria: epähomogeenisen yhtälön ratkaisujoukko
Ratkaiseminen: vakioiden variointi toisen kertaluvun yhtälön tapauksessa
Ratkaiseminen: korkeampien kertalukujen lineaariyhtälöt

SKK & MS 03.01.2001