1

我有多项式系统,相当简单的多项式表达式,但需要很长时间才能优化我的手。表达式被分组在集合中,并且在给定的集合中,在几个变量中有共同的术语。

我想知道是否有一个计算机代数系统,例如 Mathematica、Matlab 或 sympy,它可以用常用项优化多个多项式,以最大限度地减少运算次数。如果这样的系统能够最大限度地减少中间项的数量以减少寄存器的数量,那也是很好的。

如果这样的系统不存在,我将自己做,使用 Python 符号代数 Sympy。如果您正在开发此类软件包或有兴趣开发或使用其中一个,请告诉我。

这是一个虚构的例子

x0 = ((t - q*A)*x + B)*y
y0 = ((t - q*A)*y + B)*z
z0 = ((t - q*A)*z + B)*x

所以你显然可以考虑 (t - qA) 项。现在,如果您使用常用术语的各种组合使术语数量非常大,则很难手动完成。我的方程最多涉及 40 个项,集合的大小约为 20。希望对您有所帮助

谢谢

4

4 回答 4

1

sympy是您要找的吗我确实相信它支持多项式,尽管我不知道它是否支持您可能想要的所有功能(不过,调整它以添加您认为它可能缺少的东西必须比从头开始编写自己的更容易;-) .

于 2009-11-15T00:15:04.663 回答
1

你考虑过千里马吗?

它是一个令人印象深刻的符号计算包,它是免费的、开源的,并且拥有一个强大而活跃的社区,在处理非显而易见的公式时可以提供有价值的帮助。它适用于所有三个主要操作系统,并具有预编译的 Windows 二进制文件。

您有各种可用于表达式和方程组(例如您的)的代数操作命令:expand、factor、simplified、ratsimp、linsolve 等。

这个页面(Maxima for Symbolic Computation)应该让你开始——下载、安装、几个例子,然后指出额外的资源来指导你,包括快速的命令参考/备忘单,以及一些编写你自己的指南脚本。

于 2010-02-25T10:44:44.077 回答
1

Mathomatic 可能是您正在寻找的轻量级解决方案。看看:http:www.mathomatic.org

它使用所有常用运算符进行简单代数,能够简化符号表达式,求解变量和方程组。

它没有编程能力。您可以构建一个独立的应用程序,或者以库和头文件的形式使用 API 将其合并到 C、C++ 或 Objective-C 中,或者您可以从您提供命令行和环境的应用程序中启动该应用程序。

看看 NSTask,它还允许将标准输入和标准输出通过管道传输到您自己的应用程序中的数据流。

Mathomatic 还能够以 java、python 或 maxima 格式保存生成的表达式,以包含在这些系统的程序代码中。

于 2010-12-27T21:38:20.017 回答
0

Mathematica 当然可以对多项式方程组(例如您的)进行各种转换,其中一些转换可能是减少项的数量。这是否是您的正确答案值得商榷,因为您似乎没有可用的副本。我希望 Maple 和大多数其他 CAS 也是如此。

但你提到

减少寄存器数量

表明您实际上是在尝试进行一些数据流分析以进行编译。您可能还想查看有关该主题的文献。其中一些文献确实提到了表达式的类似计算机代数的转换。

于 2010-02-25T10:53:14.763 回答