Diferenciación Automática

Sonido en simulación vehicular

Verificación de un modelo de vehiculo

Especificación de diseño de producto: 
Batidora Industrial

Unidad Bomba-Inyector para motores 
diesel: Sistema UIS
Diferenciación Automática

Existen muchas maneras de obtener la derivada de una función. Una de ellas es obtener la derivada de acuerdo con su definición empleando las fórmulas bien conocidas del cálculo. Empleando computadores se aplica con las herramientas de diferenciación simbólica (como la symbolic toolbox de Matlab o en Maple). Otra forma es utilizar técnicas de derivación numérica como diferencias divididas, que son intrínsecamente inexactas. Además sólo se pueden aplicar sobre funciones bien definidas, formadas por combinaciones de funciones más sencillas, que caben en una línea,

Sin embargo en muchas aplicaciones de ingeniería, como en simulación o en optimización, necesitamos conocer la derivada de funciones muy complejas que se han definido por el programador. Por ejemplo en simulación multibody necesitamos formar la jacobiana de las ecuaciones de restricción, o en optimización se requiere tanto la jacobiana como la hessiana (1º y 2º derivadas) de la función energía a minimizar. Estas funciones normalmente se tienen definidas en clases o en archivos y pueden tener varios cientos o miles de líneas de código. Hasta ahora no quedaba más remedio que hacer la derivada a mano, programando la clase correspondiente. Como se puede imaginar, esto supone una gran perdida de tiempo y de esfuerzo en el desarrollo de un proyecto, además de ser una fuente importante de errores. Era una dificultad importante a salvar y limitaba el desarrollo de aplicaciones grandes.

La diferenciación automática nos permite obtener la derivada de una función definida en un archivo, por compleja o largo que sea, sin pérdida de precisión y en un tiempo de computación razonable. Y no solo la primera derivada, sino también derivadas de orden superior, gradientes, jacobianas y hessianas.

Existen dos tipos
Sobrecarga del operador
Transformación de código

Continuará...

© David Gómez Jiménez 2006