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.
- ¿Cuál es la función más compleja que has visto que, lógicamente, no debería funcionar, pero sí lo hace?
- Cómo implementar la diferenciación automática en C ++ desde cero
- ¿Cuál es la diferencia entre NP-hard y NP-complete?
- ¿Cuáles son algunos tipos interesantes de algoritmos / métodos de licitación?
- Me equivoqué completamente en mi examen de Matemática discreta. ¿Todavía podré ir a la escuela de posgrado?
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.