2012-03-06 23 views
2

如何計算Mathematica中數值的二重積分?如何在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

可能(近)重複[如何在MATLAB中計算二次積分的數值?](http://stackoverflow.com/questions/9554617/how-to-calculate-the-double-integral-numerically-in- matlab) – 2012-03-06 14:28:05

+0

Mathematica問題如何成爲Matlab問題的一個騙局?這將像Java問題和C#問題。 – Verbeia 2012-03-10 21:51:18

+0

@Verbeia你有一點,但OP問如何在兩種語言中接近相同的積分。 – rcollyer 2012-03-11 02:50:24

回答

4

兩件事情得到更好的反應了過來。首先,Integrate接受多個「迭代」,即{x, x1, x2},所以你可以指定一個多重積分不嵌套它們,如下

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

在由y == xx == 0x == 1界三角形集成x y。請注意,限制的順序是從外部到內部,因此整合是從右向左進行的。然後,你的積分變爲

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的具有多個數字的當量與它的標準算法,如NSolveNDSolveNSum,和NIntegrate。他們都可以通過領先的N進行識別,這本身也是function。這些功能的好處在於它們具有與其分析等同的簽名。所以,數值積分你積分,你只需改變IntegrateNIntegrate,如下

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}] 

這給27.4182,由tkott指出,但沒有產生任何警告。

+0

我採取了簡單的方法:)。至少我得到了正確的答案! – tkott 2012-03-06 15:34:54

+0

非常感謝! – h02h001 2012-03-07 13:24:42

1

如果您正在尋找數值積分在數學的東西,你應該使用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/

+0

非常感謝! – h02h001 2012-03-07 13:24:28