Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

lambertw

ランベルトの W 関数

説明

lambertw(x) は、ランベルトの W 関数の主分枝を返します。この構文は、lambertw(0,x) と等価です。

lambertw(k,x) はランベルトの W 関数の k 番目の分岐です。この構文は、k = 0 または k = -1 の場合のみ実数値を返します。

すべて折りたたむ

ランベルトの W 関数 W(x) は、方程式 x = W(x)eW(x) の解の集合です。

次の方程式を解きます。解はランベルトの W 関数です。

syms x W
eqn = x == W*exp(W);
solve(eqn,W)
ans =
lambertw(0, x)

ランベルトの W 関数の分枝が方程式 x = W*eW の有効解であることを確認します。

k = -2:2;
eqn = subs(eqn,W,lambertw(k,x));
isAlways(eqn)
ans =
  1×5 logical array
     1     1     1     1     1

引数に応じて、lambertw は浮動小数点解またはシンボリック厳密解の結果を返します。

次の数値についてランベルトの W 関数を計算します。これらの数値はシンボリック オブジェクトではないため、結果は浮動小数点数となります。

A = [0 -1/exp(1); pi i];
lambertw(A)
ans =
   0.0000 + 0.0000i  -1.0000 + 0.0000i
   1.0737 + 0.0000i   0.3747 + 0.5764i
lambertw(-1,A)
ans =
     -Inf + 0.0000i  -1.0000 + 0.0000i
  -0.3910 - 4.6281i  -1.0896 - 2.7664i

シンボリック オブジェクトに変換された数値についてランベルトの W 関数を計算します。ほとんどのシンボリックな (厳密な) 数値について、lambertw は未解決のシンボリックな呼び出しを返します。

A = [0 -1/exp(sym(1)); pi i];
W0 = lambertw(A)
W0 =
[               0,             -1]
[ lambertw(0, pi), lambertw(0, 1i)]
Wmin1 = lambertw(-1,A)
Wmin1 =
[             -Inf,              -1]
[ lambertw(-1, pi), lambertw(-1, 1i)]

double を使用してシンボリックな結果を double に変換します。

double(W0)
ans =
   0.0000 + 0.0000i  -1.0000 + 0.0000i
   1.0737 + 0.0000i   0.3747 + 0.5764i

ランベルトの W 関数の 2 つの主要な分枝 W0(x)W-1(x) をプロットします。

syms x
fplot(lambertw(x))
hold on
fplot(lambertw(-1,x))
hold off
axis([-0.5 4 -4 2])
title('Lambert W function, two main branches')
legend('k=0','k=1','Location','best')

Figure contains an axes object. The axes object with title Lambert W function, two main branches contains 2 objects of type functionline. These objects represent k=0, k=1.

ランベルトの W 関数の主分枝を複素平面にプロットします。

fmesh を使用して、ランベルトの W 関数の実数値をプロットします。'ShowContours''On' に設定して、同時に等高線をプロットします。

syms x y
f = lambertw(x + 1i*y);
interval = [-100 100 -100 100];
fmesh(real(f),interval,'ShowContours','On')

Figure contains an axes object. The axes object contains an object of type functionsurface.

ランベルトの W 関数の虚数値をプロットします。プロットの分枝切断は、負の実数軸沿いにあります。等高線を個別にプロットします。

fmesh(imag(f),interval)

Figure contains an axes object. The axes object contains an object of type functionsurface.

fcontour(imag(f),interval,'Fill','on')

Figure contains an axes object. The axes object contains an object of type functioncontour.

ランベルトの W 関数の絶対値をプロットします。

fmesh(abs(f),interval,'ShowContours','On')

Figure contains an axes object. The axes object contains an object of type functionsurface.

入力引数

すべて折りたたむ

入力。数値、ベクトル、行列、または配列、あるいはシンボリック数、変数、配列、関数、または式で指定されます。

少なくとも 1 つの入力引数はスカラーであるか、両方の引数は同じサイズのベクトルまたは行列でなければなりません。一方の入力引数がスカラーであり、もう一方の入力引数がベクトルまたは行列である場合、lambertw によってスカラーは、すべての要素がそのスカラーと等しい、もう一方の引数と同じサイズのベクトルまたは行列に拡張されます。

ランベルトの W 関数の分岐。整数、整数のベクトルまたは行列、シンボリック整数、シンボリックな整数のベクトルまたは行列として指定します。

少なくとも 1 つの入力引数はスカラーであるか、両方の引数は同じサイズのベクトルまたは行列でなければなりません。一方の入力引数がスカラーであり、もう一方の入力引数がベクトルまたは行列である場合、lambertw によってスカラーは、すべての要素がそのスカラーと等しい、もう一方の引数と同じサイズのベクトルまたは行列に拡張されます。

詳細

すべて折りたたむ

ランベルトの W 関数

ランベルトの W 関数 W(x) は、任意の複素数 x について、方程式 yey=x の解 y を表します。

  • 複素数 x の場合、方程式には無数の解 y = lambertW(k,x) があります。ここで、k は、すべての整数をその範囲とします。

  • すべての実数値が x ≥ 0 である場合、方程式には厳密に 1 つの実数解 y = lambertW(x) = lambertW(0,x) があります。

  • e1<x<0 である実数 x の場合、方程式には厳密に 2 つの実数解があります。大きい方の解は y = lambertW(x) で、小さい方の解は y = lambertW(–1,x) と表されます。

  • x=e1 の場合、方程式には厳密に 1 つの実数解 y = –1 = lambertW(0, –exp(–1)) = lambertW(–1, -exp(–1)) があります。

参照

[1] Corless, R.M., G.H. Gonnet, D.E.G. Hare, D.J. Jeffrey, and D.E. Knuth. "On the Lambert W Function." Advances in Computational Mathematics, Vol. 5, pp. 329–359, 1996.

バージョン履歴

R2006a より前に導入

参考

関数