Пропустить к содержанию
Руководство Varlig
Главная страница Varlig

Комплексные числа

Комплексное число состоит из действительной и мнимой частей. Мнимая часть записывается с i — квадратным корнем из −1. Здесь описаны запись комплексных чисел, арифметика, модуль и аргумент, корни из отрицательных чисел и функции, принимающие комплексные значения.

Эта страница пригодится, если квадратное уравнение не имеет действительных корней, при расчёте цепей переменного тока и сигналов или проверке учебных задач по комплексному анализу.

Запись комплексных чисел

calc
2 + 3i даёт 2 + 3i
complex(3, -4) даёт 3 - 4i
i^2 даёт -1

Для мнимой части поставьте i сразу после числа, как в 3i или 1.5i, либо используйте отдельное i. Функция complex(real, imaginary) создаёт то же значение из двух частей. Она удобна, если части заданы именами: complex(resistance, reactance). Обе части должны быть числами без единиц измерения.

Символ i обозначает мнимую единицу, только если в заметке нет другого определения с именем i. Если определить значение или пользовательскую единицу i, приоритет будет у него:

calc
i = 5
2 + 3i даёт 17
complex(2, 3) даёт 2 + 3i

Здесь 3i стало 3 × 5, и строка дала 17. Имена доступны в последующих блоках вычислений той же заметки, поэтому любое предшествующее определение i = … имеет такой эффект. Не используйте i как имя переменной в заметках с комплексными числами. Функция complex(2, 3) не зависит от этого имени и продолжает работать.

Арифметика

calc
(2 + 3i) + (1 - 5i) даёт 3 - 2i
(1 + 2i) * (3 - i) даёт 5 + 5i
(2 + 3i) * (2 - 3i) даёт 13
10 / (3 + 4i) даёт 1.2 - 1.6i
(1 + i)^8 даёт 16

Сложение, вычитание, умножение, деление и целые степени являются точными. Когда мнимая часть результата равна нулю, как при (2 + 3i) * (2 - 3i), ответ отображается как обычное число. Используйте скобки вокруг каждого комплексного числового значения при умножении или делении, чтобы (2 + 3i) * (2 - 3i) не читался как 2 + (3i * 2) - 3i.

Части комплексного числа

calc
z = 3 + 4i
real(z) даёт 3
imag(z) даёт 4
conj(z) даёт 3 - 4i
abs(z) даёт 5
arg(1 + i) даёт 0.7853981634
arg(1 + i) rad in degrees даёт 45°
Функция Результат
real(z) Действительная часть
imag(z) Мнимая часть в виде числа без единиц
conj(z) Комплексно-сопряжённое число: действительная часть та же, знак мнимой части изменён на противоположный
abs(z) Модуль: расстояние от нуля
arg(z) Аргумент: угол относительно положительного направления действительной оси, в радианах

Функция arg возвращает угол в радианах от −π до π как число без единицы. Для перевода в градусы сначала явно укажите радианы, как в последней строке. Обратное преобразование из модуля и угла выполняется через exp: 2 * exp(i * pi / 3) даёт 1 + 1.7320508076i.

Квадратные корни отрицательных чисел

Корень из обычного отрицательного числа вычисляется в действительных числах, поэтому sqrt(-16) выдаёт ошибку с подсказкой: Error: imaginary number. For a complex answer, write sqrt(-16 + 0i). Чтобы получить комплексный корень, задайте комплексное число: добавьте 0i или используйте complex(…, 0):

calc
sqrt(-16 + 0i) даёт 4i
sqrt(complex(-16, 0)) даёт 4i
sqrt(3 + 4i) даёт 2 + i
sqrt(2i) даёт 1 + i

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

Значение, записанное как комплексное, сохраняет этот тип даже при нулевой мнимой части. Его можно сначала сохранить под именем или использовать в других вычислениях: после x = -16 + 0i вызов sqrt(x) даёт 4i, хотя x отображается как -16.

Так формула корней квадратного уравнения работает и при отрицательном дискриминанте:

calc
# Roots of x^2 + 2x + 5 = 0
a = 1
b = 2
c = 5
disc = b^2 - 4*a*c даёт -16
(-b + sqrt(disc + 0i)) / (2*a) даёт -1 + 2i
(-b - sqrt(disc + 0i)) / (2*a) даёт -1 - 2i

Кубические корни следуют тому же правилу главного значения. Для отрицательных чисел это может дать неожиданный результат:

calc
cbrt(-8) даёт -2
cbrt(-8 + 0i) даёт 1 + 1.7320508076i

Оба результата — кубические корни из −8. Действительный вариант возвращает действительный корень, а комплексный — главное комплексное значение.

Функции комплексного числа

calc
exp(i * pi) даёт -1
ln(-1 + 0i) даёт 3.1415926536i
i^i даёт 0.2078795764
cos(i) даёт 1.5430806348
sinh(i) даёт 0.8414709848i
2^i даёт 0.7692389014 + 0.6389612763i

Комплексные аргументы принимают следующие функции:

  • sin, cos, tan и их обратные asin, acos, atan
  • sinh, cosh, tanh и их обратные asinh, acosh, atanh
  • exp, ln, log (или log10), log2, sqrt и cbrt
  • степени с дробными или комплексными показателями, например i^0.5 или 2^i

Они работают в двоичной системе с плавающей запятой, поэтому ответы являются близкими приближениями. Остатки округления, слишком маленькие, чтобы иметь значение, отображаются как 0, поэтому exp(i * pi) читается как −1, ответ, который вы ожидаете от учебника. Сохраненное значение сохраняет каждую цифру, поэтому при сравнении таких результатов проверьте, что разница крошечная, как в abs(exp(i * pi) + 1) < 1e-9, вместо использования ==.

Каждая функция возвращает одно значение из главной ветви. У комплексного числа бесконечно много значений логарифма и несколько корней; выбирается стандартное главное значение. Как и у sqrt, действительный аргумент сохраняет действительный тип: ln(-1) и log(-100) выдают ошибку мнимого числа с подсказкой комплексной записи, а ln(-1 + 0i) даёт πi. Логарифм нуля вызывает ошибку.

Функции, определённые только для действительных чисел, например floor и round, не принимают комплексные значения.

Сравнение комплексных чисел

calc
2 + 3i == complex(2, 3) даёт true
2 + 3i != 2 - 3i даёт true
complex(3, 0) >= 3 даёт true
abs(3 + 4i) > abs(1 + 2i) даёт true

Операторы == и != работают с любыми комплексными значениями. Операторы <, <=, > и >= доступны только при нулевой мнимой части с обеих сторон, поскольку естественного порядка у комплексных чисел нет: i < 2 выдаёт ошибку. Для сравнения величин используйте модули через abs, как в последней строке. Сортировка комплексных чисел недоступна.

Полные правила находятся в справке по продвинутой математике.

Всё вместе

Пример проверки задачи по цепям переменного тока: резистор 30 Ом и катушка с реактивным сопротивлением 40 Ом соединены последовательно и подключены к источнику 10 В:

calc
# Series circuit: 30 Ω resistor, 40 Ω reactance, 10 V supply
resistance = 30
reactance = 40
z = complex(resistance, reactance) даёт 30 + 40i
abs(z) даёт 50
current = 10 / z даёт 0.12 - 0.16i
abs(current) даёт 0.2
arg(z) rad in degrees to 1 dp даёт 53.1°

Полное сопротивление равно 30 + 40i, его модуль — 50 Ом. Поэтому ток равен 0,2 А и отстаёт от напряжения примерно на 53,1°. В электротехнике мнимую единицу часто обозначают j, но в Varlig это всегда i. Омы, вольты и амперы указаны в комментарии: части комплексного числа не могут содержать единицы измерения.