Какая хорошая библиотека для анализа математических выражений в java?

Я разработчик Android и как часть своего следующего приложения мне нужно будет оценить большое количество пользовательских математических выражений и уравнений. Я ищу хорошую библиотеку java, которая легка и может оценивать математические выражения с использованием пользовательских переменных и констант, триггерных и экспоненциальных функций и т.д.

Я огляделся и Jep, кажется, популярен, но мне хотелось бы услышать больше предложений, особенно от людей, которые раньше использовали эти библиотеки.

Ответ 1

JEval - хорошая альтернатива. Я отказался от Jep из-за того, что он стал коммерческим. Единственная проблема заключается в том, что JEval, кажется, немного неактивен на данный момент (последний выпуск в 2008 году).

Ответ 2

Я написал простой, но способный Math Expression Evaluator, который является бесплатным и открытым исходным кодом. Главное преимущество - быть быстрым и крошечным - оба хороши с ручными устройствами. Если это соответствует вашим потребностям, вы можете его использовать.

Основные характеристики:

  • Основные математические операторы с предполагаемым приоритетом (^ * × ·/÷% + -).
  • Явный приоритет с круглыми скобками.
  • Неявное умножение заключенных в скобки подвыражений.
  • Правильная правая ассоциативность экспонент (оператор мощности).
  • Прямая поддержка шестнадцатеричных чисел с префиксом 0x.
  • Константы и переменные.
  • Расширяемые операторы.
  • Расширяемые функции.
  • 20 KiB footprint.

Пример

MathEval math=new MathEval();

math.setVariable("Top",    5);
math.setVariable("Left",  20);
math.setVariable("Bottom",15);
math.setVariable("Right", 60);

System.out.println("Middle: "+math.evaluate("floor((Right+1-Left)/2)"));

Ответ 3

Попробуйте https://code.google.com/p/expressionoasis/. Это расширяемая структура оценки выражений и будет соответствовать таким требованиям.

Ответ 4

Это не соответствует моим начальным условиям, но я нашел замечательный парсер, написанный на С++. Я пытаюсь выяснить поддержку встроенного кода Android, чтобы узнать, могу ли я его использовать. Это именно то, что мне нужно.

Вот документация для проекта.
http://www.codeproject.com/KB/recipes/MathieuMathParser.aspx

Ответ 5

Существует новый коммерческий инструмент formula4j, который может представлять интерес для некоторых.