
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 :
La décomposition en parties réelles et imaginaires s'écrit généralement
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).
Pour les arguments à signe inversé, on a les deux égalités suivantes :
et
où * désigne la conjugaison complexe.
La fonction de Faddeeva évaluée sur des arguments imaginaires est égale à la fonction d'erreur complémentaire mise à l'échelle (erfcx) :
où erfc désigne la fonction d'erreur complémentaire. Pour de grandes valeurs réelles x :
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 ,:
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 :
Un exemple pratique d'utilisation de ces dérivées partielles peut être trouvé ici.
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.
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).
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 , l'approximation de Padé au pôle J s'avère utile, 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.