W-функция Ламберта и ее приложения
Введение
Математический анализ знает множество прекрасных функций с необычными свойствами. Среди них интегральные синус
Что такое W-функция Ламберта?
Для того, чтобы понять, что такое W-функция Ламберта, достаточно посмотреть на следующее равенство, которое по аналогии с основным тригометрическим тождеством предлагаю именовать "основное Ламбертово тождество":
Другими словами, функция Ламберта - обратная для
Исследовав производную функции
Ветвь, для которой
Постановка задачи
Задача. Научиться находить действительные корни уравнения следующего вида:
Как вы, наверное, уже догадались, для решения будем использовать W-функцию Ламберта. Итак, сначала возведем и левую, и правую часть в степень
Теперь для того, чтобы воспользоваться основным Ламбертовым тождеством, нам нужно получить выражение с
И теперь мы можем воспользоваться основным Ламбертовым тождеством:
Откуда и получаем уже итоговую формулу для
Вычисление W-функции Ламберта
Заметим, что при
Вычисление W0. Будем использовать метод бинарного поиска по ответу. Мы можем так поступить, поскольку
Левая граница бинарного поиска понятна и равна
Однако для достаточно больших
Итого: при
Ассимптотика:
Вычисление W-1. Здесь будем использовать следующее бесконечное выражение для
Чем глубже мы спускаемся, тем выше точность вычислений.
Реализация на Python
from math import *
def LambertW0(x):
left = -1
right = x if x <= e else log(x)
prec = 10**-12 # точность
# бинарный поиск
while right - left > prec:
mid = (right + left) / 2
if mid * exp(mid) > x:
right = mid
else:
left = mid
return right
def LambertW_1(x, t): # t - показатель точности
if t == 100:
return log(-x)
else:
return log((-x)/(-LambertW_1(x, t + 1)))
def sol(p, q):
s = q**(1/p) / p
if s < -exp(-1):
return "No real solutions"
ans = "Solutions: " + str(p * LambertW0(s)) + " "
if -exp(-1) < s and s < 0:
ans += str(p * LambertW_1(s, 0))
return ans
p = float(input())
q = float(input())
print(sol(p, q))
Проверка
Уравнение 1.
Уравнение 2.
Уравнение 3.
Заключение / выводы
Значения на 0 и -1 ветви W-функции Ламберта могут быть достаточно точно вычислены за короткое время, что делает возможным решение некоторых типов уравнений.