如何加快NIntegrate计算的速度?

时间:2018-06-19 14:02:11

标签: plot wolfram-mathematica numerical-integration

我想画一个定积分

myIntegral[x_] := NIntegrate[Sqrt[(a - b)^2 + (c - d)^2]/ (a - b), {a, 0, x}, {b, x, 1}, {c, 0, 1}, {d, 0, 1}]
Plot[myIntegral[x], {x, 0, 1}]

我正在使用Mathematica 11.3。当我评估代码时,Mathematica会立即发出一些警告,提示数值积分收敛太慢,然后似乎卡在了计算中。 我尝试了NIntegrate的某些选项,例如建议的here,但没有成功。 有没有办法在可接受的时间内(例如几分钟)获得Plot的结果?

1 个答案:

答案 0 :(得分:0)

它在Integrate的范围内。

Assuming[0<x<1,
 Simplify[
   Integrate[Sqrt[(a-b)^2 + (c-d)^2]/(a-b), {a,0,x}, {b,x,1}, {c,0,1}, {d,0,1}]]]

给你

(-11*Sqrt[2] + 11*Sqrt[2+(-2+x)*x] + x*(-8-7*Sqrt[2+(-2+x)*x] + 13*Sqrt[1+x^2] +
 2*x*(6-3*Sqrt[2+(-2+x)*x] + x*(-4+2*x + Sqrt[2+(-2+x)*x] - Sqrt[1+x^2]))) +
 18*x^2*ArcCoth[Sqrt[2+(-2+x)*x]] + 9*ArcSinh[1] - 3*ArcSinh[1-x] - 3*ArcSinh[x] +
 6*Log[1-x] + 9*x*Log[-1+Sqrt[2+(-2+x)*x]] + 3*((-2+x)*Log[1+Sqrt[2+(-2+x)*x]] -
 4*x*Log[-(((-1+x)*(1 + Sqrt[1+x^2]))/x)] + x^3*(Log[2+x^2+2*Sqrt[1+x^2]] +
 2*Log[(1-x)/(x+x*Sqrt[2-2*x+x^2])])))/36

与绘制成千上万个单独的NIntegrate

相比,这应该更快。
相关问题