Python, складні типи для роботи з комплексними числами (абсолютні значення, схилення, полярні перетворення тощо)

Бізнес

Python має стандартний тип для обробки комплексних чисел, тип COMPLEX. Якщо ви просто хочете виконувати прості обчислення, вам не потрібно імпортувати будь-які модулі, але якщо ви імпортуєте стандартну бібліотеку cmath, ви також можете використовувати математичні функції (експоненціальні, логарифмічні, тригонометричні тощо), що відповідають комплексним числам.

Наведений нижче вміст пояснюється тут із прикладом коду.

  • Генерувати комплексні змінні
  • Отримайте реальні та уявні частини:real,imagатрибут
  • Отримати спряжені комплексні числа:conjugate()метод
  • Отримати абсолютне значення (величину):abs()функція (наприклад, математика, програмування, програмування)
  • Отримати схилення (фаза):math,cmathмодуль
  • Перетворення полярних координат (подання полярної форми):math,cmathмодуль
  • Обчислення комплексних чисел (квадратура, степені, квадратні корені)

Генерувати комплексні змінні

Позначте уявну одиницю через j і напишіть наступне, зверніть увагу, що це не i.

c = 3 + 4j

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

Якщо уявна частина дорівнює 1, її пропуск призведе до NameError. Якщо змінна з іменем j визначена першою, вона вважається цією змінною.

1j
Це має бути чітко зазначено таким чином.

# c = 3 + j
# NameError: name 'j' is not defined

c = 3 + 1j

print(c)
# (3+1j)

Якщо дійсна частина дорівнює 0, її можна опустити.

c = 3j

print(c)
# 3j

Якщо ви хочете визначити значення з уявною частиною 0 як складний складний тип, запишіть 0 явно. Як описано нижче, операції можуть виконуватися між складним типом і цілочисельним типом або типом з плаваючою комою.

c = 3 + 0j

print(c)
# (3+0j)

Дійсні та уявні частини можна вказати як типу з плаваючою комою. Експоненційне позначення також прийнятне.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Він також може бути згенерований конструктором типу “комплекс”, як у “комплекс (дійсна частина, уявна частина)”.

c = complex(3, 4)

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

Отримати дійсні та уявні частини комплексних чисел:real,imagатрибут

Дійсна та уявна частини складного комплексного типу можуть бути отримані відповідно до дійсних і зображень атрибутів. Обидва є типами з плаваючою комою.

c = 3 + 4j

print(c.real)
print(type(c.real))
# 3.0
# <class 'float'>

print(c.imag)
print(type(c.imag))
# 4.0
# <class 'float'>

Він доступний лише для читання і не може бути змінений.

# c.real = 5.5
# AttributeError: readonly attribute

Отримати спряжені комплексні числа:conjugate()

Щоб отримати спряжені комплексні числа, скористайтеся методом conjugate().

c = 3 + 4j

print(c.conjugate())
# (3-4j)

Отримати абсолютне значення (величину) комплексного числа:abs()

Щоб отримати абсолютне значення (величину) комплексного числа, скористайтеся вбудованою функцією abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Отримати схилення (фазу) комплексного числа:math,cmathмодуль

Щоб отримати схилення (фазу) комплексного числа, скористайтеся модулем math або cmath.

Модуль cmath — це математичний функціональний модуль для комплексних чисел.

Його можна обчислити за допомогою функції зворотного тангенса math.atan2(), як визначено, або використовувати cmath.phase(), яка повертає схилення (фазу).

import cmath
import math

c = 1 + 1j

print(math.atan2(c.imag, c.real))
# 0.7853981633974483

print(cmath.phase(c))
# 0.7853981633974483

print(cmath.phase(c) == math.atan2(c.imag, c.real))
# True

В обох випадках одиницею кута, який можна отримати, є радіани. Щоб перетворити в градуси, використовуйте math.degrees().

print(math.degrees(cmath.phase(c)))
# 45.0

Перетворення полярних координат комплексних чисел (полярне формальне представлення):math,cmathмодуль

Як зазначалося вище, можна отримати абсолютне значення (величину) і схилення (фазу) комплексного числа, але за допомогою cmath.polar() їх можна отримати разом у вигляді кортежу (абсолютне значення, схилення).

c = 1 + 1j

print(cmath.polar(c))
print(type(cmath.polar(c)))
# (1.4142135623730951, 0.7853981633974483)
# <class 'tuple'>

print(cmath.polar(c)[0] == abs(c))
# True

print(cmath.polar(c)[1] == cmath.phase(c))
# True

Перетворення з полярних координат в декартові здійснюється за допомогою cmath.rect(). cmath.rect(абсолютне значення, відхилення) і подібні аргументи можна використовувати для отримання значень еквівалентного комплексного комплексного типу.

print(cmath.rect(1, 1))
# (0.5403023058681398+0.8414709848078965j)

print(cmath.rect(1, 0))
# (1+0j)

print(cmath.rect(cmath.polar(c)[0], cmath.polar(c)[1]))
# (1.0000000000000002+1j)

Дійсна та уявна частини еквівалентні результатам, обчисленим косинусами math.cos() і синусами math.sin() за абсолютними значеннями та кутами схилення.

r = 2
ph = math.pi

print(cmath.rect(r, ph).real == r * math.cos(ph))
# True

print(cmath.rect(r, ph).imag == r * math.sin(ph))
# True

Обчислення комплексних чисел (квадратура, степені, квадратні корені)

Чотири арифметичні операції та обчислення потужності можна виконати за допомогою звичайних арифметичних операторів.

c1 = 3 + 4j
c2 = 2 - 1j

print(c1 + c2)
# (5+3j)

print(c1 - c2)
# (1+5j)

print(c1 * c2)
# (10+5j)

print(c1 / c2)
# (0.4+2.2j)

print(c1 ** 3)
# (-117+44j)

Квадратний корінь можна обчислити з **0,5, але це вносить помилку. cmath.sqrt() можна використовувати для обчислення точного значення.

print((-3 + 4j) ** 0.5)
# (1.0000000000000002+2j)

print((-1) ** 0.5)
# (6.123233995736766e-17+1j)

print(cmath.sqrt(-3 + 4j))
# (1+2j)

print(cmath.sqrt(-1))
# 1j

Він також може виконувати арифметичні операції зі складними типами, типами int і типами float.

print(c1 + 3)
# (6+4j)

print(c1 * 0.5)
# (1.5+2j)