Можно ли выполнить этот интеграл численно в Matlab или Mathematica?

Я хочу иметь возможность выполнить приведенный ниже интеграл полностью численно.

уравнение

где n, epsilon и a, b и betaявляются константами, которые для простоты можно установить до 1.

Интеграл по x можно выполнить аналитически вручную или с помощью Mathematica, а затем интеграл по y можно выполнить численно с помощью NIntegrate, но эти два метода дают разные ответы.

Аналитически:

In[160]:= ex := 2 (1 - Cos[x])

In[149]:= ey := 2 (1 - Cos[y])

In[161]:= kx := 1/(1 + Exp[ex])

In[151]:= ky := 1/(1 + Exp[ey])

In[162]:= Fn1 := 1/(2 \[Pi]) ((Cos[(x + y)/2])^2)/(ex - ey)

In[163]:= Integrate[Fn1, {x, -Pi, Pi}]

Out[163]= -(1/(4 \[Pi]))
 If[Re[y] >= \[Pi] || \[Pi] + Re[y] <= 0 || 
   y \[NotElement] Reals, \[Pi] Cos[y] - Log[-Cos[y/2]] Sin[y] + 
   Log[Cos[y/2]] Sin[y], 
  Integrate[Cos[(x + y)/2]^2/(Cos[x] - Cos[y]), {x, -\[Pi], \[Pi]}, 
   Assumptions -> ! (Re[y] >= \[Pi] || \[Pi] + Re[y] <= 0 || 
       y \[NotElement] Reals)]]

In[164]:= Fn2 := -1/(
  4 \[Pi]) ((\[Pi] Cos[y] - Log[-Cos[y/2]] Sin[y] + 
     Log[Cos[y/2]] Sin[y]) (1 - ky) ky )/(2 \[Pi])

In[165]:= NIntegrate[Fn2, {y, -Pi, Pi}]

Out[165]= -0.0160323 - 2.23302*10^-15 I

Численный метод 1:

In[107]:= Fn4 := 
 1/(4 \[Pi]^2) ((Cos[(x + y)/2])^2) (1 - ky) ky/(ex - ey)

In[109]:= NIntegrate[Fn4, {x, -Pi, Pi}, {y, -Pi, Pi}]

During evaluation of In[109]:= NIntegrate::slwcon: Numerical integration converging too slowly; suspect one of the following: singularity, value of the integration is 0, highly oscillatory integrand, or WorkingPrecision too small. >>

During evaluation of In[109]:= NIntegrate::ncvb: NIntegrate failed to converge to prescribed accuracy after 18 recursive bisections in x near {x,y} = {0.0000202323,2.16219}. NIntegrate obtained 132827.66472461013` and 19442.543606302774` for the integral and error estimates. >>

Out[109]= 132828.

Число 2:

In[113]:= delta = .001;
pw[x_, y_] := Piecewise[{{1, Abs[Abs[x] - Abs[y]] > delta}}, 0]

In[116]:= Fn5 := (Fn4)*pw[Cos[x], Cos[y]]

In[131]:= NIntegrate[Fn5, {x, -Pi, Pi}, {y, -Pi, Pi}]

During evaluation of In[131]:= NIntegrate::slwcon: Numerical integration converging too slowly; suspect one of the following: singularity, value of the integration is 0, highly oscillatory integrand, or WorkingPrecision too small. >>

During evaluation of In[131]:= NIntegrate::eincr: The global error of the strategy GlobalAdaptive has increased more than 2000 times. The global error is expected to decrease monotonically after a number of integrand evaluations. Suspect one of the following: the working precision is insufficient for the specified precision goal; the integrand is highly oscillatory or it is not a (piecewise) smooth function; or the true value of the integral is 0. Increasing the value of the GlobalAdaptive option MaxErrorIncreases might lead to a convergent numerical integration. NIntegrate obtained 0.013006903336304906` and 0.0006852739534086272` for the integral and error estimates. >>

Out[131]= 0.0130069

Таким образом, ни один из численных методов не дает -0.0160323. Я понимаю, почему - первый метод имеет проблемы с бесконечностями, вызванными знаменателем, а второй метод эффективно удаляет часть интеграла, вызывающую проблемы. Но я хотел бы иметь возможность интегрировать другой интеграл (более сложный по сравнению с x, y и z), который нельзя упростить аналитически. Приведенный выше интеграл дает мне возможность протестировать любой новый метод, поскольку я знаю, каким должен быть ответ.


person Calvin    schedule 17.08.2011    source источник
comment
не имеет прямого отношения к вопросу, но было бы полезно (т. е. это сэкономило бы вам некоторые усилия), если бы вы научились определять функции в математике   -  person acl    schedule 18.08.2011
comment
В вашем первом подходе вы, кажется, вырезали и вставили условный результат из аналитического интеграла в свой числовой. Плохая идея, потому что условия явно исключают интегрирование y в диапазоне от -pi до pi.   -  person Daniel Lichtblau    schedule 18.08.2011
comment
возможный дубликат stackoverflow.com/questions/7078836/?   -  person Verbeia    schedule 18.08.2011
comment
@Verbeia нет, это еще один интеграл (который не исчезает)   -  person acl    schedule 18.08.2011
comment
@Daniel, если я использую PrincipalValue ->True, условие состоит в том, что $y$ находится между $-\pi$ и $\pi$, уместно ли это использовать?   -  person Calvin    schedule 18.08.2011
comment
Числитель должен быть (1-n(y)) n(y) или (1-n(x)) n(y)?   -  person rcollyer    schedule 18.08.2011
comment
@rcollyer это похоже на ограничение для переходов с твердыми частицами (в этом случае это будет так, как вы говорите), не так ли ...   -  person acl    schedule 18.08.2011
comment
Ух ты, все это время я видел n(x) со знаком - вместо +. Удивительный! К счастью, это не повлияло на мой ответ... Значит, они фермионы...   -  person acl    schedule 18.08.2011


Ответы (1)


Если я не записал интеграл неправильно, это должно сработать:

n[x_] := 1/(1 + Exp[eps[x]])
eps[x_] := 2(1 - Cos[x])
.25/(2*Pi)^2*NIntegrate[
    Cos[(x + y)/
     2]^2 ((1 - n[y]) n[y] - (1 - n[x]) n[x])/(Cos[y] - Cos[x]),
    {x, -Pi, Pi},
    {y, -Pi, Pi},
    Exclusions -> {Cos[x] == Cos[y]}
  ]

даю 0.0130098.

Хорошо, я думаю, самый быстрый способ объяснить это так:

введите здесь описание изображения

переходя от первой ко второй строке первого уравнения, я только что переименовал y в x (область интегрирования симметрична, так что все в порядке). Затем я добавил два (эквивалентных) выражения для I, чтобы получить 2I, и я численно интегрировал это. Дело в том, что числитель и знаменатель обращаются в нуль в одних и тех же точках, поэтому на самом деле опция Exclusions не нужна. Обратите внимание, что в моем наброске метода выше я опустил 1/(4*Pi^2) для краткости (или из-за лени, в зависимости от точки зрения).

person acl    schedule 18.08.2011
comment
Это блестящая идея @acl ... Если я сделаю интеграл, я получу 0,0130098, а не 0,0170457, хотя сонливость тоже может быть фактором на моей стороне. - person Calvin; 18.08.2011
comment
@ Кальвин, нет, наверное, я как-то облажался. завтра еще раз посмотрю - person acl; 18.08.2011
comment
Я нашел это - я использовал свой собственный код, поэтому я пропустил, что ваш eps и знаменатель в 2 раза отличаются от моего. - person Calvin; 18.08.2011
comment
@ Кальвин, извините, вы правы! позвольте мне исправить это. ну, теперь они согласны. Итак, не по теме, но, по-видимому, это что-то, связанное с квадратной 2d-решеткой, бозонами и теорией возмущений первого порядка? - person acl; 18.08.2011
comment
+1 за интеграцию крутости. Не хочу портить приятную вечеринку, но не отдаляемся ли мы от Mathematica как от языка программирования? Все это, кажется, идет в направлении математики или физики SE. - person Sjoerd C. de Vries; 18.08.2011
comment
@acl Это теория возмущений первого порядка для одномерной системы фермионов. Спасибо за вашу помощь! - person Calvin; 19.08.2011
comment
@ Кальвин, нет проблем. забавно, я как раз сейчас пишу статью об этом (фермионы 1d)... - person acl; 19.08.2011