c++ - C++ 代数库

标签 c++ algebra

我需要一个 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”(计算机代数系统)。我可以建议你们两个:

吉纳克 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 应用程序。这是一个非常强大的工具,您应该试一试。

关于c++ - C++ 代数库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772447/

相关文章:

c++ - 从<iostream.h> 更改为<iostream> 会导致缓冲区溢出吗?

c++ - 编译 Boost.Asio 示例代码时出错

java - 用于查找具有任意数量变量的任意数量线性方程的任意解的库

java - 在我的案例中,我可以在不循环遍历所有前面元素的情况下计算一个元素吗(参见问题正文)?

派生参数化构造函数的 C++ 设置值

c++ - auto_ptr、immediate get() 和 release()——有用吗?

c++ - 使用 Eclipse 创建动态加载的 Linux 库

javascript - 以代数方式转换 javascript

java - 尝试在java中检查另一个数字的倍数

java - 线相交方法无法正常工作