Cómo implementar la diferenciación automática en C ++ desde cero

Mi primer paso sería revisar en detalle las más de 30 implementaciones existentes de diferenciación automática en C ++. Esto no es trampa.

Incluso si los odio a todos, aprendo mucho sobre las compensaciones involucradas en la escritura de software de diferenciación automática. Tal vez hay una que me gustó por muchas cosas que hace bien, pero que creo que podría mejorar en algunas otras cosas.

Si es de código abierto, podría aportar esas otras cosas a la biblioteca y espero que sea aceptado. Si no, puedo bifurcarlo. ¿Eso es suficiente desde cero? Todavía es exactamente lo que yo quería que fuera.

Si no, entonces lo enfocas como un ensayo de secundaria. Sumérgete en el código fuente existente para que conozcas las ideas básicas y los puntos importantes. Luego, para evitar el plagio, siéntate de nuevo y escríbelo sin tijeras y sin pegar, según lo que hayas aprendido. (Con suerte, también podría ser mejor de alguna manera que lo que vino antes, pero tendría que estudiar lo que vino antes para saber si es así).

Dado que el objetivo final es la diferenciación, es algo bien documentado en un libro de texto de cálculo, por lo que también tendría uno de esos a la mano. Dependiendo de si desea un enfoque de álgebra simbólica o no (cálculo simbólico), un libro de texto de análisis numérico o uno sobre álgebra de computadora también podría ser muy útil.

More Interesting

¿Es la teoría de la computación el tema 'inferior' de la informática?

¿Cómo se llega a una estructura de datos totalmente nueva?

¿En qué se diferencia la informática de las matemáticas para resolver un problema?

¿Ser bueno en matemáticas ayuda en la programación?

Como estudiante de matemáticas, ¿cuáles son las clases más importantes que podría tomar en informática?

¿Cuál es el estado actual de la computación analógica?

Int a [6] = {1,2,4,5,}; ¿Es correcta esta afirmación en el concepto de matrices?

¿Qué es la combinatoria en matemáticas discretas?

Cómo resolver la Competencia de Computación Canadiense de 1996, Etapa 1, Problema C (vea el enlace del problema a continuación)

Cómo calcular la suma: [matemáticas] S = 1 (1 \ veces 2) +2 (2 \ veces 3) + \ puntos + n (n \ veces (n + 1)) [/ matemáticas]

Dada una lista de conjuntos de 2 números, ¿cómo divide esta lista por la mitad de modo que la suma de cada uno de los números 1 y 2 para ambas mitades sea aproximadamente par?

Cómo explicar intuitivamente por qué [matemáticas] \ frac {n!} {(N + 1)!} [/ Matemáticas] [matemáticas] = \ frac {1} {n + 1} [/ matemáticas]

¿Cuántos dígitos de precisión pueden medir los experimentos físicos (PI)?

Dada una matriz, ¿qué es un algoritmo para identificar la submatriz con la suma máxima?

¿Todas las integrales pueden ser calculadas por una computadora? Del mismo modo, ¿hay integrales en este momento que los matemáticos no puedan resolver?