用于操纵多元多项式的库

Spi*_*ike 8 python math matlab numpy scipy

我需要编写一些代码来处理生成和操作多元多项式.我将用简化的例子概述我的任务.

假设我有三个表达式:2x ^ 2,3y + 1和1z.然后我需要将这些相乘,这将给我6x ^ 2yz + 2x ^ 2z.然后我想找到关于x,y和z的这个表达式的偏导数.这将给我12xyz + 4xz,6x ^ 2z和6x ^ 2y + 2x ^ 2.

我的问题涉及对包含数千个变量的表达式进行这样的简单操作,我需要一种简单的方法来系统地执行此操作.我真的很想使用python,因为我已经使用numpy/scipy/matplotlib完成了许多与项目相关的功能,但如果有另一种语言的强大工具箱,我也可以使用它.我正在做大学研究,所以我也愿意使用Matlab.

我还没有找到任何能够轻松地为我做这件事的好的python库,理想情况下我想要类似于可以在多维多项式上工作的scipy多项式例程.有没有人知道一个好的库,似乎适合这个问题,并很容易集成到已有的python代码?

谢谢!

跟进:我花了几天时间与sympy一起工作,结果很容易使用.但是,对于我正在处理的问题的大小来说,这很慢,所以我现在将探索matlab.为了使用小样本量对速度进行极其粗略的估计,计算包含250个变量的2阶多项式的每个偏导数花费大约5秒.

跟进#2:当我还在处理这个问题时,我可能应该已经做到了这一点,但我不妨让大家都知道matlab符号库在速度上非常具有可比性.换句话说,它对于大型计算来说是非常慢的.这两个库都非常容易使用,因此对于小型计算,我强烈推荐.

为了解决我的问题,我手动计算了渐变,简化了它们,然后使用我发现的模式来硬编码我的代码中的一些值.这是更多的工作,但使我的代码指数更快,最终可用.

Gar*_*err 9

Sympy非常适合:http://code.google.com/p/sympy/

文档:http://docs.sympy.org/

从教程中区分的示例:http://docs.sympy.org/tutorial.html#differentiation

import sympy

x, y, z = sympy.symbols('xyz')

p1 = 2*x*x
p2 = 3*y + 1
p3 = z

p4 = p1*p2*p3

print p4

print p4.diff(x)
print p4.diff(y)
print p4.diff(z)
Run Code Online (Sandbox Code Playgroud)

输出:

2*z*x**2*(1 + 3*y)
4*x*z*(1 + 3*y)
6*z*x**2
2*x**2*(1 + 3*y)
Run Code Online (Sandbox Code Playgroud)