# Fonction de Faddeeva

La fonction de Faddeeva ou fonction de Kramp est une fonction d'erreur complémentaire complexe échelonnée ,
    $w(z):=\mathrm {e} ^{-z^{2}}\operatorname {erfc} (-\mathrm {i} z)=\operatorname {erfcx} (-\mathrm {i} z)=\mathrm {e} ^{-z^{2}}\left(1+{\frac {2\mathrm {i} }{\sqrt {\pi }}}\int _{0}^{z}\mathrm {e} ^{t^{2}}{\text{d}}t\right).$
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$^,$ (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$^,$ ).
* 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. 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

## Propriétés
### Parties réelles et imaginaires

La décomposition en parties réelles et imaginaires s'écrit généralement
    $w(x+\mathrm {i} y)=V(x,y)+\mathrm {i} L(x,y)$,
où 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

Pour les arguments à signe inversé, on a les deux égalités suivantes :
    $w(-z)=2\mathrm {e} ^{-z^{2}}-w(z)$
et
    $w(-z)=w\left(z^{*}\right)^{*}$
où * désigne la conjugaison complexe.

### Relation avec la fonction d'erreur complémentaire

La fonction de Faddeeva évaluée sur des arguments imaginaires est égale à la fonction d'erreur complémentaire mise à l'échelle (erfcx) :
    $w(\mathrm {i} z)=\mathrm {erfcx} (z)=\mathrm {e} ^{z^{2}}\mathrm {erfc} (z)$,
où erfc désigne la fonction d'erreur complémentaire. Pour de grandes valeurs réelles x :
    $\mathrm {erfcx} (x)\approx {\frac {1}{{\sqrt {\pi }}x}}$

### Dérivée

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$^,$:
    ${\frac {\mathrm {d} w(z)}{\mathrm {d} z}}={\frac {2\mathrm {i} }{\sqrt {\pi }}}-2\cdot z\cdot w(z)$
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 $\Re \left(w\left(z\right)\right)=\Re _{w}$ et $\Im \left(w\left(z\right)\right)=\Im _{w}$. 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 $z=x+\mathrm {i} y$, la dérivée peut donc être décomposée en dérivées partielles par rapport à $x$ et $y$ comme suit :
    ${\frac {\mathrm {d} \Re _{w}}{\mathrm {d} x}}=2\cdot \left(y\cdot \Im _{w}-x\cdot \Re _{w}\right)={\frac {\mathrm {d} \Im _{w}}{\mathrm {d} y}}$ et ${\frac {\mathrm {d} \Re _{w}}{\mathrm {d} y}}=-2\cdot \left({\frac {1}{\sqrt {\pi }}}-x\cdot \Im _{w}-y\cdot \Re _{w}\right)=-{\frac {\mathrm {d} \Im _{w}}{\mathrm {d} x}}$
    ${\frac {\mathrm {d} \Im _{w}}{dx}}=2\cdot \left({\frac {1}{\sqrt {\pi }}}-x\cdot \Im _{w}-y\cdot \Re _{w}\right)=-{\frac {\mathrm {d} \Re _{w}}{\mathrm {d} y}}$ et ${\frac {\mathrm {d} \Im _{w}}{\mathrm {d} y}}=2\cdot \left(y\cdot \Im _{w}-x\cdot \Re _{w}\right)={\frac {\mathrm {d} \Re _{w}}{\mathrm {d} x}}$
Un exemple pratique d'utilisation de ces dérivées partielles peut être trouvé ici.

## Représentation intégrale

La fonction de Faddeeva peut s'écrire sous la forme d'une intégrale :
    $w(z)={\frac {\mathrm {i} }{\pi }}\int _{-\infty }^{\infty }{\frac {\mathrm {e} ^{-t^{2}}}{z-t}}\,\mathrm {d} t={\frac {2\mathrm {i} z}{\pi }}\int _{0}^{\infty }{\frac {\mathrm {e} ^{-t^{2}}}{z^{2}-t^{2}}}\,\mathrm {d} t,\qquad \operatorname {Im} z>0$
ce qui signifie qu'il s'agit de la convolution d'une gaussienne avec un pôle simple.

## Histoire

La fonction a été compilée par Vera Faddeeva et N.N. Terentyev en 1954. 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 ).
Les premières implémentations utilisaient les méthodes de Walter Gautschi (1969-1970 ; ACM Algorithm 363) ou de J. Humlicek (1982). Un algorithme plus efficace a été proposé par Poppe et Wijers (1990 ; ACM Algorithm 680). JAC Weideman (1994) a proposé un algorithme particulièrement court qui ne prend pas plus de huit lignes de code MATLAB. 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). Un autre algorithme a été proposé par M. Abrarov et BM Quine (2011/2012).

## Implémentations

Deux implémentations logicielles, gratuites pour un usage non commercial uniquement, ont été publiées dans ACM Transactions on Mathematical Software (TOMS) sous le nom d'algorithme 680 (en Fortran, traduit plus tard en C ) et d'algorithme 916 par Zaghloul et Ali (dans MATLAB).
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, et est maintenue en tant que package de bibliothèque libcerf. Cette implémentation est également disponible sous forme de plug-in pour Matlab, GNU Octave, 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).
Pour un calcul rapide mais toujours précis de la fonction de dispersion du plasma $Z(z)$, l'approximation de Padé au pôle J s'avère utile, soit :
    $Z(z)=\sum _{j=1}^{J}{\frac {b_{j}}{z-c_{j}}}.$
L'approximation ci-dessus est valable pour le plan supérieur. Pour $z$ faiblement proche de l'axe réel, c'est-à-dire $\mathrm {Im} (z)$ non loin de l'axe réel du plan inférieur, l'approximation ci-dessus est également valable. Pour un calcul précis de $\mathrm {Im} (z)<0$, on peut utiliser
    $Z(z)=[Z(z^{*})]^{*}+2\mathrm {i} {\sqrt {\pi }}\exp[-z^{2}].$
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

* Fonction d'erreur