EXPRTK

SimuSol

Psicro

Calcula

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.