En matemàtica i àlgebra computacional, diferenciació automàtica, o DA, també coneguda com a diferenciació algorítmica, és un método per a l'evaluació de derivades d'una funció expressada com un programa de computació. Existixen dos métodos clàssics per al càlcul de derivades:

  • derivar simbòlicament la funció obtenint una expressió i evaluar-la en un punt donat; o
  • utilisar derivació numèrica.

L'inconvenient de la derivació simbòlica és la llentitut i la dificultat de convertir programes de computació en una única expressió. Ademés, la complexitat de moltes funcions creix segons es calculen derivades de major grau. Dos inconvenients importants de les derivades finitas són els errors de grosseig en càlculs de naturalea discreta i la cancelació. Els dos métodos clàssics té problemes en el càlcul de derivades de major grau, a on la complexitat i els errors es veuen incrementats. La diferenciació automàtica soluciona tots estos problemes.

DA es basa en el fet de que qualsevol programa de computació que implemente una funció vectorial i = F(x) (generalment) es pot descompondre en una seqüència de assignació elementals, sent cada una trivialment diferenciable utilisant una LUT (LookUp Table o taula per a busques). Estes derivades parcials bàsiques, evaluades utilisant els arguments, es combinen d'acort a regla de la cadena del càlcul de derivades per a formar informació derivada per a F (com gradients, tangentes, la matriu Jacobiana, etc.). Este procés obté derivades exactes (segons la precisió numèrica). Degut a que la transformació simbòlica ocorre només en el nivell més bàsic, DA evita els problemes computacionals inherents al càlcul simbòlic complex.

Aplicat a equacions diferencials

editar

Desenroll de Taylor per a  x=f(t,x) en el punt x0.

En la notació  f[n](t)=f(n)(t)n! podem tindre el següent desenroll:

 x(t+h)=x[0](t)+x[1](t)h+x[2](t)h2+...+x[n](t)hn:

  • per a orde 0 s'usa  x[0](t)=x0
  • per a orde 1 s'usa  x[1](t)=f(t,x0)

per al restant s'aplica els següents resultats:

  •  f(t)=g(t):f[n](t)=f(n)(t)n!=g(n1)(t)n!=1ng(n1)(t)(n1)!=1ng[n1](t)
  •  f(t)=g(t):f[n](t)=(n+1)g[n+1](t)
  •  f(t)=g(t)+h(t):f[n](t)=g[n](t)+h[n](t)
  •  f(t)=g(t)h(t):f[n](t)=i=0ng[ni](t)h[i](t)

La regla de la cadena, acumulació cap a avant i cap a arrere

editar

Acumulació cap a arrere

editar

Computació Jacobiana

editar

Referències Bibliogràfiques

editar