Realizada con pythontex usando sympy y pandas
Para poder desarrollar esta práctica, además de lo comentado en el artículo LyX y pythontex, hay que tener instalados los paquetes
python3-sympy python3-pandas
Hay algunos ejemplos en internet de cómo conseguirlo, pero sin hacer de la librería pandas de python. Sé que para comenzar puede ser algo compleja, pero me va a permitir que se vea la potencia que tiene el usar pythontex y LyX para con unas pocas líneas de código:
\begin{sympycode} import pandas as pd pd.set_option('max_colwidth', None) var('x k') var('a n', positive=True) df = pd.DataFrame(columns=['Función', 'Derivada', 'Integral']) # Creo una lista de funciones a las que obtener su integral y derivada funcs = [k, x, x**n, 1/x, sqrt(x), root(x,n), a**x, exp(x), sin(x), cos(x), tan(x), cot(x), 1/cos(x)**2, 1/sin(x)**2, 1/sqrt(1-x**2), 1/(1+x**2), 1/(a**2+x**2)] for func in funcs: derivada = Derivative(func, x) integral = Integral(func, x) fila={'Función':'$f(x)='+latex(func)+'$', 'Derivada': '$f\'(x)='+latex(derivada.doit())+'$','Integral': '$'+latex(integral)+'='+latex(integral.doit())+'+C$'} df=df.append(fila,ignore_index=True) tabla=df.to_latex(escape=False,index=False,bold_rows=True) tabla=tabla.replace('log','ln') \end{sympycode}
obtener
con la ventaja de que las funciones de las que se obtiene la tabla están en una lista que podemos modificar de forma dinámica.
Paso a comentar de forma escueta el significado del código usado:
Usamos lo que sigue para el entorno de pythontex que directamente carga la librería sympy. En la documentación del paquete pythontex se explica qué supone usarlo.
\begin{sympycode} \end{sympycode}
Una de las ventajas a usar la forma de hacerlo de una de las primaras entradas es que no tenemos que escribir
from sympy import *
para importar la libraría sympy de python.
Importamos la librería pandas de python y hacemos que no se trunquen las líneas del dataframe que creamos al exportarlo después a LaTeX por ser algunos campos muy largos. Además creo el dataframe que almacenará la tabla de derivadas e integrales con esas columnas.
import pandas as pd pd.set_option('max_colwidth', None) df = pd.DataFrame(columns=['Función', 'Derivada', 'Integral'])
Así creamos , , y como variables de sympy y podemos realizar operaciones con ellas sin tener asignado un valor numérico. Las variables y las definimos como positivas. También creo la lista de funciones que derivar e integrar.
var('x k') var('a n', positive=True) # Creo una lista de funciones a las que obtener su integral y derivada funcs = [k, x, x**n, 1/x, sqrt(x), root(x,n), a**x, exp(x), sin(x), cos(x), tan(x), cot(x), 1/cos(x)**2, 1/sin(x)**2, 1/sqrt(1-x**2), 1/(1+x**2), 1/(a**2+x**2)]
Con ese bucle recorro la lista de funciones
for func in funcs: derivada = Derivative(func, x) integral = Integral(func, x) fila={'Función':'$f(x)='+latex(func)+'$', 'Derivada': '$f\'(x)='+latex(derivada.doit())+'$','Integral': '$'+latex(integral)+'='+latex(integral.doit())+'+C$'} df=df.append(fila,ignore_index=True)
En e almaceno la función Derivada e Integral de sympy
En almaceno la función de la lista, su derivada y su integral. Además:
- Con latex(argumento) paso a LaTeX el resultado de la expresión.
- Con derivada.doit() o integral.doit() realizo el cálculo de la derivada e integral (respectivamente) con sympy.
- Con el formato que le doy a las cadenas que creo mezclo código LaTeX con los resultados anteriores.
- Finalmente, para cada función añado esa fila al dataframe.
Por último, pasamos a LaTex el dataframe obtenido y para que nos muestre en la nomenclatura usual la función reemplazamos el texto por
tabla=df.to_latex(escape=False,index=False,bold_rows=True) tabla=tabla.replace('log','ln')
El último paso imprimir la tabla obtenida en nuestro documento con el comando que se escribe en LyX usando un recuadro de LaTeX:
\sympyc{print(tabla)}
- El fichero fuente en formato LyX lo puedes descargar en este enlace.
- El resultado de procesar ese fichero, en formato html, usando pandoc tal cual se explica en el artículo Escribir con LyX los artículos de la página web y retocándolo un poco se puede ver pulsando en el enlace.
Otro día explicaré como podemos usar pythontex no solo para generar pdfs usando pdflatex sino para poder generar fichero LaTeX que no dependan en su compilación de usar la libraría pythontex.