Per risolvere numericamente una equazione differenziale, la cosa fondamentale è approssimare la derivata. Un procedimento classico consiste nei metodi alle differenze finite FDM. In questi metodi la derivata in un punto discreto \( x_j \), viene espressa come combinazione lineare della funzione di partenza in punti vicini. $$ {dy \over dx}\lvert_{x_j} = \sum_{i=-j_1}^{j_2} a_iy(x_{j+i}) + \epsilon(h^p) $$ In questa espressione:
Ad esempio supponendo di considerare 2 punti a destra e 2 a sinistra di \(x_0\) (intervallo centrato) l'espressione sarà: $$ {dy \over dx}\lvert_{x_0} = \color{#008080}{\sum_{i=-2}^{2} a_iy(x_{0+i})} + \epsilon(h^p) = \color{#008080}{a_{-2}y(x_{-2}) + a_{-1}y(x_{-1}) + a_{0}y(x_{0}) + a_{1}y(x_{1}) + a_{2}y(x_{2})} + \epsilon(h^p) $$
La precisione \(p\) dell'errore si dimostra essere maggiore quanto piu grandi sono i punti discreti scelti.
Determinazione dei coefficienti
Per trovare i coefficienti \( a_i \) nella formula possiamo procedere sviluppando in serie di Taylor la nostra funzione \(y\) in un intervallo centrato in \(x_j\). Il valore della funzione nel punto vicino: \(y(x_{j+i})\) sarà:
$$ \begin{align} y(x_{j\pm i}) = y(x_j) + y'(x_j)( x_{j \pm i} - x_j ) + \\ + {1 \over 2}y''(x_j)(x_{j \pm i}-x_j )^2 + \\ + {1 \over 6}y'''(x_j)( x_{j \pm i} - x_j )^3 + \\ + {1 \over 24}y''''(x_j)(x_{j \pm i} - x_j )^4 + \ldots \end{align} $$Sostituendo questa espressione nella sommatoria si procede con la determinazione dei coefficienti \(a_i\). Ad esempio possiamo provare ad approssimare una derivata prima nel suo punto discreto immediatamente a destra del centro \( x_j \). Avremo che (arrestandoci con lo sviluppo al secondo termine) e riscrivendo piu abbreviatamente \(y(x_j) = y_j\) ed \( y(x_{j\pm i}) = y_{j\pm i} \): $$ {dy \over dx}\lvert_{x_j} = a_0y_j + a_1y_{j+1} = $$ $$ = a_0y_j + a_1\biggl( y(x_j) + y'(x_j)( x_{j \pm i} - x_j ) + {1 \over 2}y''(x_j)(x_{j \pm i}-x_j )^2 + O[(x_{j \pm i} - x_j)^3] \biggr) + \epsilon $$
Ossia, rinominando la quantità \( (x_{j + 1} - x_j) = h \) "lunghezza del passo", l'espressione sarà:
$$ {dy \over dx}\lvert_{x_j} = a_0y_j + a_1\color{#2000a0}{y_{j+1}} = a_0y_j + a_1 \color{#2000a0}{\biggl( y_j + y'_jh + {1 \over 2}y''_jh^2 + O(h^3) \biggr)} + \epsilon $$
Che possiamo riscrivere come: $$ {dy \over dx}\lvert_{x_j} = a_0y_j + a_1y_j + a_1y'_jh + a_1{1 \over 2}y''_jh^2 + a_1 O(h^3) + \epsilon = (a_0 + a_1)y_j + a_1y'_jh + a_1{1 \over 2}y''_jh^2 + a_1 O(h^3) + \epsilon $$
Se questa espressione deve essere vera, allora i coefficienti dovranno essere: $$ \begin{cases} (a_0 + a_1) = 0 \\ a_1 = {1 \over h} \end{cases} $$
In questo modo avremo che: $$ {dy \over dx}\lvert_{x_j} = (0)y_j + {1 \over h}y'_jh + {1 \over h}{1 \over 2}y''_jh^2 + {1 \over h} O(h^3) + \epsilon $$ $$ \downarrow $$ $$ {dy \over dx}\lvert_{x_j} = y'_j + \color{#990010}{\biggl( {1 \over 2}y''_jh + O(h^2) \biggr)}$$
Cioè, si capisce che tutta la quantità entro parentesi in rosso e' l'errore (che prima abbiamo indicato con \( \epsilon \)), o meglio semplificando la derivata a destra ed a sinistra l'errore sarà: $$ \epsilon = - {1 \over 2}y''_jh + O(h^2) $$
Schema in avanti per la derivata prima
Partendo dalla formula generale: $$ {dy \over dx}\lvert_{x_j} = \sum_{i=0}^{1} a_iy(x_{j+i}) + \epsilon(h^p) $$
E sapendo che i coefficienti sono rispettivamente \( \begin{cases} a_0 = -{1 \over h} \\ a_1 = {1 \over h} \end{cases} \) e l'errore è: \( \epsilon = -{1 \over 2}y''_jh + O(h^2) \), possiamo subito risalire allo schema ad 1 passo per la derivata prima: (si osservi che l'errore ha precisione \(p=1\).
$$ {dy \over dx} = -{1 \over h}y_j + {1 \over h}y_{j+1} = {y_{j+1} - y_j \over h} + \epsilon(h) $$
Schema all'indietro per la derivata prima
Se facciamo un passo a sinistra invece che a destra approssimando la derivata in un punto immediatamente a sinistra, otteniamo uno schema analogo (bisogna risistemare gli indici)Sostituendo l'approssimazione di \( y_{j-1} \) (arrestata al secondo ordine) e sapendo che \( (x_{j - 1} - x_j) = -h \) "lunghezza del passo", l'espressione sarà:
$$ {dy \over dx}\lvert_{x_j} = a_{-1}\color{#2000a0}{y_{j-1}} + a_0y_j = a_{-1} \color{#2000a0}{\biggl( y_j -y'_jh + {1 \over 2}y''_jh^2 + O(h^3) \biggr)} + \epsilon $$
$$ {dy \over dx}\lvert_{x_j} = (a_0+a_{-1})y_j -a_{-1}y'_jh + a_{-1}{1 \over 2}y''_jh^2 + a_{-1}O(h^3) + \epsilon $$Di nuovo, questa espressinoe per essere verificata deve avere i coefficienti: \( \begin{cases} (a_0+a_{-1}) = 0 \\ a_{-1} = -{1 \over h} \end{cases} \rightarrow \begin{cases} a_0 = {1 \over h} \\ a_{-1} = -{1 \over h} \end{cases} \)
$$ \diamond\diamond $$Partendo dalla formula generale: $$ {dy \over dx}\lvert_{x_j} = \sum_{i=-1}^{0} a_iy(x_{j+i}) + \epsilon(h^p) $$
possiamo subito risalire allo schema ad 1 passo (sx) per la derivata prima: (si osservi che l'errore ha precisione \(p=1\).
$$ {dy \over dx} = -{1 \over h}y_{j-1} + {1 \over h}y_j = {y_j - y_{j-1} \over h} + \epsilon(h) $$