考虑函数
y=1/((1-x^5)(1-x^7)(1-x^11))
WolframAlpha 在几秒钟内计算出 MacLaurin 级数展开式的前 1000 个元素:
https ://www.wolframalpha.com/input/?i=maclaurin+series+1%2F%28%281-x%5E5%29%281- x%5E7%29%281-x%5E11%29%29
出于好奇,我编写了一个非常幼稚的 java 程序来使用 BigInteger 来处理多项式系数。在伪代码中,它将类似于:
BigInt next=1;
BigInt factorial=1;
while(true){
function=function.differentiate();
factorial*=++next;
print("Next coefficient is: " + function(0)/factorial);
}
该程序在计算前七个左右的系数后因 java.lang.outofmemory 异常而崩溃,因为分数的分子和分母变成了非常长的多项式。假设我的代码效率低下,但看起来 Wolfram 并没有使用他们在第一年的微积分课上向您展示的相同技术。
问题是:Wolfram 使用什么?
作为比较,Wolfram 仅计算同一函数的十次导数比获得多项式的前 1000 项所需的时间要多得多,如果简单地完成,则需要对函数进行 1000 次微分。
https://www.wolframalpha.com/input/?i=tenth+derivative+1%2F%28%281-x%5E5%29%281-x%5E7%29%281-x%5E11%29%29