Python, jenis kompleks untuk berfungsi dengan nombor kompleks (nilai mutlak, deklinasi, transformasi kutub, dsb.)

Perniagaan

Python mempunyai jenis standard untuk mengendalikan nombor kompleks, jenis COMPLEX. Jika anda hanya ingin melakukan pengiraan mudah, anda tidak perlu mengimport sebarang modul, tetapi jika anda mengimport cmath perpustakaan standard, anda juga boleh menggunakan fungsi matematik (eksponen, logaritma, trigonometri, dll.) yang sepadan dengan nombor kompleks.

Kandungan berikut diterangkan di sini dengan kod sampel.

  • Menghasilkan pembolehubah kompleks
  • Dapatkan bahagian sebenar dan khayalan:real,imagatribut
  • Dapatkan nombor kompleks konjugasi:conjugate()kaedah
  • Dapatkan nilai mutlak (magnitud):abs()fungsi (cth. matematik, pengaturcaraan, pengaturcaraan)
  • Dapatkan deklinasi (fasa):math,cmathmodul
  • Penjelmaan koordinat kutub (perwakilan bentuk kutub):math,cmathmodul
  • Pengiraan nombor kompleks (kuadrat, kuasa, punca kuasa dua)

Menghasilkan pembolehubah kompleks

Nyatakan unit khayalan dengan j dan tulis yang berikut, ambil perhatian bahawa ia bukan i.

c = 3 + 4j

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

Jika bahagian khayalan ialah 1, mengabaikannya mengakibatkan NameError. Jika pembolehubah bernama j ditakrifkan dahulu, ia dianggap sebagai pembolehubah itu.

1j
Ia harus dinyatakan secara eksplisit dengan cara ini.

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

c = 3 + 1j

print(c)
# (3+1j)

Jika bahagian sebenar ialah 0, ia boleh ditinggalkan.

c = 3j

print(c)
# 3j

Jika anda ingin menentukan nilai dengan bahagian khayalan 0 sebagai jenis kompleks yang kompleks, tulis 0 secara eksplisit. Seperti yang diterangkan di bawah, operasi boleh dilakukan antara jenis kompleks dan jenis integer atau jenis titik terapung.

c = 3 + 0j

print(c)
# (3+0j)

Bahagian nyata dan khayalan boleh ditentukan sebagai jenis apungan titik terapung. Notasi eksponen juga boleh diterima.

c = 1.2e3 + 3j

print(c)
# (1200+3j)

Ia juga boleh dijana oleh pembina jenis “kompleks”, seperti dalam “kompleks(bahagian nyata, bahagian khayalan)”.

c = complex(3, 4)

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

Dapatkan bahagian nyata dan khayalan bagi nombor kompleks:real,imagatribut

Bahagian sebenar dan khayalan bagi jenis kompleks yang kompleks boleh diperolehi dengan atribut sebenar dan imej, masing-masing. Kedua-duanya adalah jenis apungan titik terapung.

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'>

Ia dibaca sahaja dan tidak boleh diubah.

# c.real = 5.5
# AttributeError: readonly attribute

Dapatkan nombor kompleks konjugasi:conjugate()

Untuk mendapatkan nombor kompleks konjugat, gunakan kaedah konjugat().

c = 3 + 4j

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

Dapatkan nilai mutlak (magnitud) nombor kompleks:abs()

Untuk mendapatkan nilai mutlak (magnitud) nombor kompleks, gunakan fungsi terbina dalam abs().

c = 3 + 4j

print(abs(c))
# 5.0

c = 1 + 1j

print(abs(c))
# 1.4142135623730951

Dapatkan deklinasi (fasa) nombor kompleks:math,cmathmodul

Untuk mendapatkan deklinasi (fasa) nombor kompleks, gunakan modul matematik atau cmath.

Modul cmath ialah modul fungsi matematik untuk nombor kompleks.

Ia boleh dikira dengan fungsi tangen songsang math.atan2() seperti yang ditakrifkan, atau gunakan cmath.phase(), yang mengembalikan deklinasi (fasa).

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

Dalam kedua-dua kes, unit sudut yang boleh diperolehi ialah radian. Untuk menukar kepada darjah, gunakan math.degrees().

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

Penjelmaan koordinat kutub bagi nombor kompleks (perwakilan formal kutub):math,cmathmodul

Seperti yang dinyatakan di atas, nilai mutlak (magnitud) dan deklinasi (fasa) nombor kompleks boleh diperolehi, tetapi menggunakan cmath.polar(), mereka boleh diperolehi bersama-sama sebagai tuple (nilai mutlak, deklinasi).

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

Penukaran daripada koordinat kutub kepada koordinat Cartesian dilakukan menggunakan cmath.rect(). cmath.rect(nilai mutlak, sisihan) dan hujah yang serupa boleh digunakan untuk mendapatkan nilai jenis kompleks kompleks kompleks yang setara.

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)

Bahagian nyata dan khayalan adalah bersamaan dengan keputusan yang dikira oleh kosinus math.cos() dan sinus math.sin() daripada nilai mutlak dan sudut deklinasi.

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

Pengiraan nombor kompleks (kuadrat, kuasa, punca kuasa dua)

Empat operasi aritmetik dan pengiraan kuasa boleh dilakukan menggunakan pengendali aritmetik biasa.

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)

Punca kuasa dua boleh dikira dengan **0.5, tetapi ia memperkenalkan ralat. cmath.sqrt() boleh digunakan untuk mengira nilai yang tepat.

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

Ia juga boleh melakukan operasi aritmetik dengan jenis kompleks, jenis int dan jenis apungan.

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

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