「ランベルトのW関数」の版間の差分
translate from en. 一部、対応する日本語が不明な単語があります。 |
m 時間遅れ微分方程式 -> 遅延微分方程式 |
||
10行目: | 10行目: | ||
関数 <math>f</math> は <math>(-\infin, 0)</math> において[[単射]]ではないため、関数 <math>W</math> は <math>[-1/e, 0)</math> で[[多価関数|多価]]となる。もし、[[定義域]]を[[実数]] <math>x \ge -1/e</math>、[[値域]]を <math>w \ge -1</math> に制限するとすれば、グラフで示した[[一価関数]] <math>W_0(x)</math> が定義される。特に、<math>W_0(0)=0</math>, <math>W_0(-1/e)=-1</math> である。 |
関数 <math>f</math> は <math>(-\infin, 0)</math> において[[単射]]ではないため、関数 <math>W</math> は <math>[-1/e, 0)</math> で[[多価関数|多価]]となる。もし、[[定義域]]を[[実数]] <math>x \ge -1/e</math>、[[値域]]を <math>w \ge -1</math> に制限するとすれば、グラフで示した[[一価関数]] <math>W_0(x)</math> が定義される。特に、<math>W_0(0)=0</math>, <math>W_0(-1/e)=-1</math> である。 |
||
ランベルトのW関数は、[[初等関数]]では表現できない。これは、[[木 (数学)|木]]の数え上げなどの、[[組合せ論]]の分野において有用である。また、これは、指数関数を含む様々な[[方程式]]を解くのに使われたり、<math>y'(t) = ay(t-1)</math> のような[[ |
ランベルトのW関数は、[[初等関数]]では表現できない。これは、[[木 (数学)|木]]の数え上げなどの、[[組合せ論]]の分野において有用である。また、これは、指数関数を含む様々な[[方程式]]を解くのに使われたり、<math>y'(t) = ay(t-1)</math> のような[[遅延微分方程式]](time-delayed differential equations) の解に現れたりする。 |
||
[[陰関数の微分公式]]によって、<math>W</math> を次のような[[微分方程式]]を満たすものとして表示できる。 |
[[陰関数の微分公式]]によって、<math>W</math> を次のような[[微分方程式]]を満たすものとして表示できる。 |
2006年3月22日 (水) 12:54時点における版
ランベルトのW関数(―のだぶりゅーかんすう、Lambert's W function) とは、次の関数の逆関数である。
ただし、 は指数関数、 は任意の複素数である。「ランベルトのW関数」という名前は、ヨハン・ハインリッヒ・ランベルト にちなんで名づけられた。また、オメガ関数(―かんすう、Omega function)、対数積(たいすうせき、product log) という呼び名もある。
ランベルトのW関数は、通常 と表記される。ここで、任意の複素数 に対して、次式が成立する。
関数 は において単射ではないため、関数 は で多価となる。もし、定義域を実数 、値域を に制限するとすれば、グラフで示した一価関数 が定義される。特に、, である。
ランベルトのW関数は、初等関数では表現できない。これは、木の数え上げなどの、組合せ論の分野において有用である。また、これは、指数関数を含む様々な方程式を解くのに使われたり、 のような遅延微分方程式(time-delayed differential equations) の解に現れたりする。
陰関数の微分公式によって、 を次のような微分方程式を満たすものとして表示できる。
の 0 近傍におけるテイラー級数は、Lagrange inversion theorem を用いると求めることができ、次式で与えられる。
ダランベールの収束判定法によると、収束半径は である。この級数によって定義された関数は、定義域が複素数全体で、ブランチカット(branch cut) を区間 に持つ正則関数に拡張することができる。この関数は、ランベルトのW関数の主値として定義される。
方程式の求解への応用
指数関数を含む方程式の多くは、W関数を用いることで解くことができる。主な方針は、未知数を含む項を方程式の左辺(あるいは右辺)に寄せ、W関数で解を表現できる の形にすることである。例えば、方程式 を解くには、両辺を で割り、 と変形する。そして両辺を で割り、 を掛ける。すると、 となる。ここで、W関数を用いれば、、即ち となる。
同様の方法で、
の解は、
あるいは
となる。
複素数の無限回の累乗
が収束するとき、ランベルトの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/ より)
参考文献・外部リンク
- 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