【Python】複素数型変数の扱い方

PythonのTopに戻る


 

 複素数型変数の四則計算

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

返り値は float型 の値となる。

 

 複素数のべき乗計算

複素数のべき乗計算は以下のように書く。

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$$という値に漸近することが確かめられる。


PythonのTopに戻る