the - Expresión matemática(cadena) para numerar en Java
mathparser c# (2)
Lancé un evaluador de expresiones basado en el algoritmo Shunting Yard de Dijkstra , bajo los términos de Apache License 2.0 :
Estoy tratando de encontrar algo como Java Embedding Plugin (JEP) que pueda evaluar una fórmula matemática (cadena) y devolver la respuesta.
Pero también debería calcular una variable, por ejemplo: (25 + 36 + x) * 2 = 25 debería dar: x = -11
Un poco como http://www.wolframalpha.com/ , pero no debería ser tan versátil, y debería funcionar fuera de línea.
Se prefiere el código abierto.
Lo necesito para mi pequeño proyecto de calculadora, http://sourceforge.net/projects/calex/ .
Esto se llama Arithmetic evaluation
. Una de las formas más fáciles de implementar esto es usando Edsger Dijkstra Shunting-yard_algorithm .
El algoritmo de yarda de derivación es un método para analizar ecuaciones matemáticas especificadas en notación infija. Se puede usar para generar resultados en notación polaca inversa (RPN) o como un árbol de sintaxis abstracta (AST). El algoritmo fue inventado por Edsger Dijkstra y se lo denominó el algoritmo "patio de maniobras" porque su funcionamiento se asemeja al de un patio de maniobras ferroviarias. Al igual que la evaluación de RPN, el algoritmo de yarda de derivación se basa en la pila. Las expresiones Infix son la forma de notación matemática a la que la mayoría de la gente está acostumbrada, por ejemplo 3 + 4 o 3 + 4 * (2-1). Para la conversión hay dos variables de texto (cadenas), la entrada y la salida. También hay una pila que mantiene a los operadores aún no agregados a la cola de salida. Para convertir, el programa lee cada símbolo en orden y hace algo basado en ese símbolo.
Pero he visto la solución exacta de lo que estás buscando en algún blog de usuario de , pero no recuerdo la dirección (era como ''código de monismo''). Era una clase ligera, que se podía usar en applets (también se podían definir constantes y restablecer valores).
Editar: lo encontré: http://tech.dolhub.com/Code/MathEval
Un evaluador matemático recursivo lineal
Este evaluador de expresiones matemáticas nació de la necesidad de contar con una solución eficiente y de tamaño pequeño que pudiera evaluar expresiones arbitrarias de manera razonablemente eficiente sin requerir precompilación. Necesitaba algo que hiciera matemáticas básicas con variables, expresiones como: "Top + 2", "Bottom-2" y "(derecha + 1-izquierda) / 2".
La investigación en Internet arrojó una cantidad de soluciones bastante buenas, todas las cuales giraron en torno a la creación de árboles de análisis (lo cual tiene sentido). El problema era que todos eran bastante voluminosos, y no podía permitirme agregar 100K al tamaño de mi applet solo para matemáticas. Entonces comencé a preguntarme acerca de una solución lineal recursiva al problema. El resultado final es una clase única de rendimiento aceptable sin dependencias externas, que pesa menos de 10 KiB.