2010-11-01 2 views
28

Я ищу хороший открытый исходный код Math Library, которые могут делать такие вещи, как:OpenSouce C/C++ Math анализатор выражений Библиотеки

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

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

+1

выражения синтаксического анализа и интеграции, а разные, в зависимости от того, насколько сложной интеграции вам нужно –

+0

Некоторые бесплатно Реализации Java и C++ алгоритма Shunting Yard для преобразования выражений в обратную польскую нотацию, а затем их оценку можно найти здесь: http://www.technical-recipes.com/2011/a-matimate-expression-parser-in-java -and-cpp/ – AndyUK

+1

пример синтаксического анализа математических выражений: https: // stack overflow.com/a/32853177 –

ответ

5

Octave может это сделать и может называться от within a C++ program. Вы можете даже вызвать код C++ из октавы с помощью SWIG, чтобы сгенерировать интерфейс.

1

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

LUA становится популярным для этого - см How to embed lua in c++ via SWIG

3

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

7

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

+0

+1, я бы не встретил это раньше, и это выглядит довольно интересно. – Flexo

0

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

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

  • C++: 144.1 миллионы оценок в секунду
  • MathPresso: 133,8 миллионов оценок в секунду
Смежные вопросы