ランベルトのW関数
ランベルトのW関数(ランベルトのだぶりゅーかんすう、Lambert's W function) とは、次の関数の逆関数である。

目次 |
[編集] 概要
「ランベルトのW関数」という名前は、ヨハン・ハインリッヒ・ランベルト にちなんで名づけられた。また、オメガ関数(―かんすう、Omega function)、対数積(たいすうせき、product log) という呼び名もある。
ランベルトのW関数は、通常
と表記される。ここで、任意の複素数
に対して、次式が成立する。

関数 f は (−∞, 0) において単射ではないため、関数 W は [-1⁄e, 0) で多価となる。もし、定義域を実数 x ≥ −1⁄e、値域を w ≥ − 1 に制限するとすれば (これを分岐 (branch cut, en) と呼ぶ)、グラフで示した一価の関数 W0(x) が定義される。特に、W0(0)=0, W0(−1⁄e)=−1 である。
ランベルトのW関数は、初等関数では表現できない。これは、木の数え上げなどの、組合せ論の分野において有用である。また、これは、指数関数を含む様々な方程式を解くのに使われたり、y′(t) = ay(t−1) のような遅延微分方程式(time-delayed differential equations) の解に現れたりする。
陰関数の微分公式によって、W を次のような微分方程式を満たすものとして表示できる。

W0 の 0 近傍におけるテイラー級数は、ラグランジュの逆転の定理 (en) を用いると求めることができ、次式で与えられる。

ダランベールの収束判定法によると、収束半径は 1⁄e である。この級数によって定義された関数は、定義域が複素数全体で、分岐を区間 (−∞, 1⁄e] に持つ正則関数に拡張することができる。この関数は、ランベルトのW関数の主値として定義される。
[編集] 方程式の求解への応用
指数関数を含む方程式の多くは、W関数を用いることで解くことができる。主な方針は、未知数を含む項を方程式の左辺(あるいは右辺)に寄せ、W関数で解を表現できる x ex の形にすることである。例えば、方程式
を解くには、両辺を 2t で割り、1=5 te(−ln(2) t) と変形する。そして両辺を 5 で割り、−ln(2) を掛ける。すると、−ln(2)⁄5 = −ln(2) t e(−ln(2) t) となる。ここで、W関数を用いれば、−ln(2) t = W(−ln(2)⁄5)、即ち t = −W(ln(2)⁄5)/ln(2) となる。
同様の方法で、xx = z の解は、

あるいは
x=exp(W(ln(z)))
となる。
複素数の無限回の累乗

が収束するとき、ランベルトのW関数を用いれば、その極限値を次のように表現できる。

関数
、あるいは
を使って表現される関数の積分は、多くの場合
(即ち、
) と置換することで解ける。

[編集] 特殊値
[編集] 数値計算
W関数は、漸化式

を用いることで数値計算することができる。この計算法は、コーレス(Corless) らによって与えられた。これを計算する Python のコードを以下に示す。誤差の評価には、Chapeau-Belandeau と Monir によるものを用いている。
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
これは、
における主値を計算するものである。初期値の選び方次第で、性能を上げることができる。
以下に示す閉じた形の近似は、さほど精度を要求ない場合や、上のコードに少ない反復回数で優れた初期値を与える際に用いる。
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)); }
(http://www.desy.de/~t00fri/qcdins/texhtml/lambertw/ より)
Mathematica には ProductLog という名前で実装されており、値を対話的な操作で計算したり、解析的な演算 (不定積分、微分など) をしたり、プロットしたりできる[1]。またフリーのC言語のライブラリである GNU Scientific Library では gsl_sf_lambert_W0 という名前などで実装されている[2]。
[編集] 関連項目
[編集] 脚注
[編集] 参考文献・外部リンク
- Corless et al. "On the Lambert W function" Adv. Computational Maths. 5, 329 - 359 (1996) (PostScript)
- 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
- MathWorld - Lambert W-Function
- Lambert function from Wolfram's function site.
- Francis et al. "Quantitative General Theory for Periodic Breathing" Circulation 102 (18): 2214. (2000). Use of Lambert function to solve delay-differential dynamics in human disease.
- Extreme Mathematics. Monographs on the Lambert W function, its numerical approximation and generalizations for W-like inverses of transcendental forms with repeated exponential towers.
- Computing the Lambert Wfunction
は任意の




(