**Differenssimenetelmät** ovat matematiikassa käytettyjä menetelmiä, joilla haetaan likimääräistä ratkaisua differentiaaliyhtälöille käyttäen derivaattaa approksimoivia differenssiyhtälöitä.

Intuitiivinen lähestyminen
--------------------------

Differenssimenetelmillä saadaan likimääräinen ratkaisu differentiaaliyhtälöille korvaamalla derivaatan lausekkeet likimäärin vastaavilla erotusosamäärän lausekkeilla. Määritelmän mukaan funktion ensimmäinen derivaatta on

{\displaystyle f'(a)=\lim \_{h\to 0}{f(a+h)-f(a) \over h},}
Luonnollinen valinta derivaatan likimääräiseksi laskemiseksi on siten

{\displaystyle f'(a)\approx {f(a+h)-f(a) \over h}}
käyttäen jotakin pientä arvoa *h*:lle. Tätä lauseketta kutsutaan ensimmäisen derivaatan eteneväksi differenssiapproksimaatioksi. Korvaamalla derivaatan lausekkeet differentiaaliyhtälöissä edellisen kaltaisilla kaavoilla voidaan differentiaaliyhtälöille löytää likimääräiset ratkaisut ilman differentiaali- ja integraalilaskentaa.

Differenssiyhtälöiden johtaminen Taylorin polynomin avulla
----------------------------------------------------------

Mikäli funktio jonka derivaattaa ollaan approksimoimassa on hyvin käyttäytyvä, niin Taylorin lauseen mukaan

{\displaystyle f(a+h)=f(a)+{\frac {f'(a)}{1!}}h+{\frac {f^{(2)}(a)}{2!}}h^{2}+\cdots +{\frac {f^{(n)}(a)}{n!}}h^{n}+R\_{n}(a+h),}
missä *n*! on *n*:n kertoma ja *R**n*(*a + h*) on jäännöstermi, jolla merkitään *n*:nnen asteen Taylorin polynomin ja alkuperäisen funktion erotusta. Edelleen, jos käytetään esimerkkinä funktion *f* ensimmäistä derivaattaa, niin Taylorin lauseen mukaan

{\displaystyle f(a+h)=f(a)+f'(a)h+R\_{1}(a+h),}
joka voidaan saattaa muotoon

{\displaystyle f'(a)={f(a+h)-f(a) \over h}+{R\_{1}(a+h)/h}}
niin, että {\displaystyle R\_{1}(a+h)/h}:n ollessa riittävän pieni

{\displaystyle f'(a)\approx {f(a+h)-f(a) \over h}.}

Menetelmän tarkkuus ja kertaluku
--------------------------------

Menetelmän virhe määritellään likiratkaisun ja tarkan analyyttisen ratkaisun erotukseksi. Virhelähteitä on kaksi: pyöristysvirhe, joka syntyy tietokoneen pyöristäessä desimaalilukuja sekä diskretointivirhe, joka johtuu siitä, että differenssiyhtälön ratkaisu eroaa tarkasta ratkaisusta, vaikka laskutoimitukset suoritettaisiin täydellisen tarkasti ilman pyöristyksiä.

Differenssimenetelmä perustuu funktion diskretointiin määrätyn hilan mukaisesti.
Ensimmäinen asia käytettäessä differenssimenetelmää ongelman ratkaisemiseksi on ongelman määrittelyalueen diskretointi. Useimmiten määrittelyalue jaetaan tasaväliseksi hilaksi (katso yllä oleva kuva). Tämä tarkoittaa sitä, että differenssimenetelmä tuottaa joukon diskreettejä numeerisia ratkaisuja derivaatalle. Useimmiten ratkaisussa on käytetty aika-askelta.

Menetelmän aiheuttamalle paikalliselle diskretointivirheelle voidaan johtaa yleinen lauseke. Paikallista diskretointivirhettä merkitään tyypillisesti isolla o-kirjaimella ja sillä tarkoitetaan virhettä, kun menetelmää on sovellettu yhden kerran. Se on siis erotus {\displaystyle f'(x\_{i})-f'\_{i}}, kun {\displaystyle f'(x\_{i})} viittaa tarkkaan arvoon ja {\displaystyle f'\_{i}} numeerisesti laskettuun likiarvoon. Taylorin polynomin jäännöstermi on käytännöllinen tutkittaessa diskretointivirhettä. Diskretointivirheen määräävin termi voidaan löytää käyttämällä Lagrangen muotoa Taylorin polynomin jäännöstermille, joka on

{\displaystyle R\_{n}(x\_{0}+h)={\frac {f^{(n+1)}(\xi )}{(n+1)!}}(h)^{n+1}}, missä {\displaystyle x\_{0}<\xi <x\_{0}+h},
Jos käytetään taas etenevää differenssiapproksimaatiota ensimmäiselle derivaatalle ja tiedetään, että {\displaystyle f(x\_{1})=f(x\_{0}+h)}, niin

{\displaystyle f(x\_{0}+h)=f(x\_{0})+f'(x\_{0})h+{\frac {f''(\xi )}{2!}}h^{2},}
josta saadaan edelleen

{\displaystyle {\frac {f(x\_{0}+h)-f(x\_{0})}{h}}=f'(x\_{0})+{\frac {f''(\xi )}{2!}}h,}
ja kun edelleen huomataan, että yhtälön vasen puoli on differenssimenetelmän approksimaatio ja oikea puoli on tarkka arvo lisättynä jäännöstermillä, niin nähdään selvästi, että jäännöstermi on paikallinen diskretointivirhe. 

Lopulta saadaan tässä esimerkissä:

{\displaystyle {\frac {f(x\_{0}+h)-f(x\_{0})}{h}}=f'(x\_{0})+O(h).}
Saatu lauseke ymmärretään niin, että paikallinen diskretointivirhe on verrannollinen askeleen kokoon.

Esimerkki: Ensimmäisen kertaluvun lineaarinen differentiaaliyhtälö
------------------------------------------------------------------

Tarkastellaan esimerkkinä ensimmäisen kertaluvun lineaarista differentiaaliyhtälöä

{\displaystyle u'(x)=3u(x)+2.\,}
Ratkaistaessa tätä yhtälöä Eulerin menetelmällä, käytetään hyväksi erotusosamäärän lauseketta

{\displaystyle {\frac {u(x+h)-u(x)}{h}}\approx u'(x)}
jolla saadaan likimääräinen esitys differentiaaliyhtälölle sijoittamalla ensin yllä oleva u'(x):n lauseke differentiaaliyhtälöön ja muokkaamalla tulosta hiukan algebrallisesti, jolloin saadaan

{\displaystyle u(x+h)=u(x)+h(3u(x)+2).\,}
Viimeisin yhtälö on differenssiyhtälö, jonka ratkaisu antaa likimääräisen ratkaisun differentiaaliyhtälölle.

Esimerkki: Lämmönjohtumisyhtälö
-------------------------------

Tarkastellaan yksiulotteista lämmönjohtumisyhtälöä homogeenisilla Dirichletin reunaehdoilla

{\displaystyle U\_{t}=U\_{xx}\,}
{\displaystyle U(0,t)=U(1,t)=0\,} (reunaehto)
{\displaystyle U(x,0)=U\_{0}(x)\,} (alkuehto)
Yksi tapa ratkaista tämä yhtälö numeerisesti on approksimoida derivaattoja differenssilausekkeilla. Jaetaan määrittelyalue paikan suhteen käyttäen hilapisteitä {\displaystyle x\_{0},...x\_{J}} ja ajassa käyttäen hilapisteitä 

{\displaystyle t\_{0},....t\_{N}}. Oletetaan, että jako on tasavälinen sekä paikassa että ajassa niin, että jakoväli paikan suhteen on *h* ja ajan suhteen *k*. Pisteet

{\displaystyle u(x\_{j},t\_{n})=u\_{j}^{n}}
esittävät likimääräistä numeerista ratkaisua {\displaystyle u(x\_{j},t\_{n}).}:lle.

### Eksplisiittinen menetelmä

Kuvaesitys eksplisiittisen menetelmän differenssille.
Käyttämällä etenevää differenssiapproksimaatiota ajan hetkellä {\displaystyle t\_{n}} ja toisen kertaluvun keskeisdifferenssiä paikassa {\displaystyle x\_{j}}, saadaan yhtälö

{\displaystyle {\frac {u\_{j}^{n+1}-u\_{j}^{n}}{k}}={\frac {u\_{j+1}^{n}-2u\_{j}^{n}+u\_{j-1}^{n}}{h^{2}}}.\,}
Tämä on eksplisiittinen menetelmä yksiulotteisen lämmönjohtumisyhtälön ratkaisemiseksi.

{\displaystyle u\_{j}^{n+1}}:n arvot saadaan muista arvoista seuraavasti:
{\displaystyle u\_{j}^{n+1}=(1-2r)u\_{j}^{n}+ru\_{j-1}^{n}+ru\_{j+1}^{n}}
missä {\displaystyle r=k/h^{2}.}

Jos siis tunnetaan arvot ajan hetkellä *n*, voidaan vastaavat arvot hetkellä *n*+1 laskea käyttäen yllä olevaa yhtälöä. Arvot kohdissa {\displaystyle u\_{0}^{n}} ja {\displaystyle u\_{J}^{n}} täytyy korvata reunaehdoilla, jotka tässä esimerkissä ovat molemmat nollia.

Tämä eksplisiittinen menetelmä on numeerisesti vakaa ja konvergoi, kun {\displaystyle r\leq 1/2}. Virhe on verrannollinen aika-askeleeseen ja paikka-askeleen neliöön:

{\displaystyle \Delta u=O(k)+O(h^{2})\,}
### Implisiittinen menetelmä

Kuvaesitys implisiittisen menetelmän differenssille.
Kun käytetään takenevaa differenssiapproksimaatiota ajanhetkellä {\displaystyle t\_{i+1}} ja toisen kertaluvun keskeisdifferenssiä paikkaderivaatalle kohdassa {\displaystyle x\_{j}}, niin saadaan yhtälö

{\displaystyle {\frac {u\_{j}^{i+1}-u\_{j}^{i}}{k}}={\frac {u\_{j+1}^{i+1}-2u\_{j}^{i+1}+u\_{j-1}^{i+1}}{h^{2}}}.\,}
Tämä on implisiittinen menetelmä yksiulotteisen lämmönjohtumisyhtälön ratkaisemiseksi.

Termit {\displaystyle u\_{j}^{i+1}} saadaan ratkaisemalla lineaarinen yhtälöryhmä:

{\displaystyle (1+2r)u\_{j}^{i+1}-ru\_{j-1}^{i+1}-ru\_{j+1}^{i+1}=u\_{j}^{i}}
Tämä menetelmä on aina numeerisesti stabiili ja konvergoi, mutta menetelmä on yleensä laskennallisesti raskaampi kuin eksplisiittinen menetelmä, koska jokaisella aika-askeleella on ratkaistava yhtälöryhmä. Virheet ovat verrannollisia aika-askeleeseen ja paikka-askeleen neliöön.

### Crank-Nicolsonin menetelmä

Jos käytetään keskeisdifferenssiä ajanhetkellä {\displaystyle t\_{n+1/2}} ja toisen kertaluvun keskeisdifferenssiä paikkaderivaatalle kohdassa {\displaystyle x\_{j}}, niin saadaan yhtälö:

{\displaystyle {\frac {u\_{j}^{n+1}-u\_{j}^{n}}{k}}={\frac {1}{2}}\left({\frac {u\_{j+1}^{n+1}-2u\_{j}^{n+1}+u\_{j-1}^{n+1}}{h^{2}}}+{\frac {u\_{j+1}^{n}-2u\_{j}^{n}+u\_{j-1}^{n}}{h^{2}}}\right).\,}
Tämä kaava tunnetaan Crank-Nicolson menetelmänä.

Crank-Nicolson menetelmän kuvaesitys.
Arvot {\displaystyle u\_{j}^{n+1}} saadaan ratkaisemalla lineaarinen yhtälöryhmä:

{\displaystyle (2+2r)u\_{j}^{n+1}-ru\_{j-1}^{n+1}-ru\_{j+1}^{n+1}=(2-2r)u\_{j}^{n}+ru\_{j-1}^{n}+ru\_{j+1}^{n}.\,}
Tämäkin menettely on aina numeerisesti stabiili ja konvergoi, mutta menettely on yleensä laskennallisesti raskaampi kuin eksplisiittinen menetelmä, koska jokaisella aika-askeleella on ratkaistava yhtälöryhmä. Virheet ovat verrannollisia aika-askeleen neliöön ja paikka-askeleen neljänteen potenssiin:

{\displaystyle \Delta u=O(k^{2})+O(h^{4}).\,}
Reunoilla virhe on kuitenkin usein O(*h*2) eikä O(*h*4).

Yleensä Crank-Nicolson menetelmä on tarkin pienillä aika-askelilla. Eksplisiittinen menetelmä on epätarkin ja se voi olla epävakaa, mutta se on myös helpoin toteuttaa ja on laskennallisesti kevyin. Implisiittinen menetelmä toimii menetelmistä parhaiten, kun aika-askel on suuri.

Lähteet
-------

* Englanninkielinen Wikipedian sivu "Finite Difference Method".
* Mäkinen R. Numeeriset menetelmät, syksy 2007. Luentomoniste.
* Haataja Juha ym. Numeeriset menetelmät käytännössä, CSC - Tieteellinen laskenta Oy 2002.