我有一个有无数项的辛多项式。我想把这个公式简化一下。然而,由于它有大量的项,并且多项式被展开,所以向下的运算比最优的要多。具体地说,通过将某些项组合在一起,我们可以消除一些操作。例如,考虑以下等式:
x^2y^2 + x^2y + x^2 + 1
如果我对此进行lambdizing,那么,如果x
和y
是长度为N的1Dnp.array
,那么将有4个元素的平方运算、2个元素的乘法运算和3个元素的加法运算,从而产生大约9*N的运算。你知道吗
奥托,通过做一点代数,我们得出:
x^2(y^2 + y + 1) + 1
通过对等推理,这个公式只涉及6*N运算。如果我有一个更大更复杂的公式,差别可能会很大。你知道吗
在任何情况下,我都不需要找到使性能最大化的表示法,但是很明显,一个小的术语分组至少可以提高性能。你知道吗
在lambdafing时,如何进行这种“术语分组”以实现更有效的sympy
公式表示?你知道吗
您可以按常用符号对术语进行分组,并对它们使用
horner
:最后我用了
sympy.collect
。如果方程没有太多的变量,就可以简单地强制所有的组合,并递归到“收集”项中。你知道吗这是我想出的密码。可能还有很多改进的空间:
rcollect_best
将其转换为(count\u ops=136):(计数=68):
是7个变量的5次多项式。运行时间大约是10到15分钟,并且会以指数级的速度增长,所以我不建议对任何比这个要求更高的东西使用这个。我相信有一些基本的改进可以修复超指数增长,但这解决了我的问题,所以我现在兑现。:)
相关问题 更多 >
编程相关推荐