Комплексные числа
Комплексное число состоит из действительной и мнимой частей. Мнимая часть записывается с i — квадратным корнем из −1. Здесь описаны запись комплексных чисел, арифметика, модуль и аргумент, корни из отрицательных чисел и функции, принимающие комплексные значения.
Эта страница пригодится, если квадратное уравнение не имеет действительных корней, при расчёте цепей переменного тока и сигналов или проверке учебных задач по комплексному анализу.
Запись комплексных чисел
2 + 3i даёт 2 + 3icomplex(3, -4) даёт 3 - 4ii^2 даёт -1Для мнимой части поставьте i сразу после числа, как в 3i или 1.5i, либо используйте отдельное i. Функция complex(real, imaginary) создаёт то же значение из двух частей. Она удобна, если части заданы именами: complex(resistance, reactance). Обе части должны быть числами без единиц измерения.
Символ i обозначает мнимую единицу, только если в заметке нет другого определения с именем i. Если определить значение или пользовательскую единицу i, приоритет будет у него:
i = 52 + 3i даёт 17complex(2, 3) даёт 2 + 3iЗдесь 3i стало 3 × 5, и строка дала 17. Имена доступны в последующих блоках вычислений той же заметки, поэтому любое предшествующее определение i = … имеет такой эффект. Не используйте i как имя переменной в заметках с комплексными числами. Функция complex(2, 3) не зависит от этого имени и продолжает работать.
Арифметика
(2 + 3i) + (1 - 5i) даёт 3 - 2i(1 + 2i) * (3 - i) даёт 5 + 5i(2 + 3i) * (2 - 3i) даёт 1310 / (3 + 4i) даёт 1.2 - 1.6i(1 + i)^8 даёт 16Сложение, вычитание, умножение, деление и целые степени являются точными. Когда мнимая часть результата равна нулю, как при (2 + 3i) * (2 - 3i), ответ отображается как обычное число. Используйте скобки вокруг каждого комплексного числового значения при умножении или делении, чтобы (2 + 3i) * (2 - 3i) не читался как 2 + (3i * 2) - 3i.
Части комплексного числа
z = 3 + 4ireal(z) даёт 3imag(z) даёт 4conj(z) даёт 3 - 4iabs(z) даёт 5arg(1 + i) даёт 0.7853981634arg(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):
sqrt(-16 + 0i) даёт 4isqrt(complex(-16, 0)) даёт 4isqrt(3 + 4i) даёт 2 + isqrt(2i) даёт 1 + iФункция sqrt возвращает главное значение корня: с положительной действительной частью, а для отрицательного исходного числа — с положительной мнимой. Второй квадратный корень отличается знаком.
Значение, записанное как комплексное, сохраняет этот тип даже при нулевой мнимой части. Его можно сначала сохранить под именем или использовать в других вычислениях: после x = -16 + 0i вызов sqrt(x) даёт 4i, хотя x отображается как -16.
Так формула корней квадратного уравнения работает и при отрицательном дискриминанте:
# Roots of x^2 + 2x + 5 = 0a = 1b = 2c = 5disc = b^2 - 4*a*c даёт -16(-b + sqrt(disc + 0i)) / (2*a) даёт -1 + 2i(-b - sqrt(disc + 0i)) / (2*a) даёт -1 - 2iКубические корни следуют тому же правилу главного значения. Для отрицательных чисел это может дать неожиданный результат:
cbrt(-8) даёт -2cbrt(-8 + 0i) даёт 1 + 1.7320508076iОба результата — кубические корни из −8. Действительный вариант возвращает действительный корень, а комплексный — главное комплексное значение.
Функции комплексного числа
exp(i * pi) даёт -1ln(-1 + 0i) даёт 3.1415926536ii^i даёт 0.2078795764cos(i) даёт 1.5430806348sinh(i) даёт 0.8414709848i2^i даёт 0.7692389014 + 0.6389612763iКомплексные аргументы принимают следующие функции:
sin,cos,tanи их обратныеasin,acos,atansinh,cosh,tanhи их обратныеasinh,acosh,atanhexp,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, не принимают комплексные значения.
Сравнение комплексных чисел
2 + 3i == complex(2, 3) даёт true2 + 3i != 2 - 3i даёт truecomplex(3, 0) >= 3 даёт trueabs(3 + 4i) > abs(1 + 2i) даёт trueОператоры == и != работают с любыми комплексными значениями. Операторы <, <=, > и >= доступны только при нулевой мнимой части с обеих сторон, поскольку естественного порядка у комплексных чисел нет: i < 2 выдаёт ошибку. Для сравнения величин используйте модули через abs, как в последней строке. Сортировка комплексных чисел недоступна.
Полные правила находятся в справке по продвинутой математике.
Всё вместе
Пример проверки задачи по цепям переменного тока: резистор 30 Ом и катушка с реактивным сопротивлением 40 Ом соединены последовательно и подключены к источнику 10 В:
# Series circuit: 30 Ω resistor, 40 Ω reactance, 10 V supplyresistance = 30reactance = 40z = complex(resistance, reactance) даёт 30 + 40iabs(z) даёт 50current = 10 / z даёт 0.12 - 0.16iabs(current) даёт 0.2arg(z) rad in degrees to 1 dp даёт 53.1°Полное сопротивление равно 30 + 40i, его модуль — 50 Ом. Поэтому ток равен 0,2 А и отстаёт от напряжения примерно на 53,1°. В электротехнике мнимую единицу часто обозначают j, но в Varlig это всегда i. Омы, вольты и амперы указаны в комментарии: части комплексного числа не могут содержать единицы измерения.