Récupération numérique d'une partie imaginaire d'une suite analytique à partir d'une partie réelle


11

Ma situation.

J'ai une fonction d'une variable complexe définie par une intégrale compliquée. Ce qui m'intéresse, c'est la valeur de cette fonction sur l'axe imaginaire. J'ai un accès numérique à cette fonction sur le ruban suivant: z = ( x , y ) ( - , ) × [ - 1 , 1 ] . Formellement, l'expression intégrale est divergente en dehors de ce domaine, et j'ai donc besoin d'une continuation analytique. Pour résumer ma situation en image,f(z)z=(x,y)(,)×[1,1]

entrez la description de l'image ici

Voici ce que je sais sur sur ce ruban à partir des chiffres:f(z)

  1. Il est simultanément symétrique par rapport aux axes imaginaire et réel.

  2. Elle se désintègre à zéro à .Re(z)

  3. Il explose près de . Ce pourrait être un pôle ou un point de branchement, je ne sais pas. Je soupçonne que la nature de cette singularité (et peut-être toutes les autres singularités isolées de la suite analytique) dépend du paramétrage spécifique ξ de cette fonction (voir l'intégrale ci-dessous pour plus de détails)z=±iξ

En fait, il ressemble beaucoup à un ou un 1 / ( 1 + z 2 ) 2 n lorsqu'il est tracé. Voici un tracé de la partie réelle:sech2(z)1/(1+z2)2n

entrez la description de l'image ici

Ma question est, étant donné la quantité d'informations dont je dispose sur la fonction (accès numérique total à celle-ci sur ce ruban), y a-t-il un moyen pour moi de calculer numériquement une approximation de cette fonction le long de l'axe imaginaire? J'utilise Mathematica au fait.

La raison pour laquelle je m'intéresse aux valeurs le long de l'axe imaginaire est que j'ai besoin d'évaluer la transformée de Fourier suivante de cette fonction:

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

t10


Ce que j'ai essayé.

  1. J'ai en fait essayé de calculer l'intégrale hautement oscillatoire ultime, l'éq. (1). Évaluer l'éq. (1) pour une seule valeur de 't' prend quelques heures à calculer. J'ai déjà effectué quelques-unes de ces intégrales et les résultats ont du sens, mais je voudrais une approche alternative.

  2. sech2(z)z

  3. J'ai essayé l'intégration symbolique en vain. J'ai essayé de masser l'intégrande sous une forme plus digeste pour Mathematica, mais mes tentatives n'ont pas réussi.


L'intégrale fautive.

k4kξαEz

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

L'intégrale qui m'intéresse est la suivante:

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


R+0.99if¯ff

1
f¯

f¯f¯α[1,2]0.1

Je l'ai écrit, mais j'ai découvert un problème avec mon code, donc je ne sais plus si ce que j'ai calculé est valide. Avez-vous des valeurs de référence valides connues?
Kirill

Réponses:


5

Remarque: je suis quelque peu inquiet à ce stade que les valeurs intégrales que Mathematica me donne soient fausses. Je pensais que cela fonctionnait parce qu'il donnait un résultat raisonnable en peu de temps, mais il se peut que la méthode qu'il essaie d'utiliser soit boguée ou que j'ai fait quelque chose de mal. Il se peut donc que le code ci-dessous ne fonctionne pas du tout, je ne sais pas, désolé.

Note 2: Cela m'a dérangé, j'ai donc écrit une autre version ( code ici , désolé pour la qualité du code) en utilisant Julia et GSL, et il évalue gen 2 secondes la même réponse que Mathematica donne ci-dessous. Je pense donc que le code est probablement correct.

ff¯

Mon expérience passée avec l'intégration numérique me porte à croire que les méthodes mathématiques les plus sophistiquées peuvent parfois être spectaculairement utiles, mais aussi que l'évaluation des transformées de Fourier numériques et l'intégration des fonctions rationnelles et algébriques sont le pain et le beurre des algorithmes d'intégration numérique, donc on peut souvent progressez facilement en choisissant soigneusement les algorithmes et en jouant avec leurs paramètres. C'est généralement l'option la plus facile s'il est difficile de voir comment faire fonctionner correctement la technique mathématique.

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

Résultat:

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}

J'ai fait en sorte que Mathematica ne passe aucun temps à prétraiter symboliquement les intégrandes, car dans ce cas, il n'aurait de toute façon pas pu trouver quoi que ce soit d'utile à ce sujet. Je lui ai également dit d'utiliser spécifiquement une méthode de quadrature oscillatoire pour la seconde intégrale.

Je suppose que pourquoi manipuler au hasard les stratégies d'intégration (voir NIntegrateIntegrationStrategies ) fonctionne du tout, c'est que parfois Mathematica peut accidentellement choisir une mauvaise stratégie automatiquement, tuant les performances, alors que tout ce que je lui demande de faire est au moins un peu significatif même s'il n'est pas optimal. Vous pouvez également envisager d'obtenir de l'aide sur /mathematica/ , ils pourraient en savoir plus sur les composants internes de Mathematica là-bas.


k40g[t,e0]

fEp1p2EEk42×(0,)

p1p2Ep1,2k4

@ArturodonJuan Je pense que cela ne change pas vraiment la façon dont la réponse fonctionne, seuls les chiffres changeraient.
Kirill
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.