Python’un karmaşık sayıları işlemek için standart bir türü vardır, COMPLEX türü. Sadece basit hesaplamalar yapmak istiyorsanız, herhangi bir modülü içe aktarmanıza gerek yoktur, ancak standart kitaplık cmath’ını içe aktarırsanız, karmaşık sayılara karşılık gelen matematiksel işlevleri de (üssel, logaritmik, trigonometrik vb.) kullanabilirsiniz.
Aşağıdaki içerikler burada örnek kod ile açıklanmıştır.
- Karmaşık değişkenler oluşturun
- Gerçek ve hayali parçaları alın:
real
,imag
bağlanmak - Eşlenik karmaşık sayıları alın:
conjugate()
yöntem - Mutlak değer al (büyüklük):
abs()
fonksiyon (örneğin matematik, programlama, programlama) - Sapma elde et (faz):
math
,cmath
modül - Kutupsal koordinat dönüşümü (kutupsal form gösterimi):
math
,cmath
modül - Karmaşık sayıların hesaplanması (dörtlük, kuvvetler, karekökler)
- Karmaşık değişkenler oluşturun
- Karmaşık sayıların gerçek ve sanal kısımlarını alın:real,imagbağlanmak
- Eşlenik karmaşık sayıları alın:conjugate()
- Karmaşık bir sayının mutlak değerini (büyüklüğünü) elde edin:abs()
- Karmaşık bir sayının sapmasını (fazını) elde edin:math,cmathmodül
- Karmaşık sayıların kutupsal koordinat dönüşümü (kutupsal biçimsel gösterim):math,cmathmodül
- Karmaşık sayıların hesaplanması (dörtlük, kuvvetler, karekökler)
Karmaşık değişkenler oluşturun
Sanal birimi j ile gösterip aşağıdakini yazınız, i olmadığına dikkat ediniz.
c = 3 + 4j
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Hayali kısım 1 ise, bunun atlanması NameError ile sonuçlanır. İlk önce j adlı bir değişken tanımlanırsa, o değişken olarak kabul edilir.
1j
Açıkça bu şekilde belirtilmelidir.
# c = 3 + j
# NameError: name 'j' is not defined
c = 3 + 1j
print(c)
# (3+1j)
Gerçek kısım 0 ise, atlanabilir.
c = 3j
print(c)
# 3j
0’ın hayali kısmı olan bir değeri karmaşık karmaşık tip olarak tanımlamak istiyorsanız, açıkça 0 yazın. Aşağıda açıklandığı gibi, karmaşık tür ile tamsayı türü veya kayan nokta türü arasında işlemler gerçekleştirilebilir.
c = 3 + 0j
print(c)
# (3+0j)
Gerçek ve sanal parçalar kayan noktalı kayan nokta tipi olarak belirtilebilir. Üstel gösterim de kabul edilebilir.
c = 1.2e3 + 3j
print(c)
# (1200+3j)
Aynı zamanda, “karmaşık(gerçek kısım, hayali kısım)”da olduğu gibi “karmaşık” tipinde bir kurucu tarafından da oluşturulabilir.
c = complex(3, 4)
print(c)
print(type(c))
# (3+4j)
# <class 'complex'>
Karmaşık sayıların gerçek ve sanal kısımlarını alın:real,imagbağlanmak
Karmaşık bir kompleks tipinin reel ve imajiner kısımları, sırasıyla real ve imag öznitelikleri ile elde edilebilir. Her ikisi de kayan noktalı kayan nokta türleridir.
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'>
Salt okunur ve değiştirilemez.
# c.real = 5.5
# AttributeError: readonly attribute
Eşlenik karmaşık sayıları alın:conjugate()
Eşlenik karmaşık sayıları elde etmek için conjugate() yöntemini kullanın.
c = 3 + 4j
print(c.conjugate())
# (3-4j)
Karmaşık bir sayının mutlak değerini (büyüklüğünü) elde edin:abs()
Karmaşık bir sayının mutlak değerini (büyüklüğünü) elde etmek için yerleşik abs() işlevini kullanın.
c = 3 + 4j
print(abs(c))
# 5.0
c = 1 + 1j
print(abs(c))
# 1.4142135623730951
Karmaşık bir sayının sapmasını (fazını) elde edin:math,cmathmodül
Karmaşık bir sayının sapmasını (fazını) elde etmek için matematik veya cmath modülünü kullanın.
cmath modülü, karmaşık sayılar için bir matematiksel fonksiyon modülüdür.
Tanımlandığı gibi ters tanjant işlevi math.atan2() ile hesaplanabilir veya sapmayı (faz) döndüren cmath.phase() kullanılabilir.
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
Her iki durumda da elde edilebilecek açı birimi radyandır. Dereceye dönüştürmek için math.degrees() öğesini kullanın.
print(math.degrees(cmath.phase(c)))
# 45.0
Karmaşık sayıların kutupsal koordinat dönüşümü (kutupsal biçimsel gösterim):math,cmathmodül
Yukarıda bahsedildiği gibi, bir karmaşık sayının mutlak değeri (büyüklük) ve sapma (faz) elde edilebilir, ancak cmath.polar() kullanılarak bunlar bir (mutlak değer, sapma) demeti olarak birlikte elde edilebilir.
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
Kutupsal koordinatlardan Kartezyen koordinatlara dönüştürme cmath.rect() kullanılarak yapılır. cmath.rect(mutlak değer, sapma) ve benzer bağımsız değişkenler, eşdeğer karmaşık karmaşık karmaşık türünün değerlerini elde etmek için kullanılabilir.
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)
Gerçek ve sanal kısımlar, kosinüs matematik.cos() ve sinüs matematik.sin() tarafından mutlak değerlerden ve sapma açılarından hesaplanan sonuçlara eşdeğerdir.
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
Karmaşık sayıların hesaplanması (dörtlük, kuvvetler, karekökler)
Normal aritmetik operatörler kullanılarak dört aritmetik işlem ve güç hesaplaması yapılabilir.
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)
Karekök **0.5 ile hesaplanabilir, ancak hata verir. cmath.sqrt() tam değeri hesaplamak için kullanılabilir.
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
Ayrıca karmaşık türler, int türleri ve kayan nokta türleri ile aritmetik işlemler gerçekleştirebilir.
print(c1 + 3)
# (6+4j)
print(c1 * 0.5)
# (1.5+2j)