Комплексные числа: тип complex и его методы

Раздел: Основы Python -> Типы данных

Основы работы с комплексными числами в Python

Python поддерживает комплексные числа как встроенный тип данных complex. Комплексное число состоит из действительной и мнимой частей, где мнимая единица обозначается как j или J (в отличие от математической i). Комплексные числа применяются в инженерных расчётах, физике, обработке сигналов и компьютерной графике.

Основной способ создания комплексного числа

Наиболее эффективный способ - использовать литерал в виде a+bj, где a и b - действительные числа. Например:

z = 3 + 4j
print(z)          # (3+4j)
print(type(z))    # <class 'complex'>

вещественные значения python (вещественные значения в python)

Также используется функция complex(real, imag):

z = complex(3, 4)
print(z)          # (3+4j)

вывести тип данных python (вывод типа данных в python)

Оба способа эквивалентны. В большинстве случаев литерал удобнее.

Как создать комплексное число из строки?

Функция complex() принимает строку, содержащую представление комплексного числа:

z = complex('3+4j')
print(z)   # (3+4j)
z = complex('5-2j')
print(z)   # (5-2j)

Python двоичные данные (работа с двоичными данными в python)

Строка должна быть без пробелов и содержать символ j. Если строка некорректна, возникает исключение ValueError.

Проблема: попытка передать строку с пробелами (например, '3 + 4j') приводит к ошибке. Решение - удалить пробелы или использовать разбор вручную.

Как получить действительную и мнимую части?

Используйте атрибуты .real и .imag:

z = 5 - 2j
print(z.real)   # 5.0
print(z.imag)   # -2.0

переменная int python какая переменная (переменная int в python - что это?)

Результат всегда число с плавающей точкой.

Попытка получить .real или .imag из переменной другого типа (например, целого числа) вызовет AttributeError. Перед обращением убедитесь, что тип - complex.

Как выполнить арифметические операции с комплексными числами?

Все стандартные арифметические операции (+, -, *, /, **) работают с комплексными числами:

a = 1 + 2j
b = 3 - 1j
print(a + b)   # (4+1j)
print(a - b)   # (-2+3j)
print(a * b)   # (5+5j)   (1*3 - 2*(-1) + ...)
print(a / b)   # (0.1+0.7j)
print(a ** 2)  # (-3+4j)

комплексные числа в python (комплексные числа в python)

Операция деления на ноль вызывает ZeroDivisionError.

Особая ситуация: операция взятия остатка (%) и целочисленного деления (//) не поддерживаются для комплексных чисел.

Как вычислить модуль и аргумент комплексного числа?

Модуль (абсолютное значение) находится функцией abs():

z = 3 + 4j
print(abs(z))   # 5.0

логические значения python (логические значения в python)

Аргумент (фаза) в радианах - из модуля cmath:

import cmath
z = 1 + 1j
print(cmath.phase(z))   # 0.7853981633974483  (π/4)

длина переменной python (длина числа и переменной в python)

Модуль cmath предоставляет множество математических функций для комплексных чисел.

Как использовать функции модуля cmath?

Модуль cmath содержит аналоги математических функций, работающих с комплексными числами:

import cmath
z = 2 + 3j
print(cmath.sqrt(z))      # (1.6741492280355401+0.8959774761298381j)
print(cmath.exp(z))       # (-7.315110094901103+1.042743656400904j)
print(cmath.sin(z))       # (9.15449914691143-4.168906959966565j)
print(cmath.cos(z))       # (-4.189625690968807-9.109227893755337j)

определение объекта python (определение типа объекта в python)

Результаты - комплексные числа. Эти функции полезны в научных расчётах.

Важно: не путайте cmath с модулем math. Функции math ожидают вещественные аргументы; передача комплексного числа вызовет TypeError.

Как преобразовать комплексное число в вещественные типы?

Преобразование в int или float возможно только если мнимая часть равна нулю:

z = 5 + 0j
print(int(z.real))   # 5
print(float(z.real)) # 5.0

определение типа данных python (определение типов данных в python)

Попытка преобразовать комплексное число с ненулевой мнимой частью:

z = 1 + 1j
# int(z)   # TypeError: can't convert complex to int

Python максимальное целое число (максимальное целое число в python)

Для округления комплексного числа применяется округление отдельно действительной и мнимой частей.

Как округлить комплексное число?

Поскольку прямого метода округления нет, создаётся новое комплексное число с округлёнными частями:

z = 3.14159 + 2.71828j
z_rounded = complex(round(z.real, 2), round(z.imag, 2))
print(z_rounded)   # (3.14+2.72j)

List values python (список значений словаря в python)

Этот подход позволяет задать точность для каждой части.

Как сравнивать комплексные числа?

Комплексные числа поддерживают только сравнение на равенство (== и !=):

a = 1 + 2j
b = 1 + 2j
print(a == b)   # True
print(a != 3j)  # True

числа с плавающей запятой python (числа с плавающей запятой в python)

Операции <, >, <=, >= приводят к TypeError, так как комплексные числа не образуют упорядоченного поля.

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

Как перейти от декартовых координат к полярным и обратно?

Функция cmath.polar() возвращает кортеж (модуль, фаза):

import cmath
z = 1 + 1j
print(cmath.polar(z))   # (1.4142135623730951, 0.7853981633974483)

является ли числом python (проверка, является ли значение числом в python)

Обратное преобразование - cmath.rect():

r, phi = 2, 0.5
z = cmath.rect(r, phi)
print(z)   # (1.7551651237807435+0.958851077208406j)

Python пустые значения (пустые значения в python)

Это удобно при работе с амплитудой и фазой.

Как получить сопряжённое комплексное число?

Метод .conjugate() возвращает комплексно-сопряжённое число:

z = 3 - 4j
print(z.conjugate())   # (3+4j)

Сопряжение используется для вычисления нормы: z * z.conjugate() даёт квадрат модуля (вещественное число).

Каждый вариант подходит для определённых задач: создание чисел - для ввода данных, арифметика - для расчётов, модуль cmath - для научных вычислений, полярные координаты - для анализа сигналов. Выбор зависит от контекста.

- строковые значения python (строковые значения в python)
- Type 0 python (тип 0 в python)
- функция bool python (функция bool в python)

Расширенные примеры работы с комплексными числами

Решение квадратного уравнения с комплексными корнями

Квадратное уравнение ax² + bx + c = 0 может иметь комплексные корни при отрицательном дискриминанте. Программа вычисляет корни с помощью cmath.sqrt:

Пример
import cmath

a, b, c = 1, -2, 5

d = b**2 - 4*a*c  # дискриминант (работает и для комплексных)
x1 = (-b + cmath.sqrt(d)) / (2*a)
x2 = (-b - cmath.sqrt(d)) / (2*a)

print(f'Корни: {x1} и {x2}')
print(f'Проверка: a*x1**2 + b*x1 + c = {a*x1**2 + b*x1 + c}')
Корни: (1+2j) и (1-2j)
Проверка: a*x1**2 + b*x1 + c = 0j

Здесь cmath.sqrt корректно обрабатывает отрицательный дискриминант, возвращая комплексное число. Проверка показывает, что подстановка корня даёт ноль (с машинной точностью).

Вычисление амплитуды и фазы синусоидального сигнала

В обработке сигналов комплексные числа представляют гармонические колебания. Пусть сигнал задан как комплексная амплитуда A * exp(j*phi). Амплитуда A - модуль, фаза phi - аргумент:

Пример
import cmath
import math

# Комплексная амплитуда: A=5, phi=30°
A = 5
phi_deg = 30
phi_rad = math.radians(phi_deg)

z = cmath.rect(A, phi_rad)  # переводим в декартову форму
print(f'Представление сигнала: {z}')
print(f'Модуль (амплитуда): {abs(z)}')
print(f'Фаза (градусы): {math.degrees(cmath.phase(z))}')
Представление сигнала: (4.330127018922193+2.5j)
Модуль (амплитуда): 5.0
Фаза (градусы): 30.0

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

Вычисление корней n-й степени из комплексного числа

Корень n-й степени из комплексного числа имеет n значений. Формула: z^(1/n) = r^(1/n) * exp(j*(phi + 2πk)/n) для k=0..n-1. Пример для кубического корня из 8 (вещественное число, но демонстрация):

Пример
import cmath
import math

z = 8 + 0j  # комплексная форма
n = 3
r, phi = cmath.polar(z)
root_mag = r ** (1/n)

for k in range(n):
    angle = (phi + 2 * math.pi * k) / n
    root = cmath.rect(root_mag, angle)
    print(f'Корень {k}: {root}')
Корень 0: (2+0j)
Корень 1: (-1+1.7320508075688772j)
Корень 2: (-1-1.7320508075688772j)

Видно, что один корень вещественный, два - комплексно-сопряжённые. Этот метод применяется в теории чисел и при решении дифференциальных уравнений.

Проверка стабильности системы с помощью корней характеристического многочлена

В теории автоматического управления для оценки устойчивости системы находят корни характеристического уравнения. Если все корни имеют отрицательную действительную часть, система устойчива. Пример с полиномом s² + 2s + 5:

Пример
import cmath

coeff = [1, 2, 5]  # s^2 + 2s + 5
# Корни можно найти аналитически
d = coeff[1]**2 - 4*coeff[0]*coeff[2]
root1 = (-coeff[1] + cmath.sqrt(d)) / (2*coeff[0])
root2 = (-coeff[1] - cmath.sqrt(d)) / (2*coeff[0])

print(f'Корни: {root1}, {root2}')
print(f'Действительные части: {root1.real}, {root2.real}')
if root1.real < 0 and root2.real < 0:
    print('Система устойчива')
else:
    print('Система неустойчива')
Корни: (-1+2j), (-1-2j)
Действительные части: -1.0, -1.0
Система устойчива

Здесь действительные части отрицательны, поэтому система устойчива. При наличии положительной действительной части система была бы неустойчивой. Этот критерий широко применяется в инженерной практике.

Использование комплексных чисел в алгоритме БПФ (идея)

Быстрое преобразование Фурье (БПФ) оперирует массивами комплексных чисел. В Python встроенные функции не предоставляют БПФ, но библиотека numpy содержит numpy.fft. Пример на встроенных средствах невозможен без внешних модулей. Однако базовый принцип: каждое комплексное число представляет амплитуду и фазу гармоники. Для иллюстрации можно вычислить дискретное преобразование Фурье (ДПФ) наивным способом:

Пример
import cmath
import math

# Входной сигнал (вещественный)
signal = [1, 2, 3, 4]
N = len(signal)

# Вычисляем ДПФ
spectrum = []
for k in range(N):
    s = 0+0j
    for n in range(N):
        angle = -2 * math.pi * k * n / N
        s += signal[n] * cmath.rect(1, angle)
    spectrum.append(s)

for k, val in enumerate(spectrum):
    print(f'k={k}: {val:.2f}')
k=0: (10+0j)
k=1: (-2+2j)
k=2: (-2+0j)
k=3: (-2-2j)

Полученные комплексные числа - спектральные компоненты. Этот пример демонстрирует, как комплексные числа участвуют в разложении сигнала на гармоники.

Приведённые примеры охватывают типичные сценарии использования комплексных чисел в научных и инженерных расчётах. Для более сложных задач (матричные операции, БПФ, интегральные преобразования) рекомендуется подключать специализированные библиотеки, такие как numpy и scipy.

Комплексные числа в Python - comments

En
комплексные числа в python (python)