Подтвердить что ты не робот

OpenSouce C/С++ Математический анализатор выражений

Я ищу хорошую математическую библиотеку с открытым исходным кодом, которая может делать такие вещи, как:

  • Анализ математики. выражения "1 + 1 * (3/5)"
  • Интеграция

Кто-нибудь знает что-то вроде этого?

4b9b3361

Ответ 1

Там также GNU libmatheval, который выполняет оценку и дифференциацию. Интеграция - это проблема более трудная, даже для невинно выглядящих подынтеграв.

Ответ 2

Octave может это сделать и может быть вызван из в пределах С++.  Вы можете даже легко называть код С++ из октавы, используя SWIG для создания интерфейса.

Ответ 3

Я всегда использовал muParser, написанный на С++, для синтаксического анализа. Вы не получите библиотеку, которая может интегрировать; просто слишком сложно без серьезной тяжеловесной библиотеки. Существуют символические интеграторы с открытым исходным кодом, такие как Maxima, Octave и т.д., Но с ними трудно взаимодействовать, и эта функциональность не может быть легко отделена от остальной части проекта.

Ответ 5

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

LUA становится для этого популярным - см. Как вставить lua в С++ с помощью SWIG

Ответ 6

У меня была аналогичная потребность в программировании, когда я использовал алгоритм Shunting yard. Полезно для синтаксического анализа infix нотации, как и у вас.

Ответ 7

Там MathPresso библиотека, которая является парсером, а также JIT-компилятор математических выражений, я использую его, когда производительность важна.

Некоторые тесты: оценивая выражение "x/y + (x * x * y + 18.243 * y)/z" - где переменные представляют собой числа с плавающей точкой двойной точности.

  • Функция С++: 144,1 миллиона оценок в секунду
  • MathPresso: 133,8 миллиона оценок в секунду