linkmp.mws
Esimerkit : Lineaariset yhtälöt

Vakiokertoimisen lineaariyhtälön karakteristisen yhtälön kompleksiset juuret


Tarkastelun kohteena olkoon kertalukua
n oleva vakiokertoiminen homogeeninen differentiaaliyhtälö:

> n:= 3;

n := 3

> diffyht:= sum('a||k'*diff(y(x),[x$k]),k=0..n)=0;

diffyht := a0*y(x)+a1*diff(y(x),x)+a2*diff(y(x),`$`...

Karakteristinen yhtälö saadaan sijoittamalla yhtälöön yrite y = exp(rx) ja jakamalla sijoittamisen jälkeen eksponenttitekijä pois. Samaan tulokseen päästään korvaamalla differentiaaliyhtälössä derivaatat vastaavilla muuttujan r potensseilla:

> {seq(diff(y(x),[x$k])=r^k, k=0..n)}:
karaktyht:= subs(%,diffyht);

karaktyht := a0+a1*r+a2*r^2+a3*r^3 = 0

Kyseessä on polynomiyhtälö, jonka juuret r[1] , r[2] jne. antavat differentiaaliyhtälön perusratkaisut y = exp(r[1]*x) , y = exp(r[2]*x) jne. Oletetaan, että yhtälöllä on kompleksinen juuripari r[1] = alpha+beta*I , r[2] = alpha-beta*I , ja pyritään osoittamaan, että tällöin vastaaviksi perusratkaisuiksi kelpaavat exp(alpha*x)*sin(beta*x) ja exp(alpha*x)*cos(beta*x) . Koska r[1] = alpha+beta*I ja r[2] = alpha-beta*I ovat juuria, seuraavat ehdot toteutuvat:

> komplehdot:= {subs(r=alpha+I*beta,karaktyht), subs(r=alpha-I*beta,karaktyht)}:
simplify(%);

{a0+a1*alpha+I*a1*beta+a2*alpha^2+2*I*a2*alpha*beta...
{a0+a1*alpha+I*a1*beta+a2*alpha^2+2*I*a2*alpha*beta...
{a0+a1*alpha+I*a1*beta+a2*alpha^2+2*I*a2*alpha*beta...

Yhtälöissä esiintyvät vakiot ovat kaikki reaalisia, jolloin periaatteessa kahdesta kompleksisesta ehdosta saadaan neljä reaalista ehtoa asettamalla kummankin reaali- ja imaginaariosa erikseen =0. Erilaisia ehtoja saadaan kuitenkin vain kaksi, kuten pitääkin: Jos nimittäin reaalikertoimisella polynomiyhtälöllä on juurena alpha+beta*I , myös liittoluku on juuri.

Imaginaariluvun reaaliosa ja imaginaariosa saadaan poimittua komennoilla Re ja Im . Koska Maple ei tiedä ovatko muuttujat reaalisia vai kompleksisia, on sievennyskomennon simplify yhteydessä käytettävä parametria assume=real , joka määrittää muuttujat reaalisiksi.

> {Re(lhs((komplehdot[1])))=0,Im(lhs((komplehdot[1])))=0}:
ehdot:= simplify(%,assume=real);

ehdot := {a0+a1*alpha+a2*alpha^2-a2*beta^2+a3*alpha...
ehdot := {a0+a1*alpha+a2*alpha^2-a2*beta^2+a3*alpha...

Sijoitetaan tutkittavat perusratkaisut differentiaaliyhtälöön:

> sij:=
{algsubs(y(x)=exp(alpha*x)*sin(beta*x),diffyht), algsubs(y(x)=exp(alpha*x)*cos(beta*x),diffyht)}:simplify(%);

{exp(alpha*x)*(a2*alpha^2*sin(beta*x)+2*a2*alpha*co...
{exp(alpha*x)*(a2*alpha^2*sin(beta*x)+2*a2*alpha*co...
{exp(alpha*x)*(a2*alpha^2*sin(beta*x)+2*a2*alpha*co...
{exp(alpha*x)*(a2*alpha^2*sin(beta*x)+2*a2*alpha*co...
{exp(alpha*x)*(a2*alpha^2*sin(beta*x)+2*a2*alpha*co...
{exp(alpha*x)*(a2*alpha^2*sin(beta*x)+2*a2*alpha*co...

Ongelmana on, toteutuvatko nämä yhtälöt, kun oletetaan, että alpha ja beta toteuttavat edellä johdetut ehdot:

> simplify(sij,ehdot);

{0 = 0}

Yhälöt näyttävät olevan tosia, ja vastaavat perusratkaisut siis todella ovat exp(alpha*x)*sin(beta*x) ja exp(alpha*x)*cos(beta*x) .

Symbolisissa laskentajärjestelmissä kuten Maple ssa on suhteellisen hyvät työkalut (usean muuttujan) polynomiehtojen käsittelyyn; taustalla ovat ns. Gröbnerin kannat . Probleeman monimutkaistuessa laskennan raskaus kuitenkin kasvaa nopeasti.

Kompleksisten juurten tapausta voidaan käsitellä myös toisin. Koska kompleksiluvut toteuttavat samanlaiset laskusäännöt (derivointisäännöt mukaanluettuina) kuin reaaliluvutkin, voidaan ajatella, että kirjoitetaan differentiaaliyhtälön yleinen ratkaisu kompleksisten eksponenttifunktioiden avulla:

> komplratk:= _C1*exp((alpha+I*beta)*x)+_C2*exp((alpha-I*beta)*x);

komplratk := _C1*exp((alpha+I*beta)*x)+_C2*exp((alp...

Tämä kehitetään käyttäen eksponenttifunktion laskusääntöä exp(x+y) = exp(x)*exp(y) , joka on voimassa myös kompleksitapauksessa, ja sen jälkeen sovelletaan Eulerin kaavaa exp(I*u) = cos(u)+I*sin(u) . Laskun voi tehdä käsin tai käyttämällä sopivasti Maple n komentoja.

Convert -komento muuntaa lausekkeen kaikki exponenttimerkinnät trigonometrisiksi. Koska emme kuitenkaan halua muuntaa termejä, jotka sisältävät exp(x*alpha) trigonometrisiksi, on tehtävä muunnos takaisin eksponenttimuotoon.

> convert(komplratk,trig):
trigratk:= subs(convert(exp(x*alpha),trig)=exp(x*alpha),%):
expand(%);

_C1*exp(alpha*x)*cos(beta*x)+I*_C1*exp(alpha*x)*sin...
_C1*exp(alpha*x)*cos(beta*x)+I*_C1*exp(alpha*x)*sin...

Tämä todellakin näyttää sisältävän haluttua muotoa exp(alpha*x)*sin(beta*x) ja exp(alpha*x)*cos(beta*x) olevia termejä. Näiden kertoimet ovat

> coeff(trigratk,sin(beta*x)):
sinkerroin:=coeff(%,exp(alpha*x));

sinkerroin := I*_C1-I*_C2

> coeff(trigratk,cos(beta*x)):
coskerroin:=coeff(%,exp(alpha*x));

coskerroin := _C1+_C2

Ratkaisu voidaan sieventää antamalla näille kertoimille nimet _C3 ja _C4 :

> simplify(trigratk,{sinkerroin=_C3,coskerroin=_C4});

exp(alpha*x)*cos(beta*x)*_C4+exp(alpha*x)*sin(beta*...

_C1 ja _C2 sekä toisaalta _C3 ja _C4 ovat symmetrisessä asemassa. Jos kumpi tahansa pari valitaan mielivaltaisesti, toinen pari määräytyy.


Ratkaiseminen: vakiokertoiminen homogeeniyhtälö

SKK & MS 31.05.2001