Численное восстановление мнимой части аналитического продолжения из реальной части


11

Моя ситуация.

У меня есть функция комплексной переменной определенной через сложный интеграл. Меня интересует значение этой функции на мнимой оси. У меня есть цифровой доступ к этой функции на следующей ленте: . Формально интегральное выражение расходится вне этой области, и поэтому мне нужно аналитическое продолжение. Подводя итог моей ситуации на картинке,z = ( x , y ) ( - , ) × [ - 1 , 1 ]f(z)z=(x,y)(,)×[1,1]

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

Вот что я знаю о на этой ленте из чисел:f(z)

  1. Одновременно симметрично относительно мнимой и реальной осей.

  2. Он уменьшается до нуля в .Re(z)

  3. Это взрывается около . Это может быть столб или точка разветвления, я не знаю. Я подозреваю, что природа этой особенности (и, возможно, всех других изолированных особенностей аналитического продолжения) зависит от конкретной параметризации этой функции (подробности см. Ниже в интеграле)ξz=±iξ

На самом деле это выглядит очень похоже на или 1 / ( 1 + z 2 ) 2 n при построении. Вот сюжет реальной части:sech2(z)1/(1+z2)2n

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

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

Причина, по которой меня интересуют значения вдоль мнимой оси, заключается в том, что мне нужно оценить следующее преобразование Фурье этой функции:

(1)f¯(t)=dxeitx1x2+x02f(x)

для больших значений , который в моем случае на самом деле порядка 10 . Хотя я хорошо знаю подынтегральное выражение, это преобразование Фурье является чрезвычайно колебательным, поэтому единственный способ, которым я знаю, как это вычислить, - это интеграция по Контуру.t10


Что я уже пробовал.

  1. Я на самом деле пытался вычислить окончательный сильно колебательный интеграл, ур. (1). Оценка экв. (1) для одного значения 't' требуется несколько часов для вычисления. Я уже выполнил некоторые из этих интегралов, и результаты действительно имеют смысл, но я бы хотел альтернативный подход.

  2. Я попытался аналитически продолжить аппроксимации Паде, но это также дорого в вычислительном отношении, но не так сильно, как прямая оценка. Что еще более важно, я не мог установить сходимость при увеличении порядка аппроксимантов (или среднего значения их частичных сумм!), Что контрастирует с тем, как прошли мои тесты с простыми функциями, такими как (я мог легко получить очень быстро сходимость в широких диапазонах комплексной z- плоскости с простыми тестовыми функциями).sech2(z)z

  3. Я пробовал символическую интеграцию безрезультатно. Я пытался массировать подынтегральное выражение в более удобоваримую форму для Mathematica, но мои попытки не увенчались успехом.


Оскорбляющий интеграл.

Пусть , k , ξ и α - положительные действительные числа, а E - интересующее нас комплексное число (играет роль z в предыдущем обсуждении). Определение:k4kξαEz

p12=(k4+12E)2+k2+α2p22=(k412E)2+k2+(1α)2

Интересующий меня интеграл следующий:

f(E;α,ξ)=dk40d(k2)[α(1+p12)3ξ/2(1+p22)ξ/2(1+p12(1+p12)2ξ)(1+p22(1+p22)2ξ)++(p1p2)]

где я подавил обозначения функциональной зависимости в подынтегральном выражении для краткости. Меня особенно интересуют значения , диапазон 0 < α < 1 и (как указано выше) преобразование Фурье (1) для t 10 .ξ=1,2,30<α<1t 10


R+0.99if¯ff

1
f¯

f¯f¯α[1,2]0.1

Я написал это, но обнаружил проблему с моим кодом, так что я больше не уверен, действительно ли то, что я вычислил, действительно. У вас есть какие-либо известные действительные эталонные значения?
Кирилл

Ответы:


5

Примечание: я несколько обеспокоен тем, что целочисленные значения, которые Mathematica дает мне, являются поддельными. Я думал, что это сработало, потому что за короткий промежуток времени он дал ощутимый результат, но, возможно, дело в том, что метод, который он пытается использовать, глючит или что я сделал что-то не так. Возможно, приведенный ниже код вообще не работает, я не знаю, извините.

Примечание 2: Меня это беспокоило, поэтому я написал другую версию ( код здесь , извините за качество кода), используя Julia и GSL, и он оценивает gчерез 2 секунды тот же ответ, который Mathematica дает ниже. Поэтому я думаю, что код, вероятно, в порядке.

ff¯

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

ClearAll[ξ, α, p1, p2, fi, f, g];
ξ = 1;
α = 1/2;
fi[e_, k4_, kp_] := Module[{
   p1 = (k4^2 + e/2)^2 + kp^2 + α^2,
   p2 = (k4^2 - e/2)^2 + kp^2 + (1 - α)^2},
  2 * (* because integrate k4 over (0,∞) *)
   2 kp * (* because d(kp^2) *)
   (α (1 + p1)^(3 ξ/2) (1 + p2)^(ξ/2)) /
     ((1 + p1 (1 + p1)^(2 ξ)) (1 + p2 (1 + p2)^(2 ξ)))
  ]
f[e_?NumericQ] := NIntegrate[
   fi[e, k4, kp], {k4, 0, ∞}, {kp, 0, ∞},
   Method -> {Automatic, "SymbolicProcessing" -> 0}];

(* !!! This gives a bogus result: *)
gBogus[t_?NumericQ, e0_?NumericQ] := 
 NIntegrate[
  Exp[I t e]/(e^2 + e0^2) f[e], {e, -∞, ∞}, 
  Method -> {"DoubleExponentialOscillatory", 
    "SymbolicProcessing" -> 0}]

(* This gives *a* result, different from above despite being equivalent *)
g[t_?NumericQ, e0_?NumericQ] := 
 NIntegrate[Exp[I t e]/(e^2 + e0^2) f[e], {e, -\[Infinity], 0}, 
   Method -> {"DoubleExponentialOscillatory", 
     "SymbolicProcessing" -> 0},
   EvaluationMonitor :> Print["e=", e]] +
  NIntegrate[Exp[I t e]/(e^2 + e0^2) f[e], {e, 0, \[Infinity]}, 
   Method -> {"DoubleExponentialOscillatory", 
     "SymbolicProcessing" -> 0},
   EvaluationMonitor :> Print["e=", e]]

Результат:

In[18]:= Timing@g[10,1]
Out[18]= {78.0828, 0.0000704303 + 9.78009*10^-6 I}

In[338]:= Timing@g[1,1]
Out[338]= {14.3125,0.389542 +0.024758 I}

Я заставил Mathematica потратить ноль времени на символическую предварительную обработку подынтегральных функций, потому что в этом случае он не смог бы найти что-нибудь полезное об этом. Я также сказал ему специально использовать колебательный квадратурный метод для второго интеграла.

Моя догадка, почему случайно теребя стратегию интеграции (см NIntegrateIntegrationStrategies ) работает на все является то , что иногда Mathematica может случайно выбрать плохую стратегию автоматически, убивая производительность, в то время как все , что я спрашиваю это сделать, по крайней мере , немного содержательные , даже если неоптимальный. Вы также можете рассмотреть возможность получения помощи по адресу /mathematica/ , они могут узнать больше о внутренностях Mathematica.


k40g[t,e0]

fEp1p2EEk42×(0,)

p1p2Ep1,2К4

@ArturodonJuan Я думаю, что это не имеет никакого значения, как работает ответ, только цифры будут меняться.
Кирилл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.