Как вычислить числовой двойной интеграл в Mathematica? - PullRequest
2 голосов
/ 06 марта 2012

Как вычислить числовой двойной интеграл в 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 ]

4 голосов
/ 06 марта 2012

Две вещи. Прежде всего, Integrate принимает несколько «итераторов», т. Е. {x, x1, x2}, поэтому вы можете указывать множественный интеграл без их вложения, как показано ниже

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

объединяет x y по треугольнику, ограниченному y == x, x == 0 и x == 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 имеет ряд числовых эквивалентов своих стандартных алгоритмов, таких как NSolve, NDSolve, NSum и NIntegrate. Все они могут быть идентифицированы по ведущему N, который тоже является функцией . Приятно то, что эти функции имеют ту же сигнатуру, что и их аналитический эквивалент. Таким образом, чтобы численно интегрировать ваш интеграл, вы просто меняете 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}]

, что дает 27.4182, как отмечено tkott , но без каких-либо предупреждений.

1 голос
/ 06 марта 2012

Если вы хотите численно интегрировать что-то в 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

Не знаю, правильно это или нет!

Кстати: вы можете получить лучший ответ на https://mathematica.stackexchange.com/

...