當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy special.lambertw用法及代碼示例


本文簡要介紹 python 語言中 scipy.special.lambertw 的用法。

用法:

scipy.special.lambertw(z, k=0, tol=1e-8)#

朗伯 W 函數。

朗伯 W 函數W(z)被定義為的反函數w * exp(w).換句話說,值W(z)是這樣的z = W(z) * exp(W(z))對於任何複數z.

Lambert W 函數是具有無限多個分支的多值函數。每個分支給出方程的單獨解z = w exp(w).這裏,分支由整數索引k.

參數

z array_like

輸入參數。

k 整數,可選

分支索引。

tol 浮點數,可選

評估容差。

返回

w 數組

w 將具有與 z 相同的形狀。

注意

lambertw 支持所有分支:

  • lambertw(z) 給出主解(分支 0)

  • lambertw(z, k)在分支上給出解決方案k

Lambert W 函數有兩個部分實數分支:主分支 (k = 0) 是真的z > -1/e, 和k = -1分支是真實的-1/e < z < 0.除k = 0有對數奇點z = 0.

可能的問題

在非常接近 -1/e 處的分支點時,評估可能會變得不準確。在某些極端情況下,lambertw 當前可能無法收斂,或者可能最終出現在錯誤的分支上。

算法

哈雷迭代用於反轉w * exp(w), 使用 first-order 漸近逼近 (O(log(w)) 或O(w)) 作為初始估計。

分支的定義、實現和選擇基於[2]。

參考

[2]

Corless 等人,“關於 Lambert W 函數”,Adv.比較。數學。 5 (1996) 329-359。 https://cs.uwaterloo.ca/research/tr/1993/03/W.pdf

例子

Lambert W 函數是 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)

任何分支都會給出有效的逆:

>>> w = lambertw(1, k=3)
>>> w
(-2.8535817554090377+17.113535539412148j)
>>> w*np.exp(w)
(1.0000000000000002+1.609823385706477e-15j)

申請equation-solving

Lambert W 函數可用於求解各種方程。我們在這裏舉兩個例子。

首先,該函數可用於求解以下形式的隱式方程

對於 。我們假設 不為零。經過一點代數之後,方程可以寫成

其中 可以使用 Lambert W 函數來表示

給予

例如,

>>> a = 3
>>> b = 2
>>> c = -0.5

的解決方案是:

>>> x = a - lambertw(-b*c*np.exp(a*c))/c
>>> x
(3.3707498368978794+0j)

驗證它是否解方程:

>>> a + b*np.exp(c*x)
(3.37074983689788+0j)

Lambert W 函數也可用於查找無限功率塔 的值:

>>> 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)

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.special.lambertw。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。