W-функция Ламберта
Материал из Википедии — свободной энциклопедии
W-функция Ламберта определяется как обратная функция к f(w) = wew, для комплексных w. Обозначается W(x) или LambertW(x). Для любого комплексного z:
- z = W(z)eW(z)
W-функция Ламберта не может быть выражена в элементарных функциях. Она применяется в комбинаторике, например, при подсчёте числа деревьев, а также при решении уравнений.
Содержание |
[править] История
Функция изучалась ещё в работе Леонарда Эйлера в 1779, но не имела самостоятельного значения и названия вплоть до 1980-х. Как самостоятельная функция была введена в системе компьютерной алгебры Maple, где для неё использовалось имя LambertW. Имя Иоганна Генриха Ламберта было выбрано, поскольку Эйлер ссылался в своей работе на труды Ламберта, и поскольку «называть ещё одну функцию именем Эйлера было бы бесполезно»[1]
[править] Многозначность
Поскольку функция f(w) не является инъективной на интервале (−∞, 0), W(z) является многозначной функцией на [-1/e,0). Если ограничиться вещественными и потребовать , будет определена однозначная функция W0(x).
[править] Свойства
С помощью дифференцирования неявной функции можно получить, что при z≠−1/e
Ряд Тейлора в окрестности нуля сходится при | z | < 1 / e:
С помощью интегрирования по частям можно найти интеграл от W(z):
[править] Значение в некоторых точках
- (постоянная Омега)
[править] Решение уравнений с помощью W-функции
Решения многих трансцендентных уравнений могут быть выражены в форме W-функции.
Пример: xx = z
- , следовательно, x = eW(lnz).
Пример: 2x = 5x
Обозначим y = − xln2, тогда , отсюда и окончательно .
[править] Вычисление
W-функция может быть приблизительно вычислена с помощью рекурретного соотношения[1]:
Пример программы на языке Python:
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(x) не сходится достаточно быстро при x=%f"%x return w
Для приближённого вычисления можно использовать формулу[2]: