Ошибка в интеграции Mathematica с PrincipalValue-> True - PullRequest
3 голосов
/ 02 июня 2010

Похоже, что Mathematica не работает с основными интегралами значений в некоторых угловых случаях. Рассмотрим эти два выражения (которые должны давать одинаковый результат):

Integrate[UnitBox[x]/(x0 - x), {x, -Infinity, Infinity},
  PrincipalValue -> True, Assumptions -> {x0 > 0}] /. x0 -> 1 // Simplify
Integrate[UnitBox[x]/(x0 - x) /. x0 -> 1, {x, -Infinity, Infinity}, 
  PrincipalValue -> True]

В Mathematica 7.0.0 я получаю

I Pi+Log[3]
Log[3]

Это было исправлено в более поздних версиях? У кого-нибудь есть идея для (более или менее) общего обходного пути?

РЕДАКТИРОВАТЬ: два выражения выше должны вычислять один и тот же результат, первое путем вычисления общей формы интеграла и оценки его в x0=1, второе путем выполнения интеграла с x0, установленным в 1. Поскольку главное значение Коши имеет точное математическое определение, Mathematica должна дать тот же результат или отказаться отвечать.

РЕДАКТИРОВАТЬ 2: Возможно, более простой пример той же ошибки, помещая коэффициент -1 внутри и снаружи Integral, дают разные ответы (второй дает правильный ответ, первый - нет):

-Integrate[ UnitBox[x]/(x0 - x), {x, -Infinity, Infinity}, PrincipalValue -> True, Assumptions -> {x0 > 0}]
 Integrate[-UnitBox[x]/(x0 - x), {x, -Infinity, Infinity}, PrincipalValue -> True, Assumptions -> {x0 > 0}]

Ответы [ 3 ]

2 голосов
/ 19 февраля 2011

Кажется исправленным в 8.0:

In[1]:= $Version
Out[1]= "8.0 for Mac OS X x86 (32-bit) (November 13, 2010)"

In[2]:= 
Integrate[UnitBox[x]/(x0 - x), {x, -Infinity, Infinity}, 
   PrincipalValue -> True, Assumptions -> {x0 > 0}] /. 
  x0 -> 1 // Simplify

Out[2]= Log[3]

In[3]:= Integrate[
 UnitBox[x]/(x0 - x) /. x0 -> 1, {x, -Infinity, Infinity}, 
 PrincipalValue -> True]

Out[3]= Log[3]
2 голосов
/ 02 июня 2010

Не думаю, что это ошибка в PrincipalValue. В первой строке PrincipalValue не работает «правильно», поскольку положение полюса неизвестно до тех пор, пока не будет выполнено Integrate.

EDIT: Я немного поиграл в Mathematica, и это именно то, что происходит. Вы можете убедиться сами, используя команду Trace[]. Вывод немного грязный (вот почему я не повторяю его здесь), но вы можете видеть, где происходит интеграция и где подставляется значение для x0 и как это портится с PrincipalValue.

EDIT2: Итак, вернемся к решению вашей актуальной проблемы. Если вы используете Допущение, которое определяет, какая сторона x = 1/2 x0 лежит, тогда два примера дают один и тот же ответ.

0 голосов
/ 03 июня 2010

Ну, Wolfram Alpha, которая, как я предполагаю, использует последнюю версию Mathematica, не любит ваше первое выражение и дает это для второго: войти (3) + постоянная

http://www.wolframalpha.com/input/?i=Integrate[UnitBox[x]%2F%28x0+-+x%29+%2F.+x0+-%3E+1%2C+{x%2C+-Infinity%2C+Infinity}%2C++++PrincipalValue+-%3E+True]

Может быть, эта статья применима в этом случае, но я не специалист по математике, поэтому я не знаю? Однако в некоторых ситуациях несколько разных ответов одинаково согласуются с формальными математическими определениями. Так, например, при вычислении символьных интегралов часто существует несколько различных выражений, которые все дают одну и ту же производную. Какое из этих выражений на самом деле генерируется Integrate, может зависеть от того, как работает Integrate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...