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

PythonのTopに戻る


 

 複素数型変数の四則計算

complex型の値は以下のように計算できる。

comp1 = 1 + 1j
comp2 = -3 + 3j

print(comp1+comp2)
print(comp1-comp2)
print(comp1*comp2)
print(comp1/comp2)
(-2+4j)
(4-2j)
(-6+0j)
(-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)
print(comp1.imag+comp2.imag)
-2.0
4.0

共役複素数を取得するには conjugate() 関数を用いる。

comp1 = 1 + 1j
comp2 = -3 + 3j

print(comp1.conjugate())
print(comp2.conjugate())
(1-1j)
(-3-3j)

 

 複素数型変数の大きさ(abs関数)

abs(c) で複素数値 c の大きさ(絶対値)を取得できる。

comp1 = 1 + 1j
comp2 = -3 + 3j

print(abs(comp1))
print(abs(comp2))
1.4142135623730951
4.242640687119286

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

 

 複素数のべき乗計算

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

print((2+1j)**2)
print((2+1j)**0.5)
print((2+1j)**(-1+3j))
(3+4j)
(1.455346690225355+0.34356074972251244j)
(-0.04124817484136909+0.10335818768180484j)

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}}}}}{i^{i^{.^{.^{i}}}}}$ が$$\small 0.43828293672703…+0.36059247187138…i$$という値に漸近することも確かめられる。


PythonのTopに戻る