如何在Mathematica中数值计算双积分?

时间:2012-03-06 14:07:21

标签: wolfram-mathematica numerical-computing

如何在Mathematica中以数字方式计算双积分?

Integrate[Exp[-0.099308 s]
       * Integrate[Exp[0.041657423 u] Exp[-3.1413 s + 3.12 u]
             * ((u/(s - u))^(1/2) BesselI[1,2 (u (s - u))^(1/2)]
             + 0.293 BesselI[0,2 (u (s - u))^(1/2)]),{u,0,s}],{s,0,10}]

enter image description here

2 个答案:

答案 0 :(得分:4)

两件事。首先,Integrate接受多个“迭代器”,即{x, x1, x2},因此您可以指定多个积分而不嵌套它们,如下所示

Integrate[x y, {x, 0, 1}, {y, 0, x}]

x y整合到由y == xx == 0x == 1限定的三角形上。注意,限制的顺序,它们从外部到内部,因此集成从右到左执行。然后,你的积分变为

Integrate[Exp[-0.099308 s] Exp[0.041657423 u] Exp[-3.1413 s + 3.12 u]
   * ((u/(s - u))^(1/2) BesselI[1,2 (u (s - u))^(1/2)]
   + 0.293 BesselI[0,2 (u (s - u))^(1/2)]),
 {s,0,10}, {u,0,s}]

其次,Mathematica与其标准算法有许多数字等价物,如NSolveNDSolveNSumNIntegrate。它们都可以通过前导N识别,它本身也是function。关于这些函数的好处是它们具有与它们的分析等价物相同的签名。因此,要以数字方式整合积分,只需将Integrate更改为NIntegrate,如下所示

NIntegrate[Exp[-0.099308 s] Exp[0.041657423 u] Exp[-3.1413 s + 3.12 u]
   * ((u/(s - u))^(1/2) BesselI[1,2 (u (s - u))^(1/2)]
   + 0.293 BesselI[0,2 (u (s - u))^(1/2)]),
 {s,0,10}, {u,0,s}]
tkott所示,

提供27.4182,但未生成任何警告。

答案 1 :(得分:1)

如果您希望在Mathematica中以数字方式集成某些内容,则应使用NIntegrate。这将给出一个数值近似而不是定积分。

NIntegrate[ Exp[-0.099308*s]*
  NIntegrate[Exp[0.041657423*u]*(Exp[-3.1413*s + 3.12*u])*((u/(s - u))^(1/2)*
       BesselI[1, 2*(u*(s - u))^(1/2)] + 0.293*BesselI[0, 2*(u*(s - u))^(1/2)])
  , {u, 0, s}]
, {s, 0, 10}]

它抱怨是因为内部集成首先被评估,如果没有指定s就无法评估,但是给出了

27.4182

不知道这是否正确!

BTW:您可能会在https://mathematica.stackexchange.com/

获得更好的回复