Я ищу хорошую математическую библиотеку с открытым исходным кодом, которая может делать такие вещи, как:
- Анализ математики. выражения "1 + 1 * (3/5)"
- Интеграция
Кто-нибудь знает что-то вроде этого?
Я ищу хорошую математическую библиотеку с открытым исходным кодом, которая может делать такие вещи, как:
Кто-нибудь знает что-то вроде этого?
Там также GNU libmatheval, который выполняет оценку и дифференциацию. Интеграция - это проблема более трудная, даже для невинно выглядящих подынтеграв.
Octave может это сделать и может быть вызван из в пределах С++. Вы можете даже легко называть код С++ из октавы, используя SWIG для создания интерфейса.
Я всегда использовал muParser, написанный на С++, для синтаксического анализа. Вы не получите библиотеку, которая может интегрировать; просто слишком сложно без серьезной тяжеловесной библиотеки. Существуют символические интеграторы с открытым исходным кодом, такие как Maxima, Octave и т.д., Но с ними трудно взаимодействовать, и эта функциональность не может быть легко отделена от остальной части проекта.
Попробуйте мою библиотеку ae, которая основана на Lua. См. Также Оценка математических выражений с использованием Lua
Другой подход заключается в том, чтобы внедрить интерпретируемый язык в ваше приложение и использовать парсер langauge maths.
LUA становится для этого популярным - см. Как вставить lua в С++ с помощью SWIG
У меня была аналогичная потребность в программировании, когда я использовал алгоритм Shunting yard. Полезно для синтаксического анализа infix нотации, как и у вас.
Там MathPresso библиотека, которая является парсером, а также JIT-компилятор математических выражений, я использую его, когда производительность важна.
Некоторые тесты: оценивая выражение "x/y + (x * x * y + 18.243 * y)/z" - где переменные представляют собой числа с плавающей точкой двойной точности.