如果您对此进行评估
expr=E^((-(x-y)^4-(x3-y3)^4)/10^4)*
(f x+e x^2+(m+n x)x3-f y-e y^2-(m+n y)y3)*
((378(x-y)^2(f x+e x^2+(m+n x)x3-f y-e y^2-(m+n y)y3))/
(Pi(1/40+Sqrt[((x-y)^2+(x3-y3)^2)^3]))+
(378(x-y)(x3-y3)(h x+g x^2+(o+p x)x3-h y-g y^2-(o+p y)y3))/
(Pi(1/40+Sqrt[((x-y)^2+(x3-y3)^2)^3])))+
(h x+g x^2+(o+p x)x3-h y-g y^2-(o +p y) y3)*
((378(x-y)(x3-y3)(f x+e x^2+(m+n x)x3-f y-e y^2-(m+n y)y3))/
(Pi(1/40+Sqrt[((x-y)^2+(x3-y3)^2)^3]))+
(378 (x3 - y3)^2 (h x + g x^2 + (o + p x)x3-h y-g y^2-(o+p y)y3))/
(Pi(1/40+Sqrt[((x-y)^2+(x3-y3)^2)^3])));
list=List @@ Expand[expr]
然后你会得到一个包含 484 个表达式的列表,每个表达式的形式都与此非常相似
(378*f*h*x^3*x3)/(Pi*(1/40+Sqrt[(x^2+x3^2-2*x*y+y^2-2*x3*y3+y3^2)^3]))
请注意,您可以通过这种方式使用NIntegrate
f*h*NIntegrate[(378*x^3*x3)/(Pi*(1/40+Sqrt[(x^2+x3^2-2*x*y+y^2-2*x3*y3+y3^2)^3])),
{x,0,100},{y,0,100},{x3,0,1},{y3,0,1}]
但它给出了关于收敛性和准确性的警告和错误,几乎可以肯定是由于分母中的分数幂。
如果您能找到一种方法来提取与 x,y,x3,y3 无关的标量乘数,然后在没有警告和错误的情况下执行该积分并获得不是无穷大的准确结果,那么您也许可以执行这些积分并行并汇总结果。
一些被积函数是其他被积函数的标量倍数,如果您组合相似的被积函数,则可以将其减少到 300 个唯一被积函数。
我怀疑这是否会为您带来可接受的解决方案。
请仔细检查所有这些,确保没有任何错误。
编辑
由于独立于积分的变量似乎很容易与上述问题中的因变量分开,我认为这将允许并行NIntegrate
independentvars[z_] := (z/(z//.{e->1, f->1, g->1, h->1, m->1, n->1, o->1, p->1}))*
NIntegrate[(z//.{e->1, f->1, g->1, h->1, m->1, n->1, o->1, p->1}),
{x, 0, 100}, {y, 0, 100}, {x3, 0, 1}, {y3, 0, 1}]
Total[ParallelMap[independentvars, list]]
正如我之前提到的,分母中的分数幂会导致大量关于收敛失败的警告和错误。
您可以使用以下更简单的示例进行测试
expr = f x + f g x3 + o^2 x x3;
list = List @@ Expand[expr];
Total[ParallelMap[independentvars, list]]
立即返回
500000. f + 5000. f g + 250000. o^2
这是一种将独立符号变量拉到NIntegrate 之外的非常原始的方法。如果其中一个被积函数不是这种原始提取尝试不合适或失败的形式,则绝对不会发出警告。
可能有其他人在某处写过的更好的方法。如果有人能展示一个更好的方法来做到这一点,我将不胜感激。
如果 Wolfram 考虑将这样的内容合并到 NIntegrate 本身中,那可能会很好。