pyBigParser, un evaluador de funciones complejas en Python

En ingeniería química es común el uso de largas y complejas expresiones matemáticas para, por ejemplo, la obtención de parámetros termodinámicos en compuestos que intervienen en un proceso a modelar.

pyBigParser es una librería escrita en Python que permite crear objetos para el almacenamiento de funciones y su evaluación. Gracias a esta librería la función se puede dividir en “bloques” facilitando su implementación y evaluando la misma con otros parámetros a posteriori.

Por ejemplo, la ecuación:

$latex \left ( 24+6*c \right )^2+\left ( 2* \frac{25}{d} \right )$

se puede escribir de forma más compacta de la siguiente forma:

$latex (x)^2+\left ( 2*y \right )$

siendo:

$latex x=24+6*c$

$latex y=2*\frac{25}{d}$

Para hacer esto con pyBigParser:

from pybigparser import evaluator

mybig = evaluator.bigFunction()
mybig.setFunction("x**2+2*y")
mybig.addSub("x", "24+6*c")
mybig.addSub("y", "25 / d")
mybig.addSub("c", "1")
mybig.addSub("d", "4")

mybig.evaluate()

¿Sencillo no? En el momento de escribir esta entrada pyBigParser tiene una media de 500 descargas diarías.

Si estás iniciandote en programación con Python, puede que te ayude ver el vídeo-ejemplo que el propio creador (Nelson Carrasquel) ha publicado en nuestro canal de YouTube de CAChemE.

4 Responses to “pyBigParser, un evaluador de funciones complejas en Python”

  1. Juanlu001 22 septiembre, 2013 at 20:35 #

    Hmm, ¿y no sería mejor aprovechar SymPy?

    https://gist.github.com/Juanlu001/6663026

    (Tenemos un par de artículos: http://pybonacci.wordpress.com/tag/sympy)

    • Nelson Carrasquel 23 septiembre, 2013 at 0:11 #

      Si podrías, pero la combinación de pybigparser con otras librerías es lo que la hace algo atractiva, si te fijas en los ejemplos que propones tanto x,y,c y d son símbolos (“symbols”), lo cual restringe un poco el tipo de entrada de estas expresiones, con pybigparser los símbolos o expresiones pueden ser de cualquier tipo siempre y cuando esos tipos sean compatibles entre si y soporten operaciones algebraicas, como por ejemplos el uso cantidades físicas, una sub expresión puede ser también un código simple de python como la suma de una lista sum(list) o cualquier otra función incorporada en python, también una una definición hecha con lambda para algo mas dinámico, entre muchas cosas mas, el vídeo es algo corto pero el uso de la herramienta se extiende bastante, y solo son 49 kb y de fácil y rápida importación

      • Juanlu001 23 septiembre, 2013 at 19:25 #

        ¡Interesante! No sabía nada de esto 😀

        ¡Un saludo!

        • Nelson Carrasquel 23 septiembre, 2013 at 19:28 #

          Haz algunas pruebas y asegúrate de que tengas la versión mas reciente que es la 1.2.8, próximamente se le incorporara que el almacene el valor de cada una de la subexpresiones una vez evaluado el objeto. Saludos

Deja un comentario