2013-02-08 4 views
1

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

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

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

#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 с некоторой информацией. Например (с учетом вышеприведенного примера) exp [0] будет «3 * x^3», или, может быть, exp [0] ["base"] = "x".

И зачем мне это нужно? На самом деле я могу делать подобные вещи с помощью RegEx, но иногда я не могу справиться с ним, например, 3 * x^0 просто 3, я не могу напечатать 3 * x^0, потому что это бессмысленно, я хочу иметь 3 (точно так же 3 * x^1 - 3 * x). Или (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 также поставляется с приложением под названием GUI XCAS. Это очень мощный инструмент, который вы должны попробовать.

+0

Это именно то, что я пытался найти, спасибо за термин «система компьютерной алгебры» тоже. –