我需要一个 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,等等...
感谢您的帮助。
最佳答案
您应该寻找“CAS”(计算机代数系统)。我可以建议你们两个:
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 应用程序。这是一个非常强大的工具,您应该试一试。
关于c++ - C++ 代数库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772447/