# Metodo delle differenze finite

In matematica, il metodo delle differenze finite è una strategia utilizzata per risolvere numericamente equazioni differenziali che, nelle sue varianti, si basa sull'approssimazione delle derivate con equazioni alle differenze finite. Viene utilizzato prevalentemente per equazioni differenziali ordinarie, anche se il metodo viene sfruttato come schema di avanzamento nel tempo per problemi alle derivate parziali.

## Derivazione dal polinomio di Taylor

Si consideri una funzione di cui si vogliono approssimare le derivate, e si supponga che, grazie al teorema di Taylor, si possa costruire la serie di Taylor:
    $f(x_{0}+h)=f(x_{0})+{\frac {f'(x_{0})}{1!}}h+{\frac {f^{(2)}(x_{0})}{2!}}h^{2}+\cdots +{\frac {f^{(n)}(x_{0})}{n!}}h^{n}+R_{n}(x)$
dove $n!$ denota il fattoriale di $n$, mentre $R_{n}(x)$ è un termine che denota la differenza tra la funzione originale e il polinomio di Taylor di grado $n$. Si deriva quindi l'approssimazione per la prima derivata di $f$ troncando il polinomio:
    $f(x_{0}+h)=f(x_{0})+f'(x_{0})h+R_{1}(x)$
Ponendo $x_{0}=a$ si ha:
    $f(a+h)=f(a)+f'(a)h+R_{1}(x),$
Dividendo per $h$:
    ${f(a+h) \over h}={f(a) \over h}+f'(a)+{R_{1}(x) \over h}$
e risolvendo in funzione di f'(a):
    $f'(a)={f(a+h)-f(a) \over h}-{R_{1}(x) \over h}$
Se si assume che $R_{1}(x)$ è sufficientemente piccola, l'approssimazione per la prima derivata di $f$ è:
    $f'(a)\approx {f(a+h)-f(a) \over h}$

## Ordine di convergenza e differenze finite compatte

Se la funzione $u$ è abbastanza regolare, si può scriverla come serie di Taylor col resto nella forma di Lagrange:
    $u(x+h)=u(x)+hu'(x)+{\frac {h^{2}}{2}}u''(y)$
Da qui portando $u(x)$ a primo membro e dividendo per $h$ si ottiene che l'approssimazione di $u'(x)$ data precedentemente ha un errore di ordine uno rispetto ad $h$. Se la funzione è più regolare, si può sviluppare ad esempio $u(x)$ in serie di Taylor al secondo ordine sia in avanti che all'indietro:
    $u(x+h)=u(x)+hu'(x)+{\frac {h^{2}}{2}}u''(x)+{\frac {h^{3}}{6}}u'''(y)$
    $u(x-h)=u(x)-hu'(x)+{\frac {h^{2}}{2}}u''(x)-{\frac {h^{3}}{6}}u'''(z)$
dove $y$ sta fra $x$ e $x+h$ mentre $z$ sta tra $x-h$ e $x$. Se ora si considera la differenza tra la prima e la seconda equazione, si ottiene la differenza finita centrata per la derivata prima:
    $u'(x)\,$ = ${\frac {u(x+h)-u(x-h)}{2h}}+{\frac {h^{2}}{12}}(u'''(y)+u'''(z))$
che si vede essere di ordine due rispetto ad $h$.
Si può generalizzare l'idea e pensare di prendere una combinazione lineare di espansioni in serie di Taylor di $u$ in punti del tipo $(x+nh)$, sistemando i coefficienti della combinazione lineare in modo da elidere i termini di troppo e tenere solo quello relativo alla derivata che si vuole approssimare, e il termine di grado più alto (che dà l'ordine di convergenza).
Fin qui abbiamo parlato di differenze finite classiche, ma possono essere costruiti altri schemi, detti delle differenze finite compatte, che si possono usare per approssimare derivate di qualunque ordine, a patto di supporre $u$ abbastanza regolare, di avere a disposizione un numero di nodi sufficiente in cui si conoscono i valori di u e delle sue derivate.

## Esempio

Si vuole approssimare la derivata seconda con un'accuratezza di ordine 2. Si scrive dunque
    $u(x+h)=u(x)+hu'(x)+{\frac {h^{2}}{2}}u''(x)+{\frac {h^{3}}{6}}u'''(x)+{\frac {h^{4}}{24}}u''''(y)$
    $u(x+2h)=u(x)+2hu'(x)+{\frac {4h^{2}}{2}}u''(x)+{\frac {8h^{3}}{6}}u'''(x)+{\frac {16h^{4}}{24}}u''''(z)$
    $u(x+3h)=u(x)+3hu'(x)+{\frac {9h^{2}}{2}}u''(x)+{\frac {27h^{3}}{6}}u'''(x)+{\frac {81h^{4}}{24}}u''''(w)$
    $u(x+4h)=u(x)+4hu'(x)+{\frac {16h^{2}}{2}}u''(x)+{\frac {64h^{3}}{6}}u'''(x)+{\frac {256h^{4}}{24}}u''''(q)$
Moltiplicando la prima equazione per $a$, la seconda per $b$, la terza per $c$, la quarta per $d$; e quindi sommando, si ottiene (per semplicità di notazioni si indica con $u_{n}$ il valore di $u$ in $x+nh$):
    $au_{1}+bu_{2}+cu_{3}+du_{4}=(a+b+c+d)u_{0}+(a+2b+3c+4d)hu'_{0}+(a+4b+9c+16d){\frac {h^{2}}{2}}u''_{0}$
    $+(a+8b+27c+64d){\frac {h^{3}}{6}}u'''_{0}+a{\frac {h^{4}}{24}}u''''(y)+b{\frac {16h^{4}}{24}}u''''(z)+c{\frac {81h^{4}}{24}}u''''(w)+d{\frac {256h^{4}}{24}}u''''(q)$
Si deve ora imporre che resti, a secondo membro, solo il termine relativo alla derivata seconda, quindi annulliamo tutti i coefficienti per le altre derivate. Si pone quindi:
    $a+b+c+d=0$
    $a+2b+3c+4d=0$
    $a+4b+9c+16d=2$
    $a+8b+27c+64d=0$
in modo che dividendo per $h^{2}$ si ottenga:
    ${\frac {au_{1}+bu_{2}+cu_{3}+du_{4}}{h^{2}}}=u''_{0}+o(h^{2})$
che è di ordine due, come era richiesto.