Estoy buscando una buena fuente abierta Math Library que puede hacer cosas como:OpenSouce C/C++ analizador de expresiones matemáticas Biblioteca
- Analizar matemáticas. expresiones "1 + 1 * (3/5)"
- Integración
¿Alguien sabe algo como esto?
Estoy buscando una buena fuente abierta Math Library que puede hacer cosas como:OpenSouce C/C++ analizador de expresiones matemáticas Biblioteca
¿Alguien sabe algo como esto?
Octave puede hacer esto y se puede llamar desde within a C++ program. Incluso puede llamar al código de C++ desde la octava fácilmente usando SWIG para generar la interfaz.
Otro enfoque es incrustar un lenguaje interpretado en su aplicación y usar el analizador matemático de ese lenguaje.
LUA se está convirtiendo en popular para esto - ver How to embed lua in c++ via SWIG
intentar mi biblioteca ae, que se basa en Lua. Vea también Evaluating Mathematical Expressions using Lua
Tenía una necesidad de programación similar donde usé el Shunting yard algorithm. Útil para analizar infix notation como usted.
Siempre he usado muParser, escrito en C++, para el análisis. No vas a obtener una biblioteca que pueda hacer integración; simplemente demasiado difícil sin una biblioteca seria de peso pesado. Los integradores simbólicos de código abierto como Maxima, Octave, etc. existen, pero son difíciles de interactuar, y esa funcionalidad no se puede separar fácilmente del resto del proyecto.
También hay GNU libmatheval, que hace la evaluación y la diferenciación. La integración es un problema mucho harder, incluso para integrandos de aspecto inocente.
+1, no me había encontrado antes y parece bastante interesante. – Flexo
Hay una biblioteca MathPresso que es un analizador y también un compilador JIT de expresiones matemáticas, lo uso cuando el rendimiento es importante.
Algunas pruebas: evaluando la expresión "x/y + (x * x * y + 18.243 * y)/z" - donde las variables son números de coma flotante de doble precisión.
el análisis y la integración son bastante diferentes, dependiendo de la complejidad de la integración necesita –
Algunos libre Las implementaciones Java y C++ del algoritmo de yarda de derivación para convertir expresiones a nomenclatura polaca inversa y luego evaluarlas se pueden encontrar aquí: http://www.technical-recipes.com/2011/a-mathematical-expression-parser-in-java -and-cpp/ – AndyUK
ejemplo de análisis de expresiones matemáticas: https: // stack overflow.com/a/32853177 –