Las preguntas no son directamente de programación pero sospecho que aquí voy a recibir mejores respuestas y sobre todo, más orientadas a la programación que es lo que me interesa.
Estoy implementando un derivador de funciones en Scala (en el conjunto R.) Lo he implementado usando recursión, pero estando un poco oxidado en mates estoy teniendo problemas con los exponentes (¿lo más chungo de derivar?) He intentado Googlear pero lo que más encuentro son tablas de las funciones de derivación y poca información de verdad.
De momento sólo se pueden derivar exponentes constantes naturales (enteros positivos) pero me he encontrado con varias excepciones extendiéndolo a R, variables/funciones, etc.
En cuanto encuentro d(X1), simplemente devuelvo 1.0 como su derivada (el exponente queda 0 al derivar.) Quiero extenderlo a cero/números negativos, pero no estoy seguro de si d(d(X1)) es 0.0 (primera derivada da 1.0, luego 0.0 por ser constante) o simplemente x-1. Si es lo primero, me quedaré con la opción de devolver 1.0, pero si es lo último simplemente debería seguir restando 1 al exponente por cada derivación.
¿Cómo puedo extender esto a R? ¿La derivada de d(X2.1) debería devolver d(X2) + d(X0.1)? ¿Me estoy perdiendo algo y hay alguna forma más fácil de hacerlo?
Aunque aún no está implementado, sé como derivar aX, pero... ¿qué hay de XX y Xf(X), etc.? No recuerdo una puta mierda de cómo derivar esto. ¿Es muy complicado? ¿Dónde hay recursos para este tipo de derivadas más complejas?
Y una opción que se me ha ocurrido de equivalencias, pero no logro decidirme:
- ¿Sería inteligente devolver 1/Xn para exponente -n? ¿Hay alguna razón para hacerlo o no hacerlo?
Fuera del tema de exponentes, el profesor (sí, son deberes) comenta que da puntos extra si se implementa la derivada de funciones no definidas en todo R (sqrt, ln...) o funciones a trozos (|X|)
¿Hay alguna razón para estos puntos extra? Para sqrt y demás no le veo el problema, la derivada es exactamente igual sólo que debería devolver NaN cuando la quieras en los puntos donde no está definida (y de esto se encarga la propia fórmula de derivación.)
Para |X| si no recuerdo mal hay una fórmula de derivación que hace lo mismo (cuando X=0, hay un divisor que vale 0 y devuelve NaN.) (por cierto si alguien se sabe la fórmula lo agradezco xD)
¿De dónde viene la pajada de los puntos extra entonces?
Y por último, composición de funciones. f(g(X)) lo resuelvo simplemente sustituyendo cada valor de X en f por g(X) y posteriormente derivando la composición resuelta. ¿Lo estoy haciendo bien o me estoy pasando la regla de la cadena por el forro?