Библиотека алгебры для переполнения стека

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

Для арифметических задач я нашел GMP Library (вы знаете, для неограниченных арифметических вычислений) и инструменты для других задач (стандартной библиотеки C ++ казалось вполне достаточно для генерации псевдослучайных чисел). Однако я не смог найти подходящего для алгебраических работ.

Существуют библиотеки линейной алгебры (например, Armadillo), но я не уверен, что мне нужна такая библиотека. Я хочу обобщить свои потребности.

#include <string>
#include <somelibrary.h>

int main(){
std::string str = "3*x^3+2*x^2+x+sqrt(x)*x^(1/3)";
algebraic_expression* exp = new algebraic_expression(str);
}

Я хочу иметь дерево с таким выражением. Допустим, он вернет массив std :: vector или C style с некоторой информацией. Например (с учетом приведенного выше примера) exp [0] будет «3 * x ^ 3», или может быть exp [0] [«base»] = «x».

И зачем мне это? На самом деле я могу делать подобные вещи с помощью RegEx, но иногда я не могу справиться с этим, например, 3 * x ^ 0 это просто 3, я не могу напечатать 3 * x ^ 0, потому что это бессмысленно, я хочу иметь 3 (так же, как 3 * х ^ 1 — это 3 * х). Или (3-3) * 5 * 2 вернет 0 и т. Д.

Спасибо за помощь.

1

Решение

Вы должны искать «CAS» (система компьютерной алгебры). Я могу предложить вам два:

Ginac http://www.ginac.de/

GIAC: http://www-fourier.ujf-grenoble.fr/~parisse/giac.html

Пример программы с Giac: http://www-fourier.ujf-grenoble.fr/~parisse/giac_us.html#First%20example

Giac также поставляется с приложением с графическим интерфейсом под названием XCAS. Это очень мощный инструмент, вы должны попробовать.

1

Другие решения

Я использовал LAPACK для своей магистерской программы по вычислениям трехмерной алгебры.

0