Das Kefk Network Wiki befindet sich im Testbetrieb.
Lambert-W-Funktion
Aus Kefk.
In der Mathematik ist Lamberts W-Funktion, benannt nach Johann Heinrich Lambert, die Umkehrfunktion von
in der ex die Exponentialfunktion und x eine beliebige komplexe Zahl ist. Lamberts W-Funktion, auch Omega Funktion genannt, wird meistens als W(x) geschrieben. Es gilt
Da die Funktion f auf dem Intervall
nicht injektiv ist, besitzt die Lambert W-Funktion auf dem Intervall
zwei Funktionsäste. Mit W(x) wird aber in der Regel der obere der Äste bezeichnet. Die W-Funktion kann nicht als elementare Funktion ausgedrückt werden. Zumeist wird sie in der Kombinatorik verwendet.
Die Ableitungsfunktion der W-Funktion kann mit Hilfe des Satzes über die Ableitung der Umkehrfunktion gefunden werden.
Eine Stammfunktion ergibt sich durch Substitution des gesamten Integranden.
Durch implizite Differentiation kann man zeigen, dass W folgender Differentialgleichung genügt:
Die Taylor-Reihe von W in x0=0 ist gegeben durch
Der Konvergenzradius beträgt
.
Inhaltsverzeichnis |
Spezielle Werte
(die Omega Konstante)
Verwendung außerhalb der Kombinatorik
Die Lambert W-Funktion kann gebraucht werden, um Gleichungen vom Typus
- a(x)ea(x) = y
zu lösen (a(x) ist ein beliebiger, von x abhängiger Ausdruck).
Auch die Gleichung
- xx = z
kann mit Hilfe der Lambert W-Funktion gelöst werden. Die Lösung lautet
Der infinite Exponentialturm
kann an den konvergenten Stellen mit der W-Funktion in geschlossene Form gebracht werden, was auch die Ableitung ermöglicht.
Numerische Berechnung
Die W-Funktion kann rekursiv mithilfe der Beziehung
berechnet werden[1].
Die folgende Implementation in Python berechnet eine Lösung x > 1 / e und enthält eine Fehlerschätzung nach Chapeau-Belandeau und Monir[2]:
import math class Error(Exception): pass def lambertW(x, prec=1e-12): w = 0 for i in xrange(100): wTimesExpW = w*math.exp(w) wPlusOneTimesExpW = (w+1)*math.exp(w) if prec>abs((x-wTimesExpW)/wPlusOneTimesExpW): break w = w-(wTimesExpW-x)/( wPlusOneTimesExpW-(w+2)*(wTimesExpW-x)/(2*w+2)) else: raise Error, "W doesn't converge fast enough for %f"%x return w
Die folgende Näherung in geschlossener Form[3] kann verwendet werden, wenn keine hohe Genauigkeit benötigt wird, oder kann als Ausgangswert für obigen Code verwendet werden, um dessen Konvergenzgeschwindigkeit zu erhöhen.
double
desy_lambert_W(double x) {
double lx1;
if (x <= 500.0) {
lx1 = log(x + 1.0);
return 0.665 * (1 + 0.0195 * lx1) * lx1 + 0.04;
}
return log(x - 4.0) - (1.0 - 1.0/log(x)) * log(log(x));
}
Quellen
- ↑ Corless et al. "On the Lambert W function" Adv. Computational Maths. 5, 329 - 359 (1996)
- ↑ Chapeau-Blondeau, F. and Monir, A: "Evaluation of the Lambert W Function and Application to Generation of Generalized Gaussian Noise With Exponent 1/2", IEEE Trans. Signal Processing, 50(9), 2002
- ↑ http://www.desy.de/~t00fri/qcdins/texhtml/lambertw/
| Dieses Dokument entstammt in seiner ersten oder einer späteren Version der deutschsprachigen Wikipedia. Es ist dort zu finden unter dem Stichwort Lambert-W-Funktion, die Liste der bisherigen Autoren befindet sich in der Versionsliste; die Originalfassung kann dort auch bearbeitet werden. Alle Texte der Wikipedia und ihre Derivate stehen unter der GNU-Lizenz für freie Dokumentation. |

