"

Suuntaelementtikenttä ja numeerinen ratkaiseminen

Kuten on jo havaittu, differentiaaliyhtälöiden ratkaiseminen analyyttisesti käy työlääksi jo yksinkertaisissa ensimmäisen kertaluvun tapauksissa. Monimutkaisemmille yhtälöille ratkaisun löytäminen on yhä vaikeampaa, ja lopulta mahdotontakin. Tarkastellaan seuraavassa yleistä ensimmäisen kertaluvun differentiaaliyhtälöä

\[y'=f(x,y)\]

ja sen ratkaisujen havainnollistamista.

Jos mainitun yhtälön ratkaisun \(y=y(x)\) kuvaaja kulkee pisteen \((x,y)\) kautta, niin tässä pisteessä kuvaajan tangenttisuoran kulmakerroin on \(k=f(x,y)\). Kuvaajalla on siis tangenttivektori \((1, f(x, y))\). Normeeraamalla tämä ykkösen mittaiseksi saadaan yksikkötangenttivektori pisteessä \((x,y)\), eli

\[\begin{split}F(x,y)=\frac{1}{\sqrt{1^2+f(x,y)^2}} \begin{bmatrix}1 \\ f(x, y)\end{bmatrix}.\end{split}\]

Funktiota \(F\) sanotaan suuntaelementtikentäksi (slope field, direction field). Jos \(xy\)-tasoon piirretään sopivin välein pisteisiin \((x,y)\) vektoreita \(F(x,y)\), niin saadaan hahmoteltua graafisesti yhtälön ratkaisuja. Jokainen ratkaisu \(y=y(x)\) kulkee suuntaelementtikentässä kentän osoittamia suuntia noudattaen.

Seuraavaan kuvaan on piirretty differentiaaliyhtälön

\[y'=x-y\]

suuntaelementtikenttä sekä alkuehdot \(y(1)=1\) ja \(y(1)=-1\) toteuttavat ratkaisut. Vektoreiden pituuksiksi on selkeyden vuoksi skaalattu \(0{,}5\).

../_images/diffyhtsuuntaelementtikentta.svg

Tarkastellaan sitten alkuarvotehtävää

\[y'=f(x,y),\qquad y(x_0)=y_0.\]

Ratkaisukäyrän \(y=y(x)\) kulmakerroin pisteessä \((x_0,y_0)\) on \(f(x_0,y_0)\), joten lineaarinen funktio \(T(x) = y_0 + f(x_0, y_0)(x - x_0)\) approksimoi ratkaisua \(y(x)\) pisteen \(x_0\) lähellä. Olkoon \(h>0\) ja merkitään \(x_1=x_0+h\), sekä

\[y(x_1)\approx y_1 = y_0+f(x_0,y_0)h.\]

Päädytään pisteeseen \((x_1,y_1)\), joka on likimain käyrällä \(y=y(x)\), ja siitä voidaan tehdä vastaava siirtymä. Yleisesti pisteessä \((x_n, y_n)\) kulmakerroin on likimain \(f(x_n, y_n)\), jolloin asetetaan

\[x_{n+1}=x_n+h,\qquad y_{n+1}=y_n+f(x_n,y_n)h,\]

missä \(n = 0, 1, 2, \ldots\). Pisteiden toivotaan säilyvän riittävän lähellä arvioitavaa ratkaisua. Tätä numeerista alkuarvotehtävän ratkaisutapaa kutsutaan Eulerin menetelmäksi askelpituudella \(h>0\).

../_images/diffyhteulerinmenetelma.svg

Esimerkki.

Arvioi alkuarvotehtävän

\[y'=x+\frac{y}{5},\qquad y(0)=-3\]

ratkaisua välillä \([0,3]\) käyttämällä Eulerin menetelmää askelpituudella \(h=0{,}5\).

Ratkaisu.

Määritetään Eulerin menetelmän mukaiseen ratkaisuun kuuluvat pisteet.

\[\begin{split}\begin{aligned} x_0&=0 && y_0=-3\\ x_1&=0{,}5 && y_1=y_0+(x_0+y_0/5)\cdot0{,}5=-3{,}3\\ x_2&=1{,}0 && y_2=y_1+(x_1+y_1/5)\cdot0{,}5=-3{,}38\\ x_3&=1{,}5 && y_3=y_2+(x_2+y_2/5)\cdot0{,}5=-3{,}218\\ x_4&=2{,}0 && y_4=y_3+(x_3+y_3/5)\cdot0{,}5=-2{,}7898\\ x_5&=2{,}5 && y_5=y_4+(x_4+y_4/5)\cdot0{,}5=-2{,}0688\\ x_6&=3{,}0 && y_6=y_5+(x_5+y_5/5)\cdot0{,}5=-1{,}0257\end{aligned}\end{split}\]

Kuvassa on ylimpänä tarkka ratkaisu ja alimpana edellä laskettu numeerinen ratkaisu askelpituudella \(h=0{,}5\). Välissä on askelpituuksilla \(h=0{,}2\) ja \(h=0{,}05\) lasketut numeeriset ratkaisut.

../_images/diffyhtnumeerisetmenet.svg

Askelpituutta pienentämällä Eulerin menetelmä antaa yleensä tarkempia ratkaisuja. Se on kuitenkin numeerisesti erittäin huono käytännön sovelluksien tarpeisiin, eikä edes toimi jokaisen ongelman ratkaisemiseen. Menetelmää voidaan parantaa esimerkiksi laskemalla kulmakerroin \(f(x,y)\) useassa pisteessä välillä \([x_n,x_{n+1}]\) ja ottamalla ne sopivasti huomioon ennen arvon \(y_{n+1}\) määrittämistä. Eräs tällaisista menetelmistä on Runge-Kutta-menetelmä, jota käytetään esimerkiksi Matlabin ode45-funktiossa.

Esimerkki.

Ratkaistaan edellinen alkuarvotehtävä numeerisesti Matlabilla.

odefun=@(x,y)x+y/5; % yhtälön oikea puoli x:n ja y:n funktiona
x0 = 0;             % x:n alkuarvo
xf = 3;             % x:n loppuarvo
y0 = -3;            % alkuehto
[x,y] = ode45(odefun,[x0 xf],y0);
% x:n arvot ja y:n likiarvot ovat nyt vektoreissa x ja y
plot(x,y)           % ratkaisun kuvaaja