Hay muchas maneras de obtener derivadas. Quizás los más directo es ir de nuevo a las ecuaciones que componen el programa. Supongamos que un cierto resultado es definido por algunas ecuaciones, y el programa solucionó estas ecuaciones para este resultado. Entonces se puede escribir un nuevo sistema de ecuaciones, en el cual las soluciones son las derivadas del resultado inicial. Por lo tanto, uno puede escribir un nuevo programa que solucione estas nuevas ecuaciones para las derivadas deseados. Esto es matemáticamente correcto, pero es probablemente la manera más costosa, puesto que implica discretizar las nuevas ecuaciones , entonces escribir un nuevo programa. Todos sabemos que tan difícil es esto, y cuántos errores se pueden cometer! Más aún, en algunos casos no hay ecuaciones originales simples, y solamente escribir el programa es complejo. Por lo tanto estamos buscando otra manera, más económica y que use solamente el programa original.
Usando solamente el programa original, uno puede hacer naturalmente diferencias
divididas. Para un conjunto de programas dados X, el programa P
computa un resultado P(X)=Y. En el caso general, X y Y son vectores, es
decir, se componen de varios números reales. Ahora se da una cierta
dirección normalizada dX en el espacio de entrada, se puede correr
el programa P otra vez, sobre el nuevo conjunto de las entradas X+dX,
donde
es un número positivo muy pequeño. Entonces una buena aproximación de
la derivada se calcula fácilmente haciendo:
Las diferencias divididas centradas, se calculan:
usualmente da una aproximación mejor, pero cueste una ejecución adicional del
programa P. Por supuesto, esto es solo una aproximación de los derivadas.
Idealmente, la derivada es exacta en el límite de estas fórmulas, cuando
tiende a
cero. Pero esto no tiene ningún sentido en una computador real, puesto
que los valores de
muy pequeños conducen a errores de truncamiento, y por
lo tanto a derivadas erróneas. Ésta es la desventaja principal de
diferencias divididas: un cierto tradeoff se debe encontrar entre los errores
de truncamiento y los errores de la aproximación. Encontrar el mejor
requiere
numerosas ejecuciones del programa, e incluso entonces las derivadas
son sólo aproximaciones.