Derivazione numerica

La derivazione numerica si occupa di derivare funzioni a partire da approssimazioni di esse.

Teorema 5.7   La derivazione numerica non è in generale stabile.

Vi sono due approcci principali alla derivazione numerica:

  1. Globale: si cerca di approssimare $ f'$ su tutto l'intervallo $ [a,\,b]$ tramite interpolazione spline.
  2. Locale: calcolo $ f'$ tramite rapporto incrementale su un punto.
Per definizione di derivata, si ha:

  $\displaystyle \delta_+(h) = \frac{f(x+h)-f(x)}{h}$    
  $\displaystyle f'(x) = \lim_{h \to 0} \delta_+(h)$    

Sia $ f \in \mathcal{C}^2$ in un intorno di $ x$. Applicando la formula di Taylor si ha:

$\displaystyle f(x+h) = f(x) + hf'(x) + \frac{h^2}{2}f''(z), \qquad z \in (x,\,x+h)
$

Il rapporto incrementale $ \delta_+(h)$ si può esprimere come:

$\displaystyle \delta_+(h) = f'(x) + \underbrace{\frac{h}{2}f''(z)}_{O(h)}
$

Sia $ f$ approssimata da $ \tilde{f}$, con un errore maggiorabile con un $ \varepsilon$ fissato:

$\displaystyle \left\vert f(x) - \tilde{f}(x) \right\vert \leq \varepsilon
$

Si ha di conseguenza un rapporto incrementale approssimato $ \tilde{\delta}_+$:

$\displaystyle \tilde{\delta}_+(h) = \frac{\tilde{f}(x+h) - \tilde{f}(x)}{h}
$

Si può analizzare la stabilità sviluppando l'espressione dell'errore:

$\displaystyle f'(x) - \tilde{\delta}_+(h) = \underbrace{f'(x) - \delta_+(h)}_{\...
...rgenza}} + \underbrace{\delta_+(h) - \tilde{\delta}_+(h)}_{\text{stabilit\\lq a}}
$

$\displaystyle \left\vert \delta_+(h) - \tilde{\delta}_+(h) \right\vert$ $\displaystyle = \left\vert \frac{f(x+h) -f(x)}{h} - \frac{\tilde{f}(x+h) - \tilde{f}(x)}{h} \right\vert$    
  $\displaystyle = \left\vert \frac{f(x+h) - \tilde{f}(x+h) + \tilde{f}(x) - f(x)}{h} \right\vert$    
  $\displaystyle \overset{D.T.}{\leq} \left\vert \frac{f(x+h)-\tilde{f}(x+h)}{h} \right\vert + \left\vert \frac{\tilde{f}(x) -f(x)}{h} \right\vert$    
  $\displaystyle \leq \frac{\varepsilon}{h} + \frac{\varepsilon}{h} = \frac{2 \, \varepsilon}{h}$    

Quindi:

$\displaystyle \left\vert f'(x) - \tilde{\delta}_+(h) \right\vert \leq \left\ver...
..._+(h) - \tilde{\delta}_+(h) \right\vert \leq \frac{2 \, \varepsilon}{h} + O(h)
$

Sia $ g(h) \overset{def.}{=} \frac{2 \, \varepsilon}{h} + O(h)$. Si noti che per $ h$ molto piccolo, l'errore diventa molto grande.

Si deve trovare $ h^* = \min_{h} g(h) = \min_{h} c h +\frac{2\,\varepsilon}{h}$:

$\displaystyle g'(h) = c - \frac{2 \, \varepsilon}{h^2} = 0$ $\displaystyle \implies \frac{h^2}{2 \, \varepsilon} = \frac{1}{c}$    
  $\displaystyle \implies h^2 = \frac{2 \, \varepsilon}{c}$    
  $\displaystyle \implies h = h^* = \sqrt{\frac{2 \, \varepsilon}{c}} = O(\sqrt{3})$    

Sia quindi $ \min_h g(h) = g(h^*)$.

$\displaystyle g(h^*)$ $\displaystyle = ch^* + \frac{2 \, \varepsilon}{h^*}$    
  $\displaystyle = 2 \sqrt{2 c} \sqrt{\varepsilon}$    
  $\displaystyle = O\left(\sqrt{\varepsilon}\right)$    

Funzioni arbitrariamente vicine possono avere derivata molto diversa.

Si può ottenere una stima migliore considerando un ordine in più nella formula di Taylor:

$\displaystyle \begin{aligned}
f(x+h) = f(x) + hf'(x) + \frac{h^2}{2}f''(x) + \...
...2}{2}f''(x) - \frac{h^3}{3!}f^{(3)}(z)
\end{aligned} \qquad z \in (x-h,\,x+h)
$

$\displaystyle f(x+h) -f(x-h) = 2h f'(x) + \frac{h^3}{3}f^{(3)}(z)
$

Calcolando il rapporto incrementale simmetrico $ \delta(h)$, risulta:

$\displaystyle \delta(h) = \frac{f(x+h) -f(x-h)}{2h}$ $\displaystyle = \frac{1}{2h}\, 2h f'(x) + \frac{1}{2h}\,\frac{h^3}{3}f^{(3)}(z)$    
  $\displaystyle = f'(x) + O(h^2)$    

Inoltre, si vede che:

$\displaystyle \delta(h) - f'(x) = O(h^2)
$

$\displaystyle \left\vert \delta(h) - \tilde{\delta}(h) \right\vert \leq \frac{2 \, \varepsilon}{2 h} = \frac{\varepsilon}{h}
$

L'errore risulta:

$\displaystyle \left\vert f'(x) - \tilde{\delta}(h) \right\vert$ $\displaystyle \leq \left\vert f'(x) - \delta(h) \right\vert + \left\vert \delta(h) - \tilde{\delta}(h) \right\vert$    
  $\displaystyle \leq O(h^2) + \frac{\varepsilon}{h} = g(h)$    

$\displaystyle h^* = O\left(\sqrt[3]{\varepsilon}\right),\qquad g(h^*) = O\left(\sqrt[3]{\varepsilon^2}\right)
$

Matteo Lisotto, Tobia Tesan - CC-BY 2.0