Логарифмы и их основные свойства: что нужно знать специалисту

Логарифмы и их основные свойства: что нужно знать специалисту Полезное

Логарифм числа b по основанию a — это показатель степени, в которую нужно возвести a, чтобы получить b; записывается как log_a(b). Иначе говоря, если a^x = b, то x = log_a(b). Логарифмирование — операция, обратная возведению в степень: она отвечает на вопрос «в какую степень возвести основание, чтобы получить число».

Ниже — точное определение с условиями, три основных вида (натуральный, десятичный, двоичный), таблица свойств с формулами и разбор того, зачем логарифмы нужны в IT: оценка сложности O(log n), энтропия и децибелы. Примеры на Python прогнаны, вывод приведен рядом с кодом.

Определение и условия

По определению логарифм существует не для любых чисел. Требования такие:

  • основание a > 0 и a не равно 1 (единица в любой степени дает единицу, уравнение 1^x = b не имеет решения при b, отличном от 1);
  • аргумент b > 0 (в вещественных числах степень положительного основания положительна).

Проверка «на месте»: log_2(8) = 3, потому что 2^3 = 8. А log_2(0) или log_2(-4) в вещественных числах не определены. Комплексный логарифм расширяет область, но для прикладных задач в IT работают именно с вещественным случаем, и это упрощение достаточно почти всегда.

Логарифм полезен там, где величины отличаются в разы и на порядки: он сжимает такой разброс в удобную шкалу. Именно поэтому логарифмические шкалы применяют для громкости, частот и объемов данных.

Три основных вида

Логарифмы различают по основанию. Три вида покрывают почти все прикладные задачи.

Вид Основание Запись Где нужен
Натуральный e (примерно 2.71828) ln(x) или log_e(x) матанализ, процессы роста и затухания, ML
Десятичный 10 lg(x) или log10(x) порядки величин, децибелы, шкала pH
Двоичный 2 log2(x) сложность алгоритмов, энтропия, биты

Натуральный логарифм имеет основанием число Эйлера e — иррациональную константу, приблизительно 2.71828. Оно возникает как предел непрерывного роста: если величина растет пропорционально своему текущему значению, за единицу времени она умножается на e. По такому закону моделируют размножение бактерий, разряд конденсатора, остывание тела.

Десятичный логарифм удобен для оценки порядка величины: lg(1000) = 3 означает «три нуля». Двоичный отвечает на вопрос «сколько раз число делится пополам» и потому естественен в информатике, где данные измеряют в битах, а компьютеры работают в двоичной системе.

Не путайте основание и аргумент: в log_a(b) основание a стоит внизу и задает «шаг» шкалы, а b — число, для которого ищут показатель. Смена ролей меняет результат: log_2(8) = 3, но log_8(2) примерно 0.333.

Свойства логарифмов: таблица с формулами

Свойства ниже выводятся из определения и работают в обе стороны — и для упрощения выражения, и для его свертки. Все они требуют, чтобы основания и аргументы удовлетворяли условиям области определения.

Свойство Формула Условие
Логарифм единицы log_a(1) = 0 a > 0, a не равно 1
Логарифм основания log_a(a) = 1 a > 0, a не равно 1
Логарифм произведения log_a(x*y) = log_a(x) + log_a(y) x > 0, y > 0
Логарифм частного log_a(x/y) = log_a(x) — log_a(y) x > 0, y > 0
Логарифм степени log_a(x^p) = p * log_a(x) x > 0
Степень в основании log_(a^k)(x) = (1/k) * log_a(x) k не равно 0
Переход к новому основанию log_a(b) = log_c(b) / log_c(a) c > 0, c не равно 1
Обмен основания и аргумента log_a(b) = 1 / log_b(a) b > 0, b не равно 1
Основное тождество a^(log_a(b)) = b b > 0

Ключевое из практических — переход к новому основанию. Стандартные библиотеки редко дают логарифм по произвольному основанию напрямую, зато почти всегда есть ln. Поэтому log_a(b) считают как ln(b) / ln(a). Например, log_2(x) = ln(x) / ln(2).

Формула произведения объясняет старый инженерный прием: умножение чисел сводили к сложению их логарифмов по таблицам. Тот же принцип работает в вычислениях с вероятностями — произведение множества малых величин заменяют суммой их логарифмов, чтобы не терять точность (log-likelihood в статистике и ML).

Логарифмы в Python

В Python логарифмы живут в модуле math стандартной библиотеки, отдельной установки не нужно. Ниже — минимальный рабочий пример: скопируйте и запустите целиком, результат в комментариях.

import math

print(math.log(8, 2))     # 3.0   - log по основанию: аргумент, потом основание
print(math.log2(8))       # 3.0   - специализированная функция для основания 2
print(math.log10(1000))   # 3.0   - десятичный логарифм
print(math.log(math.e))   # 1.0   - без второго аргумента = натуральный ln

Обратите внимание на порядок аргументов: math.log(x, base) принимает сначала число, потом основание — это противоположно математической записи log_base(x). Функция всегда возвращает float, даже когда результат целый.

Для оснований 2 и 10 есть отдельные функции log2 и log10, и это не просто сахар. Они точнее универсального math.log(x, base), где деление двух логарифмов накапливает ошибку float:

import math

print(math.log(1000, 10))  # 2.9999999999999996 - деление ln(1000)/ln(10), ошибка float
print(math.log10(1000))    # 3.0 - специализированная функция дает точный результат

Вывод 2.9999999999999996 — не баг, а следствие двоичного представления вещественных чисел. Правило простое: если основание 2 или 10, берите log2/log10, а math.log(x, base) оставьте для произвольных оснований.

Отдельно стоит функция math.log1p(x) — она считает ln(1 + x) и точнее прямого выражения, когда x близок к нулю:

import math

x = 1e-15
print(math.log(1 + x))  # 1.110223024625156e-15 - сумма 1+x уже теряет точность
print(math.log1p(x))    # 9.999999999999995e-16 - ближе к истинному значению

Здесь 1 + x при очень малом x округляется еще до логарифмирования, поэтому log1p дает результат ближе к настоящему ln(1 + x). На практике это нужно в финансовых и вероятностных расчетах с малыми приращениями.

Где логарифмы встречаются в IT

Сложность алгоритмов. Запись O(log n) означает, что число операций растет как логарифм от размера входа: удвоение данных добавляет лишь один шаг. Классика — бинарный поиск, который на каждом шаге делит диапазон пополам. Для миллиона элементов хватит около двадцати сравнений:

import math

print(math.log2(1_000_000))            # 19.931568569324174
print(math.ceil(math.log2(1_000_000))) # 20 - максимум шагов бинарного поиска

По этому же закону работают сбалансированные деревья поиска и высота двоичного дерева: log2(n) — примерная глубина. Отсюда практический вывод — алгоритм с O(log n) масштабируется несопоставимо лучше линейного O(n).

Энтропия и биты. Количество информации измеряют через двоичный логарифм: чтобы закодировать один из N равновероятных исходов, нужно log2(N) бит. Для честной монеты это log2(2) = 1 бит, для игрального кубика — log2(6), примерно 2.585 бит. На этой формуле стоят оценки сжатия данных и энтропия Шеннона.

Децибелы и логарифмические шкалы. Громкость, отношение сигнал/шум, коэффициенты усиления выражают в децибелах через десятичный логарифм: величина в дБ равна 10 * lg(P1 / P0). Логарифмическая шкала сжимает диапазон, который иначе растянулся бы на много порядков, и потому удобна для восприятия и графиков.

Выводы

  • Логарифм log_a(b) — это показатель степени: степень, в которую возводят основание a, чтобы получить b; область определения задают условия a > 0, a не равно 1, b > 0.
  • Три рабочих вида: натуральный (основание e, запись ln), десятичный (основание 10, lg) и двоичный (основание 2, log2); вид выбирают под задачу.
  • Свойства (логарифм произведения, частного, степени, переход к новому основанию) превращают умножение и степени в сложение — это и делает логарифм удобным инструментом.
  • В Python используйте math.log2 и math.log10 вместо math.log(x, base) для оснований 2 и 10: они точнее и не копят ошибку float.
  • В IT логарифм задает сложность O(log n), меру информации в битах через энтропию и логарифмические шкалы вроде децибел.

Где применяется / связь с практикой

Логарифмы — не абстракция из учебника, а рабочий инструмент разработчика и аналитика. Оценка сложности алгоритмов, энтропия в задачах сжатия и машинного обучения, логарифмические шкалы в метриках и мониторинге — все это опирается на свойства из таблицы выше. Понимание, почему бинарный поиск дает O(log n), а не O(n), напрямую влияет на выбор структур данных.

Освойте тему на практике

Систематически разобрать логарифмы, пределы, производные и другие темы прикладной математики для IT помогает курс Прикладная математика в Otus. Чтобы оценить формат и уровень до старта, посмотрите записи и расписание открытых уроков Otus — там разбирают конкретные задачи в прямом эфире.

FAQ

Чем отличаются ln, lg и log2?
Это логарифмы с разными основаниями: ln — по основанию e (примерно 2.71828), lg — по основанию 10, log2 — по основанию 2. Формула перехода связывает их: любой из них выражается через другой делением, например log2(x) = ln(x) / ln(2).

Почему основание логарифма не может быть 1 или отрицательным?
Единица в любой степени равна единице, поэтому уравнение 1^x = b не имеет решения при b, отличном от 1. Отрицательное или нулевое основание дает степени, которые не покрывают положительные числа непрерывно, поэтому логарифм по такому основанию в вещественных числах не определяют.

Можно ли взять логарифм от нуля или отрицательного числа?
В вещественных числах — нет: аргумент должен быть строго больше нуля, так как положительное основание в любой вещественной степени положительно. Для отрицательных и нулевых аргументов логарифм определяют только в комплексном анализе, что выходит за рамки типовых прикладных задач.

OTUS Журнал
Скидка 5% 12-19 октября на курсы (popup)
Бесплатные открытые уроки (поп-ап)