Символическое вычисление в С++

Мне нужно сделать аналитическую интеграцию на С++. Например, я должен интегрировать выражения следующим образом: exp[I(x-y)], I - это мнимое число.

Как это сделать в С++?

Я попробовал GiNaC, но он может просто интегрировать многочлены. Я также попробовал SymbolicС++. Он может интегрировать функции типа sine, cosine или exp(x) и ln(x), но это не очень мощно. Например, он не может интегрировать x*ln(x), который можно легко получить с помощью Mathematica или путем интеграции по частям.

Существуют ли какие-либо другие инструменты или библиотеки, которые могут выполнять символические вычисления, такие как аналитическая интеграция в С++?

Ответ 1

Если вам нужно сделать символическую интеграцию, то вы, вероятно, не получите ничего быстрее, чем запустили его в математике или максимумах - они уже написаны (что-то вроде) С++. Поэтому, если ваши уравнения не имеют очень специфических формул, которые вы можете использовать таким образом, что Mathematica или Maxima не могут тогда вам, вероятно, не повезло - и по крайней мере вы не собираетесь получать такие пользовательские манипуляции с готовая библиотека.

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

Ответ 2

Другие библиотеки С++, которые я знаю о символических вычислениях,

Если я не ошибаюсь, SymEngine еще не поддерживает интеграцию; однако, Piranha делает. документация для Piranha в настоящее время несколько ограничена и находится в разработке, но вы можете увидеть интеграционную функцию здесь. Обратите внимание, что вторая ссылка использует синтаксис для Python-оболочки Piranha. Тем не менее, Piranha "является библиотекой компьютерной алгебры для символического манипулирования разреженными многомерными многочленами и другими тесно связанными символическими объектами (такими как серии Пуассона)", поэтому я не думаю, что он может интегрировать конкретные функции, в которых вы можете быть заинтересованы.

Хотя это не С++, вы также можете быть заинтересованы в SymPy для Python, который может выполнять некоторые из более сложных символических интеграций, которые могут вас заинтересовать. Документация для интеграции SymPy - здесь.