EXPRTK
ExprTk, abreviatura de C++ Mathematical Expression Toolkit, es una biblioteca de Arash Partow que interpreta y evalúa expresiones matemáticas escritas como texto. Está desarrollada en C++ y se distribuye con licencia MIT. Su autor mantiene el sitio oficial, la documentación y el repositorio del proyecto.
En el proyecto Simusol usamos ExprTk para evaluar fórmulas dentro de otros programas. El empaquetado de Simusol, mantenido por Diego Saravia, permite que esos programas compartan una instalación de la cabecera original.
Cómo funciona
| Paso | Qué sucede |
|---|---|
| Registrar los nombres | El programa asocia variables, constantes y funciones con los nombres que aparecerán en la expresión. |
| Preparar la expresión | ExprTk analiza el texto, comprueba su sintaxis y construye una representación evaluable en memoria. |
| Evaluarla | El programa cambia los valores de las variables y vuelve a evaluar la misma expresión, sin analizar de nuevo su texto. |
Por ejemplo, x^2 + 1 vale 5 para x=2 y 10 para x=3. La biblioteca ofrece operaciones aritméticas, funciones matemáticas, condiciones, vectores y funciones definidas por el programa que la incorpora. Véanse el diseño y los ejemplos del autor.
ExprTk evalúa las expresiones; Calcula resuelve el sistema de ecuaciones y Siru coordina la simulación. Compilar una expresión en ExprTk significa prepararla en memoria; no implica generar y compilar un archivo Fortran por cada fórmula.
Paquete e instalación
Descargar y ejecutar el instalador de SummaPack:
curl -fsSLO https://www.simusol.org/downloads/installsumma.sh
sh installsumma.sh exprtk
El instalador permite elegir el formato adecuado para el sistema e instala el paquete libexprtk-dev. Se usa la misma orden aunque SummaPack ya esté instalado.
| Contenido del paquete | Para qué sirve |
|---|---|
exprtk.hpp |
Cabecera que incluye el programa C++; contiene la implementación. |
exprtk.pc |
Información para localizar la cabecera mediante pkg-config. |
| Licencia MIT y datos del paquete | Autoría y condiciones de distribución. |
Es una biblioteca de cabecera: no se enlaza una biblioteca separada libexprtk.so y este paquete no instala un comando exprtk. Para incorporarla a un programa propio se necesita un compilador C++. Los paquetes binarios de Calcula que ya la incorporan pueden evaluar fórmulas sin que el usuario compile código C++.
| Descarga | Contenido |
|---|---|
| Paquetes de Simusol | DEB, RPM, TGZ y fuentes del empaquetado. |
| Biblioteca original | Código y ejemplos mantenidos por Arash Partow. |
| Repositorio original | Desarrollo y documentación de referencia. |
Uso con Siru, Calcula y Tabular
| Programa | Relación con ExprTk |
|---|---|
| Siru | Lee el problema .ds, prepara las ecuaciones y se las entrega a Calcula. |
| Calcula | Su módulo dinámico utiliza ExprTk para evaluar las expresiones mientras busca una solución. |
| Tabular | Permite usar expresiones y proporciona interpolación de tablas; la integración agrega funciones de consulta de tablas a las fórmulas. |
| Slex | Reconoce la estructura de los archivos; la evaluación matemática corresponde a ExprTk. |
En los .ds, escribir la multiplicación con * y las potencias con ^: por ejemplo, 2*(X+1) o X^2. También se pueden usar expresiones como sin(T) e if(T<1,0,1). El lenguaje admitido por cada programa depende de su integración; la biblioteca original ofrece más posibilidades que las expuestas en un archivo .ds.
Expresiones o funciones en Fortran
Podemos escribir una fórmula directamente para ExprTk o implementar una función en Fortran y llamarla desde las ecuaciones. Ambas opciones pueden combinarse en el mismo problema.
| Opción | Uso |
|---|---|
| Expresión de ExprTk | Escribir la fórmula en el .ds, sin un archivo de código adicional. |
| Función Fortran | Reutilizar una rutina científica o desarrollar un cálculo propio en un .f90, declarado mediante EXTERNAL. |
Los ejemplos descargables resuelven el mismo problema, X^2=4, con semilla X=1 y RK=[-1]; la solución buscada es X≈2.
| Ejemplo | Archivos |
|---|---|
| Fórmula directa | expresion.ds |
| Función Fortran | fortran.ds y cuadrado.f90, en el mismo directorio. |
El segundo .ds declara:
FUNCTIONS
EXTERNAL FCUAD (1) cuadrado.f90
EQUATIONS
FCUAD(X)-4
La función recibe y devuelve valores de doble precisión. Calcula compila el archivo con gfortran, carga la función y la registra para que pueda llamarse desde las expresiones. Para ejecutar los ejemplos, con Siru y Calcula instalados y, para el segundo, gfortran disponible:
siru -nosimplot expresion.ds
CALCULA_EXTERNAS=1 siru -nosimplot fortran.ds
CALCULA_EXTERNAS=1 habilita la carga del código externo. El manual de Siru explica la declaración y los requisitos de las funciones Fortran.
Ejemplo para programas C++
expresion.cpp registra x, prepara x^2+1 una sola vez y evalúa con dos valores distintos. Con el paquete, un compilador C++ y pkg-config instalados:
c++ -std=c++11 expresion.cpp -o expresion $(pkg-config --cflags exprtk)
./expresion
Imprime 5 y 10. No necesita una opción -lexprtk.
Documentación y materiales
| Material | Contenido |
|---|---|
| Manual del paquete (PDF) | Instalación, uso desde C++ y documentación técnica del empaquetado de Simusol. |
| Documentación original | Sintaxis, operaciones, funciones y ejemplos de la biblioteca. |
| Fuentes y materiales históricos | Incluyen el directorio varios/, con los experimentos que se detallan debajo. |
| Directorio de las fuentes | Material conservado |
|---|---|
varios/6elementos/, varios/12elem/ |
Circuitos de ejemplo y diagramas de Dia. |
varios/exprtk2/, varios/exprtk3/ |
Prototipos de evaluación de ecuaciones y circuitos. |
varios/exprtkasades2015/ |
Material histórico de la integración de ExprTk para ASADES 2015. |
varios/gslode/, varios/psi2/, varios/swig/ |
Experimentos con GSL, ecuaciones e interfaces entre lenguajes. |
Estos materiales forman parte de la historia del desarrollo conjunto de Simusol y Psicro. Tienen sus propios archivos y, en algunos casos, sus propios Makefiles; no se construyen ni se instalan con libexprtk-dev. Para empezar a usar la integración actual, conviene seguir los ejemplos de esta página y los manuales de Siru y Calcula.