lambertw#
- scipy.special.lambertw(z, k=0, tol=1e-8)[Quelle]#
Lambert W-Funktion.
Die Lambert W-Funktion W(z) ist definiert als die Umkehrfunktion von
w * exp(w). Anders ausgedrückt, der Wert vonW(z)ist so, dassz = W(z) * exp(W(z))für jede komplexe Zahlzgilt.Die Lambert W-Funktion ist eine mehrwertige Funktion mit unendlich vielen Ästen. Jeder Ast liefert eine separate Lösung der Gleichung
z = w exp(w). Hier sind die Äste durch die ganze Zahl k indiziert.- Parameter:
- zarray_like
Eingabeparameter.
- kint, optional
Ast-Index.
- tolfloat, optional
Auswertungstoleranz.
- Rückgabe:
- wArray
w wird die gleiche Form wie z haben.
Siehe auch
wrightomegadie Wright Omega-Funktion
Hinweise
Alle Äste werden von
lambertwunterstützt.lambertw(z)gibt die Hauptlösung (Ast 0) zurück.lambertw(z, k)gibt die Lösung auf Ast k zurück.
Die Lambert W-Funktion hat zwei teilweise reelle Äste: der Hauptast (k = 0) ist für reelles
z > -1/ereell, und der Astk = -1ist für-1/e < z < 0reell. Alle Äste außerk = 0haben eine logarithmische Singularität beiz = 0.Mögliche Probleme
Die Auswertung kann sehr nahe am Astpunkt bei
-1/eungenau werden. In einigen Eckfällen kannlambertwderzeit möglicherweise nicht konvergieren oder auf dem falschen Ast landen.Algorithmus
Die Halley-Iteration wird verwendet, um
w * exp(w)zu invertieren, wobei eine asymptotische Näherung erster Ordnung (O(log(w)) oder O(w)) als Anfangsschätzung verwendet wird.Die Definition, Implementierung und Wahl der Äste basieren auf [2].
Referenzen
[2]Corless et al, „On the Lambert W function“, Adv. Comp. Math. 5 (1996) 329-359. https://cs.uwaterloo.ca/research/tr/1993/03/W.pdf
Beispiele
Die Lambert W-Funktion ist die Umkehrfunktion von
w exp(w).>>> import numpy as np >>> from scipy.special import lambertw >>> w = lambertw(1) >>> w (0.56714329040978384+0j) >>> w * np.exp(w) (1.0+0j)
Jeder Ast liefert eine gültige Umkehrung.
>>> w = lambertw(1, k=3) >>> w (-2.8535817554090377+17.113535539412148j) >>> w*np.exp(w) (1.0000000000000002+1.609823385706477e-15j)
Anwendungen zur Gleichungslösung
Die Lambert W-Funktion kann zur Lösung verschiedener Arten von Gleichungen verwendet werden. Wir geben hier zwei Beispiele.
Erstens kann die Funktion verwendet werden, um implizite Gleichungen der Form
\(x = a + b e^{c x}\)
für \(x\) zu lösen. Wir nehmen an, \(c\) ist nicht Null. Nach ein wenig Algebra kann die Gleichung geschrieben werden als
\(z e^z = -b c e^{a c}\)
wobei \(z = c (a - x)\). \(z\) kann dann mithilfe der Lambert W-Funktion ausgedrückt werden
\(z = W(-b c e^{a c})\)
was ergibt
\(x = a - W(-b c e^{a c})/c\)
Zum Beispiel,
>>> a = 3 >>> b = 2 >>> c = -0.5
Die Lösung von \(x = a + b e^{c x}\) ist
>>> x = a - lambertw(-b*c*np.exp(a*c))/c >>> x (3.3707498368978794+0j)
Verifizieren Sie, dass dies die Gleichung löst.
>>> a + b*np.exp(c*x) (3.37074983689788+0j)
Die Lambert W-Funktion kann auch verwendet werden, um den Wert des unendlichen Potenzturms \(z^{z^{z^{\ldots}}}\) zu finden.
>>> def tower(z, n): ... if n == 0: ... return z ... return z ** tower(z, n-1) ... >>> tower(0.5, 100) 0.641185744504986 >>> -lambertw(-np.log(0.5)) / np.log(0.5) (0.64118574450498589+0j)