1

我需要一个 C++ 代数库才能在我的项目中使用。一开始我以为我可以写一个,但后来我意识到我试图重新发明轮子并没有成功,浪费了我宝贵的时间。

对于算术问题,我找到了 GMP 库(你知道,用于无限算术计算)和用于其他类型任务的工具(标准 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 样式数组。例如(考虑上面的例子)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,等等...

谢谢您的帮助。

4

2 回答 2

1

You should look for 'CAS' (Computer Algebra System) . I can suggest you two:

Ginac http://www.ginac.de/

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

An example program with Giac: http://www-fourier.ujf-grenoble.fr/~parisse/giac_us.html#First%20example

Giac also comes with a GUI application called XCAS. It's a very powerful tool you should give it a try.

于 2013-02-08T12:35:55.260 回答
0

我在我的硕士论文程序中使用了 LAPACK 进行 3D 代数计算。

于 2013-04-08T20:43:36.683 回答