scipy.special.

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 von W(z) ist so, dass z = W(z) * exp(W(z)) für jede komplexe Zahl z gilt.

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

wrightomega

die Wright Omega-Funktion

Hinweise

Alle Äste werden von lambertw unterstü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/e reell, und der Ast k = -1 ist für -1/e < z < 0 reell. Alle Äste außer k = 0 haben eine logarithmische Singularität bei z = 0.

Mögliche Probleme

Die Auswertung kann sehr nahe am Astpunkt bei -1/e ungenau werden. In einigen Eckfällen kann lambertw derzeit 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)