请考虑:
Clear[x]
expr = Sum[x^i, {i, 15}]^30;
CoefficientList[expr, x]; // Timing
Coefficient[Expand@expr, x, 234]; // Timing
Coefficient[expr, x, 234]; // Timing
{0.047,空}
{0.047,空}
{4.93,空}
帮助状态:
在最后一种情况下,为什么
Coefficient
需要这么慢是有原因的吗? 最佳答案
除非它绝对必要,否则Coefficient
将不会扩展。这确实可以避免内存爆炸。我相信从版本3开始就采用这种方式(我想我是在1995年左右开始从事此工作的)。
它也可以更快地避免扩展。这是一个简单的例子。
In[28]:= expr = Sum[x^i + y^j + z^k, {i, 15}, {j, 10}, {k, 20}]^20;
In[29]:= Coefficient[expr, x, 234]; // Timing
Out[29]= {0.81, Null}
但是,下一个似乎卡在了版本8中,并且在开发Mathematica(更改了
Expand
)的过程中至少花费了半分钟的时间。Coefficient[Expand[expr], x, 234]; // Timing
可能应该添加一些试探法来寻找不会爆炸的单变量。不过,这似乎不是一个高优先级的项目。
丹尼尔·里奇布劳
关于performance - 系数功能慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8243627/