hola,
la función derivadora parece ser un buen ejercicio para aprender a manipular listas. el polinomio está representado por una lista, donde la posición \( i \) proporciona el coeficiente correspondiente a \( x^{m-i} \).
consideremos el polinomio \( P = \sum_{i\in[0..m]} {a_{m-i} x^{m-i}} \). su derivada es \( P' = \sum_{i\in[0..m)} {(m-i) a_{m-i} x^{m-i-1}} \). observemos ahora cómo se modifican las listas asociadas a estos polinomios...
\( [a_m, a_{m-1}, \dots a_2, a_1, a_0] \mapsto [m a_m, (m-1) a_{m-1}, \dots 2 a_2, a_1] \)
en python hay funciones sobre listas que permiten representar adecuadamente estas transformaciones. observemos algunas acciones que nos permiten implementar esta operación.
* crear una lista \( [m, m-1, \dots 2, 1] \)
* aplicar el producto a las dos listas elemento a elemento
pues bien, eso es precisamente lo que hace el siguiente código.
import mul from operator
def derivadora (pol, m):
aux = range (m, 0, -1)
out = map (mul, pol, aux)
return list (out)
el siguiente código más compacto hace lo mismo.
import mul from operator
def derivadora (pol, m):
return list (map (mul, pol, range (m, 0, -1)))
hay una diferencia muy importante entre lo que muestro aquí y la derivadora original. resulta que en la derivadora original se usa la lista para representar el polinomio, pero se piensa la derivación en términos del polinomio original. en el código que muestro, se piensa la derivación como transformación en la representación del polinomio. ese salto que consiste en entender las transformaciones no en términos del problema original sino en términos de su representación es, a mi juicio, una de las características de la programación.
quiero decir finalmente que, me parece, aún resta pensar más en la representación de qué es un polinomio. en particular, no queda claro por qué aparece el grado de los polinomios. es importante que un polinomio \( P \) quede representado por algún objeto P, y no por una colección de cosas que hay que interpretar en forma conjunta. en el caso de los polinomios, esto se puede resolver con listas; antes de avanzar en la codificación, es importante manejarse con comodidad con la representación elegida.
saludos
luis