我需要一个C ++代数库才能在我的项目中使用。起初我以为我可以写一个,但后来我意识到我没有成功地重新发明轮子并浪费我宝贵的时间。
对于算术问题,我发现了GMP库(你知道,对于无限的算术计算),以及用于其他类型任务的工具(标准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等等...
谢谢您的帮助。
答案 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的GUI应用程序。这是一个非常强大的工具,您应该尝试一下。
答案 1 :(得分:0)
我使用LAPACK作为我的硕士论文程序进行3D代数计算。