有意思……其实以往也有人观察到过类似的现象。(Integrate的积分次序对计算速度造成了明显的影响。)但从来没有人仔细分析过类似的问题。这次借你这问题的机会稍微试着深入了下,结果发现,Integrate在以x, y, z序求解时之所以更快(注意……, {x, -\[Infinity], \[Infinity]}, {y, -\[Infinity], \[Infinity]}, {z, -\[Infinity], \[Infinity]}]其实先积的是z),是因为
Integrate的区域语法的内部实现,其实和我们手算的过程是一样的,只不过Integrate这个函数把这过程自动化了。后面的事就简单了:被积函数里面不含x和y,所以先把x和y积掉当然更快。至于我为什么知道Mathematica用的是这种算法嘛,是因为Wolfram在这个问题上手下留情了。这部分计算过程,是能用TraceInternal看到的:
Flatten[Trace[
Assuming[R > 0,
Integrate[z^2*Boole[x^2 + y^2 + z^2 <= R && x^2 + y^2 + z^2 <= 2*R*z], {z, -Infinity,
Infinity}, {y, -Infinity, Infinity}, {x, -Infinity, Infinity}]], Integrate[__], TraceInternal -> True]]


Flatten[Trace[
Integrate[z^2*Boole[x^2 + y^2 + z^2 <= 1 && x^2 + y^2 + z^2 <= 2*z], {x, -Infinity,
Infinity}, {y, -Infinity, Infinity},
{z, -Infinity, Infinity}], Integrate[__], TraceInternal -> True]]
