Fonction de Faddeeva

Un article de Wikipédia, l'encyclopédie libre.
Fonction de Faddeeva sur le plan complexe

La fonction de Faddeeva ou fonction de Kramp est une fonction d'erreur complémentaire complexe échelonnée ,

Elle est liée à l'intégrale de Fresnel, à l'intégrale de Dawson et à la fonction de Voigt.

Cette fonction apparaît dans divers problèmes physiques, généralement liés aux réponses électromagnétiques dans des milieux complexes :

  • des problèmes impliquant des ondes de petite amplitude se propageant à travers des plasmas maxwelliens, et apparaissant en particulier dans la permittivité du plasma dont sont dérivées les relations de dispersion, c'est pourquoi on l'appelle parfois fonction de dispersion du plasma[1],[2] (bien que ce nom soit parfois utilisé à la place pour la fonction redimensionnée Z(z) = iπ w(z) définie par Fried et Conte, 1961 [1],[3] ).
  • les fonctions de permittivité infrarouge des oxydes amorphes ont des résonances (dues aux phonons ) parfois trop compliquées à adapter à l'aide de simples oscillateurs harmoniques. Le modèle d'oscillateur de Brendel-Bormann utilise une superposition infinie d'oscillateurs ayant des fréquences légèrement différentes, avec une distribution gaussienne[4]. La réponse intégrée peut être écrite en termes de fonctions de Faddeeva.
  • la fonction de Faddeeva est également utilisée dans l'analyse des ondes électromagnétiques du type utilisé dans la radio AM.
  • Les ondes de sol sont des ondes polarisées verticalement se propageant sur un sol avec perte avec une résistivité et une permittivité finies.
  • la fonction de Faddeeva décrit également les changements dans les sections efficaces des neutrons des matériaux lorsque la température varie[5]

Propriétés[modifier | modifier le code]

Parties réelles et imaginaires[modifier | modifier le code]

La décomposition en parties réelles et imaginaires s'écrit généralement

,

V et L sont appelés les fonctions de Voigt réelles et imaginaires, puisque V(x,y) est le profil de Voigt (à un préfacteur près).

Inversion de signe[modifier | modifier le code]

Pour les arguments à signe inversé, on a les deux égalités suivantes :

et

où * désigne la conjugaison complexe.

Relation avec la fonction d'erreur complémentaire[modifier | modifier le code]

La fonction de Faddeeva évaluée sur des arguments imaginaires est égale à la fonction d'erreur complémentaire mise à l'échelle (erfcx) :

,

erfc désigne la fonction d'erreur complémentaire. Pour de grandes valeurs réelles x :

Dérivée[modifier | modifier le code]

Dans certaines applications, il est nécessaire de connaître non seulement les valeurs originales de la fonction de Faddeeva, mais également celles de sa dérivée (par exemple dans un modèle de régression des moindres carrés non linéaires en spectroscopie ). Sa dérivée est donnée par l'équation différentielle [6],[7]:

Cette expression peut également être décomposée davantage en termes de changements dans la partie réelle et imaginaire de la fonction de Faddeeva, avec et . Fondamentalement, cela nécessite une connaissance de la partie réelle et imaginaire du produit z w(z). En utilisant la définition ci-dessus , la dérivée peut donc être décomposée en dérivées partielles par rapport à et comme suit :

      et      
      et      

Un exemple pratique d'utilisation de ces dérivées partielles peut être trouvé ici.

Représentation intégrale[modifier | modifier le code]

La fonction de Faddeeva peut s'écrire sous la forme d'une intégrale :

ce qui signifie qu'il s'agit de la convolution d'une gaussienne avec un pôle simple.

Histoire[modifier | modifier le code]

La fonction a été compilée par Vera Faddeeva et N.N. Terentyev en 1954[8]. Elle apparaît comme une fonction sans nom w(z) dans Abramowitz et Stegun (1964), formule 7.1.3. Le nom de fonction de Faddeeva a apparemment été introduit par GPM Poppe et CMJ Wijers en 1990 ; auparavant, elle était connue sous le nom de fonction de Kramp (probablement d'après Christian Kramp )[9].

Les premières implémentations utilisaient les méthodes de Walter Gautschi (1969-1970 ; ACM Algorithm 363) [10] ou de J. Humlicek (1982)[11]. Un algorithme plus efficace a été proposé par Poppe et Wijers (1990 ; ACM Algorithm 680)[12]. JAC Weideman (1994) a proposé un algorithme particulièrement court qui ne prend pas plus de huit lignes de code MATLAB[13]. Zaghloul et Ali ont mis en lumière les lacunes des algorithmes précédents et en ont proposé un nouveau (2011 ; ACM Algorithm 916)[2]. Un autre algorithme a été proposé par M. Abrarov et BM Quine (2011/2012)[14].

Implémentations[modifier | modifier le code]

Deux implémentations logicielles, gratuites pour un usage non commercial uniquement[15], ont été publiées dans ACM Transactions on Mathematical Software (TOMS) sous le nom d'algorithme 680 (en Fortran[16], traduit plus tard en C ) [17] et d'algorithme 916 par Zaghloul et Ali (dans MATLAB)[18].

Une implémentation C ou C++ gratuite et open source dérivée d'une combinaison de l'algorithme 680 et de l'algorithme 916 (utilisant différents algorithmes pour différents z) est également disponible sous la licence MIT[19], et est maintenue en tant que package de bibliothèque libcerf[20]. Cette implémentation est également disponible sous forme de plug-in pour Matlab[19], GNU Octave[19], et en Python via Scipy sous le nom scipy.special.wofz (qui était à l'origine le code TOMS 680, mais a été remplacé en raison de problèmes de droits d'auteur [21]).

Pour un calcul rapide mais toujours précis de la fonction de dispersion du plasma , l'approximation de Padé au pôle J s'avère utile[22], soit :

L'approximation ci-dessus est valable pour le plan supérieur. Pour faiblement proche de l'axe réel, c'est-à-dire non loin de l'axe réel du plan inférieur, l'approximation ci-dessus est également valable. Pour un calcul précis de , on peut utiliser

Un codage de l’approche du pôle J ci-dessus et une comparaison avec une fonction de dispersion de plasma précise peuvent être trouvés.

Voir également[modifier | modifier le code]

Références[modifier | modifier le code]

  1. a et b Lehtinen, « Error functions », Lehtinen webpage - Stanford University, (consulté le )
  2. a et b M. R. Zaghloul and A. N. Ali, ACM Transactions on Mathematical Software 38(2)15 (2011)
  3. Richard Fitzpatrick, Plasma Dispersion Function, Plasma Physics lecture notes, University of Texas at Austin (2011/3/31).
  4. Brendel et Bormann, « An infrared dielectric function model for amorphous solids », Journal of Applied Physics, vol. 71, no 1,‎ , p. 1 (ISSN 0021-8979, DOI 10.1063/1.350737, Bibcode 1992JAP....71....1B)
  5. « OpenMC Windowed Multipole », (consulté le )
  6. (en) Slava Avetisov A Least-Squares Fitting Technique for Spectral Analysis of Direct and Frequency-Modulation Lineshapes (rapport), Department of Physics, Lund University (lire en ligne)
  7. « Faddeeva (or Faddeyeva) function - 7.10 Derivatives », Digital Library of Mathematical Functions, National Institute of Standards and Technology, (consulté le )
  8. V. N. Faddeeva and N. N. Terent'ev: Tables of values of the function for complex argument. Gosud. Izdat. Teh.-Teor. Lit., Moscow, 1954; English transl., Pergamon Press, New York, 1961. Unverified citation, copied from Poppe and Wijers (1990).
  9. For instance in Al'pert, Space Science Reviews 6, 781 (1967), formula (3.13), with reference to Faddeeva and Terent'ev.
  10. See references 3 and 4 in Poppe and Wijers (1990).
  11. J. Humlicek, J. Quant. Spectrosc. Radiat. Transfer 27, 437-444 (1982).
  12. G. P. M. Poppe and C. M. J. Wijers, ACM Transactions on Mathematical Software 16, 38-46 (1990).
  13. J. A. C. Weideman, SIAM J. Numer. Anal. 31, 1497-1518 (1994).
  14. S. M. Abrarov and B. M. Quine, Appl. Math. Comp. 218, 1894-1902 (2011) and arXiv:1205.1768v1 (2012).
  15. « Software Copyright Notice »; hence they are not free in the sense of free and open-source software
  16. (en) G P M Pope et C M J Wijers, « Algorithm 680: evaluation of the complex error function », ACM Transactions on Mathematical Software, vol. 16, no 1,‎ (DOI 10.1145/77626.77630)
  17. « Collision formulas », NASA (consulté le )
  18. Mofreh R. Zaghloul and Ahmed N. Ali, "Algorithm 916: Computing the Faddeyeva and Voigt Functions," ACM Trans. Math. Soft. 38 (2), 15 (2011). Preprint available at arXiv:1106.0151.
  19. a b et c Faddeeva Package, free/open-source C++ implementation, accessed 13 October 2012.
  20. « Libcerf [MLZ Scientific Computing Group] »
  21. « SciPy's complex erf code is not free/open-source? (Trac #1741) · Issue #2260 · scipy/scipy », GitHub
  22. Xie, « BO: A unified tool for plasma waves and instabilities analysis », Computer Physics Communications, vol. 244,‎ , p. 343–371 (ISSN 0010-4655, DOI 10.1016/j.cpc.2019.06.014, arXiv 1901.06902, lire en ligne)