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
,imag
atribut - Dapatkan nombor kompleks konjugasi:
conjugate()
kaedah - Dapatkan nilai mutlak (magnitud):
abs()
fungsi (cth. matematik, pengaturcaraan, pengaturcaraan) - Dapatkan deklinasi (fasa):
math
,cmath
modul - Penjelmaan koordinat kutub (perwakilan bentuk kutub):
math
,cmath
modul - Pengiraan nombor kompleks (kuadrat, kuasa, punca kuasa dua)
- Menghasilkan pembolehubah kompleks
- Dapatkan bahagian nyata dan khayalan bagi nombor kompleks:real,imagatribut
- Dapatkan nombor kompleks konjugasi:conjugate()
- Dapatkan nilai mutlak (magnitud) nombor kompleks:abs()
- Dapatkan deklinasi (fasa) nombor kompleks:math,cmathmodul
- Penjelmaan koordinat kutub bagi nombor kompleks (perwakilan formal 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)