title: Metodi di soluzione numerica per equazioni differenziali ordinarie
text: # Metodi di soluzione numerica per equazioni differenziali ordinarie
  
  I metodi di soluzione numerica per equazioni differenziali ordinarie permettono di risolvere in maniera approssimata equazioni differenziali ordinarie altrimenti non trattabili.
  
  ## Metodi a passo singolo
  
  Un metodo numerico per la risoluzione di una equazione differenziale si definisce ad un passo se per ogni $n>0,y_{n+1}$ dipende solamente da $y_{n}$. Altrimenti si parla di metodo a più passi o multistep.
  
  ### Metodi di Eulero
  
  **Metodo di Eulero esplicito (o "in avanti")**
  
  Si tratta di un metodo esplicito per risolvere un'equazione differenziale. Data l'equazione nella forma:
  
      $y'={\frac {dy}{dx}}=f(x,y)$
  
  con la condizione iniziale:
  
      $y(x=x_{0})=y_{0}$
  
  definita nel dominio $x\in [a,b]$ è necessario prima di tutto discretizzare il dominio con un passo $h$, ottenendo i punti discreti $\lbrace x_{0},x_{1},\dots ,x_{N}\rbrace$, dove $x_{n}=x_{0}+nh$, con $x_{0}=a$ e $x_{N}=b$. A questo punto il procedimento è quello di sostituire l'equazione della tangente alla funzione:
  
      $y_{1}-y_{0}=f_{x_{0},y_{0}}\cdot (x_{1}-x_{0})$
      $y_{2}-y_{1}=f_{x_{1},y_{1}}\cdot (x_{2}-x_{1})$
      $\dots$
      $Y-y_{n-1}=f_{x_{n-1},y_{n-1}}\cdot (x_{n}-x_{n-1})$
  
  In questo modo la soluzione diviene una somma di funzioni lineari "troncate":
  
      $Y=y_{0}+f_{x_{0},y_{0}}\cdot (x-x_{0})^{Tr}+f_{x_{1},y_{1}}\cdot (x-x_{1})^{Tr}+\cdots +f_{x_{n-1},y_{n-1}}\cdot (x-x_{n-1})^{Tr}$
  
  in cui:
  
      $(x-x_{i-1})^{Tr}={\begin{cases}0&{\text{ se }}x\leq x_{i-1}\\x-x_{i-1}&{\text{ se }}x_{i-1}\leq x\leq x_{i}\\x_{i}-x_{i-1}&{\text{ se }}x_{i}\leq x\end{cases}}$
  
  per $i=1,\ldots ,n$.
  
  **Metodo di Eulero implicito (o all'indietro)**
  
  Si tratta di un metodo implicito per risolvere un'equazione differenziale, ricavato dall'approssimazione della derivata con le differenze finite all'indietro:
  
      ${\frac {dy}{dx}}\approx {\frac {y_{n}-y_{n-1}}{h}}$
  
  che applicato all'equazione differenziale diventa:
  
      ${\frac {y_{n}-y_{n-1}}{h}}=f(x_{n},y_{n})$
  
  equivalente a:
  
      ${\frac {y_{n+1}-y_{n}}{h}}=f(x_{n+1},y_{n+1})$
  
  da cui otteniamo la formula risolutiva generica:
  
      $y_{n+1}=y_{n}+hf(x_{n+1},y_{n+1})$
  
  Per risolvere l'equazione ci si riconduce pertanto ad un problema di ricerca di zeri di una funzione. Pur essendo anch'esso un metodo del prim'ordine, è in generale più stabile dell'analogo metodo esplicito. I metodi di Eulero sono usati quasi esclusivamente in analisi numerica, poiché permettono di risolvere semplicemente equazioni differenziali mediante l'utilizzo del computer.
  
  ### Metodo dei trapezi (o metodo di Crank-Nicolson)
  
  Non sempre i metodi precedenti sono utilizzabili nell'approssimazione numerica di equazioni differenziali. Ad esempio, nel caso del pendolo lineare:
  
      ${\frac {d^{2}x}{dt^{2}}}+x=0$
  
  i due metodi di Eulero porteranno, durante il processo di numerizzazione, a trasformare il centro in un fuoco. Esistono, dunque, altri metodi, uno di questi è il metodo dei trapezi. Questo metodo deriva comunque dai metodi di Eulero: è sufficiente sommare membro a membro la formula del metodo di Eulero esplicito e quella di Eulero implicito per ricavarne il nuovo metodo, come segue:
  
      $y_{n+1}=y_{n}+{\frac {h}{2}}(f_{n}+f_{n+1})=y_{n}+{\frac {h}{2}}(y'_{n}+y'_{n+1})$
  
  Il nome del metodo deriva dal fatto che la formula risultante ha la stessa forma utilizzata per approssimare l'integrale definito di una funzione come l'area di un trapezio.
  
  ### Metodo di Heun
  
  Dapprima, calcolare:
  
      $y_{n+1}^{(0)}=y_{n}+hf_{n}$
  
  Poi, calcolare:
  
      $y_{n+1}=y_{n}+{\frac {h}{2}}(f(x_{n},y_{n})+f(x_{n}+h,y_{n+1}^{(0)}))$
  
  ## Metodi multipasso
  
  Questi metodi utilizzano non solamente $f_{n}$ e $f_{n+1}$ per calcolare $y_{n+1}$ ma anche i valori $f_{n-k}$. Con tutti questi metodi, è necessario utilizzare dapprima un metodo a singolo passo (come il metodo di Eulero) per calcolare i primi valori dei $f_{n-k}$.
  
  ### Metodo di Adams-Bashforth
  
  Metodo esplicito:
  
      $y_{n+1}=y_{n}+{\frac {h}{12}}(23f_{n}-16f_{n-1}+5f_{n-2})$
  
  Fu utilizzata da John Couch Adams per risolvere le equazioni differenziali della teoria della capillarità (vedi la bibliografia).
  
  ### Metodo di Adams-Moulton
  
  Metodo implicito:
  
      $y_{n+1}=y_{n}+{\frac {h}{12}}(5f_{n+1}+8f_{n}-f_{n-1})$
  
  ### Formule di differenziazione all'indietro
  
  Le formule di differenziazione all'indietro (BDF) sono una famiglia di metodi impliciti usati specialmente per la soluzione di equazioni differenziali rigide.
  
  ## Metodi predittore-correttore
  
  Un metodo predittore-correttore si forma di un metodo esplicito (il predittore) e un metodo implicito (il correttore). Dapprima il metodo esplicito è utilizzato per calcolare un'approssimazione di $y_{n+1}$, poi questa approssimazione di $y_{n+1}$ è utilizzata nel metodo implicito per calcolare una migliore approssimazione di $y_{n+1}$. Il vantaggio di questo tipo di metodo è di evitare di risolvere un'equazione implicita per $y_{n+1}$. Un esempio di metodo predittore correttore è il metodo di Adams-Bashforth (il predittore) con il metodo di Adams-Moulton (il correttore).
  
  ## Metodo di approssimazione a serie di potenze
  
  Le serie di potenze sono un algoritmo per costruire funzioni e quindi soluzioni di equazioni differenziali lineari. Il procedimento è quello di costruire formalmente una serie di potenze in modo che i suoi coefficienti soddisfino l'equazione differenziale, in particolare utilizzando le serie derivate, e controllare poi che la scelta dei coefficienti dia una serie convergente, quindi converga ad una funzione.
  
  ### Esempio
  
  Si consideri:
  
      $y'=5y$
  
  Si costruisce formalmente le serie:
  
      $\sum _{k=0}^{+\infty }ka_{k}x^{k-1}=5\cdot \sum _{k=0}^{+\infty }a_{k}x^{k}$
  
  valutando i primi termini:
  
      $a_{1}+2a_{2}\cdot x+3a_{3}\cdot x^{2}+...=5a_{0}+5a_{1}\cdot x+5a_{2}\cdot x^{2}+...$
  
  uguagliando alle rispettive potenze della $x$:
  
      $a_{1}=5a_{0}$ che corrisponde a $a_{1}=5a_{0}$
      $2a_{2}=5a_{1}$ che corrisponde a $a_{2}={\frac {5^{2}}{2}}a_{0}$
      $3a_{3}=5a_{2}$ che corrisponde a $a_{3}={\frac {5^{3}}{3!}}a_{0}$
      $\dots$
      $ka_{k}=5a_{k-1}$ che corrisponde alla serie:
      $a_{0}\sum _{k=0}^{+\infty }{\frac {5^{k}\cdot x^{k}}{k!}}$
  
  Questa serie è convergente in $\mathbb {R}$ per ogni scelta di $a_{0}$ (potendosi ricondurre alla serie esponenziale con la sostituzione $\xi =5x$) e la somma di tale serie, che è funzione di classe $C^{1}(\mathbb {R} )$, fornisce una soluzione dell'equazione differenziale.
  
  Naturalmente l'algoritmo vale anche per equazioni differenziali lineari di ordini superiori.
  
  