複素数型変数の四則計算
complex型の値は以下のように計算できる。
comp1 = 1 + 1j comp2 = -3 + 3j print(comp1+comp2) # (-2+4j) print(comp1-comp2) # (4-2j) print(comp1*comp2) # (-6+0j) print(comp1/comp2) # (-0-0.3333333333333333j)
虚部が$1$の場合、「1」を省略するとNameErrorになる。もし j という名前の変数が先に定義されていると、その変数と見なされてしまうので注意。また、虚部が$0$の値をcomplex型の変数として定義したい場合は (-6+0j) のように$0$を明示的に書くこと。
実部と虚部、共役複素数を取得する
c.real で複素数値 c の実部を、c.imag で複素数値 c の虚部を取得できる。
comp1 = 1 + 1j comp2 = -3 + 3j print(comp1.real+comp2.real) # -2.0 print(comp1.imag+comp2.imag) # 4.0 print(comp1.conjugate()) # (1-1j) print(comp2.conjugate()) # (-3-3j)
共役複素数を取得するには conjugate() 関数を用いる。
複素数型変数の大きさ(abs関数)
abs(c) で複素数値 c の大きさ(絶対値)を取得できる。
comp1 = 1 + 1j comp2 = -3 + 3j print(abs(comp1)) # 1.4142135623730951 print(abs(comp2)) # 4.242640687119285
複素数のべき乗計算
複素数のべき乗計算は以下のように書く。
print((2+1j)**2) # (3+4j) print((2+1j)**0.5) # (1.455346690225355+0.34356074972251244j) print((2+1j)**(-1+3j)) # (-0.0412481748413691+0.10335818768180485j)
2+1j としている点に気を付けよう。2+j では動作しないので注意。(2+1j)**(-1+3j) は $(2+i)^{-1+3i}$ を表すが、複素数の複素数乗はmathモジュールをインポートしなくても計算可能である。
例えば以下のようにすれば $i^i$ が実数であることが確かめられる。
print(1j ** 1j) # (0.20787957635076193+0j)
また、
num = 1j for i in range(10000): num = 1j ** num print(num)
などとすれば、テトレーション $i^{i^{i^{.^{.^{.}}}}}$ が$$\small 0.4382829367270323…+0.3605924718713855…i$$という値に漸近することが確かめられる。