Tabla de derivadas e integrales usando LyX y pythontex

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

image

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:

  1. 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.

  2. 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'])
    
  3. Así creamos \(x\), \(k\), \(a\) y \(n\) como variables de sympy y podemos realizar operaciones con ellas sin tener asignado un valor numérico. Las variables \(a\) y \(n\) 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)]
    
  4. 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)
    
    1. En \(derivada\) e \(integral\) almaceno la función Derivada e Integral de sympy

    2. En \(fila\) almaceno la función de la lista, su derivada y su integral. Además:

      1. Con latex(argumento) paso a LaTeX el resultado de la expresión.
      2. Con derivada.doit() o integral.doit() realizo el cálculo de la derivada e integral (respectivamente) con sympy.
      3. Con el formato que le doy a las cadenas que creo mezclo código LaTeX con los resultados anteriores.
      4. Finalmente, para cada función añado esa fila al dataframe.
    3. Por último, pasamos a LaTex el dataframe obtenido y para que nos muestre en la nomenclatura usual la función \(ln\) reemplazamos el texto \(log\) por \(ln\)

      tabla=df.to_latex(escape=False,index=False,bold_rows=True)
      tabla=tabla.replace('log','ln')
      
  5. 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)}
    

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.