Integral racional definida con raíces enteras usando fracciones simples

Un ejercicio común cuando se estudia integración es el de resolver integrales racionales en las que el denominador tiene todas sus raíces enteras. Con LyX /LaTeX/pythontex y la librería sympy de python se ha creado un fichero/programa, que permite resolver cualquier tipo de problema de este tipo con solo introducir el numerador y las raíces del denominador de nuestra función racional. Además se hace uso del paquete polynom de LaTeX para la división euclídea de polinomios así como para factorizar el denominador usando la regla de Ruffini.

Para que el ejercicio quede completo, no solo se calcula la integral indefinida, además se calcula la integral definida usando sympy y la regla de Barrow. Para no tener problemas con el intervalo de integración y las raíces enteras del denominador, siempre se toma como intervalo de integración el que se establece con (ese valor se puede cambiar a nuestro gusto):

#Amplitud de la integral definida a partir de uno más de la mayor raíz del denominador
# Si la mayor raíz es 3, el intervalo de integración será 4 y 4+amp
amp=2

En la solución propuesta del ejercicio resuelto en el fichero en formato LyX, que se puede descargar al final del artículo, se presupone que el grado del numerador es mayor o igual que el grado del denominador, y en ese caso se realiza la división entre ambos polinomios. En el caso contrario (grado del numerador menor que el grado del denominador) solo hay que realizar una pequeña modificación en el fichero (se marca con dos notas LyX el texto que habría que comentar) para poder resolver ese tipo de ejercicios sin que el paquete polynom dé error.

Parte del código usado para factorizar el denominador y para realizar la división de polinomios es similar al usado en Ejercicio de polinomios con pythontex y el paquete polynom. El código de este ejercicio no me parece simple y en los casos que lo he testeado ha funcionado bien, si se detecta algún error en él por favor, avisadme para intentar corregirlo.

Por otro lado, comentar que el propio programa se encarga de detectar si los dos polinomios introducidos tienen algún factor común y antes de comenzar a resolver el ejercicio o mostrar el enunciado se encarga de simplificarlos para hacer el ejercicio a partir de polinomios sin factores comunes. También de ajustar el número de coeficientes necesarios para obtener las fracciones simples así como de su construcción en función de si hay raíces de orden mayor que uno.

Para que pythontex cambie la forma de escribir el \(\ln\) por parte de sympy, se introduce al principio del código python

#Para que pythontex ponga ln en vez de log
pytex.set_sympy_latex('text',ln_notation=True)
pytex.set_sympy_latex('display',ln_notation=True)

El ejemplo del enunciado que hay por defecto en la plantilla es:

Calcula:

\begin{equation*} \int\limits _{1}^{3}\frac{x^{5}+x+1}{x^{4}+5x^{3}+8x^{2}+4x}\,dx \end{equation*}

Y se resuelve a partir de los datos:

#Numerador debe ser de grado mayor o igual que el denominador
#si el grado del numerador es menor comentar lo que se apunta en el fichero LyX
#en caso contrario dará error
num=x**5+x+1

#establecemos las raíces (enteras) del denominador
raices=[-1,0,-2,-2]

Esos valores de entrada se pueden cambiar en el código python y de esa forma poder obtener soluciones o ejercicios diferentes.

Para los datos que se muestran en los enunciados anteriores, la solución que se obtiene al compilar el fichero LyX es similar a las capturas gráficas.

image

image1

image2

Al usar el paquete polynom, en funciones de python, no me es factible usar depythontex para poder obtener con pandoc de forma sencilla el html de la solución.