Recuperando numericamente parte imaginária da continuação analítica da parte real

11

Minha situação.

Eu tenho uma função de uma variável complexa definida através de uma integral complicada. O que me interessa é o valor dessa função no eixo imaginário. Eu tenho acesso numérico a esta função na seguinte faixa de opções : z = ( x , y ) ( - , ) × [ - 1 , 1 ] . Formalmente, a expressão integral é divergente fora desse domínio e, portanto, preciso de uma continuação analítica. Para resumir minha situação em uma imagem,f(z)z=(x,y)(,)×[1,1]

insira a descrição da imagem aqui

Aqui está o que eu sei sobre nesta faixa de opções numéricos:f(z)

  1. É simultaneamente simétrico em relação aos eixos imaginários e reais.

  2. Decai para zero em .Re(z)

  3. Explode perto de . Poderia ser um poste ou um ponto de ramificação, não sei. Suspeito que a natureza dessa singularidade (e possivelmente todas as outras singularidades isoladas da continuação analítica) dependa da parametrização específica ξ dessa função (consulte a íntegra abaixo para obter detalhes)z=±iξ

De fato, parece muito semelhante a um ou 1 / ( 1 + z 2 ) 2 n quando plotado. Aqui está um gráfico da parte real:sech2(z)1/(1+z2)2n

insira a descrição da imagem aqui

Minha pergunta é, dada a enorme quantidade de informações que tenho sobre a função (acesso numérico total a ela nessa faixa de opções), existe alguma maneira de calcular numericamente uma aproximação a essa função ao longo do eixo imaginário? Estou usando o Mathematica por sinal.

O motivo pelo qual estou interessado nos valores ao longo do eixo imaginário é porque preciso avaliar a seguinte transformação de Fourier dessa função:

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

para grandes valores de , que no meu caso estão na ordem de 10 . Embora eu conheça bem o integrando, essa transformação de Fourier é tremendamente oscilatória; portanto, a única outra maneira de saber como calcular isso é através de uma integração do Contour.t10


O que eu tentei.

  1. Na verdade, tentei calcular a integral máxima altamente oscilatória, eq. (1) Avaliando a eq. (1) para um valor único de 't' leva algumas horas para calcular. Já realizei algumas dessas integrais e os resultados realmente fazem sentido, mas eu gostaria de uma abordagem alternativa.

  2. Tentei continuar analiticamente com as aproximações de Pade, mas isso também é computacionalmente caro, mas não tanto quanto a avaliação direta. Mais importante, eu não consegui estabelecer convergência com a ordem crescente das aproximações (nem a média de suas somas parciais!), O que contrasta com o modo como meus testes com funções simples como foram (eu poderia facilmente obter muito rápido convergência em amplas faixas do complexo plano z com funções de teste simples).sech2(z)z

  3. Eu tentei a integração simbólica sem sucesso. Eu tentei massagear o integrando em uma forma mais digerível para o Mathematica, mas minhas tentativas não foram bem-sucedidas.


A integral ofensiva.

Seja , k , ξ e α sejam números reais positivos enquanto E é o número complexo em que estamos interessados ​​(desempenha o papel de z na discussão anterior). Definir:k4kξαEz

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

A integral que me interessa é a seguinte:

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

ξ=1,2,30<α<1t 10

Arturo don Juan
fonte
R+0.99if¯ff
1
f¯
f¯f¯α[1,2]0.1
Eu escrevi, mas descobri um problema com meu código, então não tenho mais certeza se o que eu calculei é válido. Você tem valores de referência válidos conhecidos?
Kirill

Respostas:

5

Nota: Estou um pouco preocupado neste momento em que os valores integrais que o Mathematica me fornece são falsos. Eu pensei que estava funcionando porque deu um resultado sensato em pouco tempo, mas pode ser que o método que ele tenta usar seja de buggy ou que eu fiz algo errado. Portanto, pode ser que o código abaixo não esteja funcionando, não sei, desculpe.

Nota 2: Isso me incomodou, então escrevi outra versão ( código aqui , desculpe pela qualidade do código) usando Julia e GSL, e avalia gem 2 segundos a mesma resposta que o Mathematica dá abaixo. Então eu acho que o código provavelmente está bom.

ff¯ decadência polinomialmente e rapidamente, e isso é exatamente o tipo de coisa que as rotinas de quadratura convencionais são projetados para lidar bem. Também não há singularidades complicadas.

Minha experiência no passado com integração numérica me leva a acreditar que os métodos matemáticos mais sofisticados às vezes podem ser espetacularmente úteis, mas também que avaliar transformações numéricas de Fourier e integrar funções racionais e algébricas são a base dos algoritmos de integração numérica, portanto é possível faça um progresso fácil escolhendo algoritmos com cuidado e jogando com seus parâmetros. Geralmente, essa é a opção mais fácil se for difícil ver como fazer a técnica matemática funcionar corretamente.

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

Resultado:

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}

Eu fiz o Mathematica gastar tempo zero no pré-processamento simbólico dos integrandos, porque, nesse caso, ele não teria conseguido descobrir nada útil sobre ele. Eu também disse para usar especificamente um método de quadratura oscilatória para a segunda integral.

Meu palpite por que mexer aleatoriamente com estratégias de integração (ver NIntegrateIntegrationStrategies ) trabalha em tudo é que às vezes Mathematica pode acidentalmente pegar uma má estratégia automaticamente, matando desempenho, ao passo que qualquer coisa que eu pedi-lo a fazer é, pelo menos, um pouco mesmo significado se abaixo do ideal. Você também pode obter ajuda em /mathematica/ , pois eles podem saber mais sobre os internos do Mathematica por lá.

Kirill
fonte
k40g[t,e0]
fEp1p2EEk42×(0,)
p1p2Ep1,2k4
@ArturodonJuan Eu acho que não faz nenhuma diferença real como a resposta funciona, apenas os números mudariam.
Kirill