Pythonで複素数の計算をする
Pythonには複素数についても豊富な機能があります。はじめに、複素数型の変数の定義や実部、虚部、共役複素数を求める関数について取り上げます。
複素数の基本的な計算方法
虚数単位の計算
虚数単位は、英語ではimaginary numberというので通常は英字iで表します。iは次の通り計算することができます。
ところが、pythonでは虚数単位を英字のjで表現します。これは電気の世界で電流の強さintensityといい英字iが使われているので、その次ということでjになったといわれています。pythonでは1×虚数単位を1jというように表現します。
- # 1 虚数単位の計算
- im = 1j
- print(im)
- print(type(im))
- print(im**2)
- print(type(im))
1j(-1+0j)
1jを変数imに代入し、出力すると1jと表示され、type関数で型を調べるとcomplex(複素数型)になります。複素数は英語でcomplex numberというところから由来しています。imを2乗すると、虚数単位の定義からわかる通り-1になりますが、pythonでは、(-1+0j)と複素数型で表現します。
複素数の表現
複素数は実数と虚数の和で表現します。複素数はzで表すのが一般的です。ドイツ語でのkomplexen Zahlenからきているという説もあります。
- #2 複素数の表現
- cn = 2 + 3j
- print(cn)
- cf=complex(2,3)
- print(cf)
- print(cn==cf)
(2+3j) (2+3j) True
複素数は、2行目のように定義通り表現する方法と、4行目のようにcomplex関数で計算する方法がありますが、6行目のように結果は同じになります。
このように、complex型をまとめると次の通りになります。
複素数型に関わるメソッド
複素数に関する関数
- #3 複素数に関する関数
- print(cf.real)
- print(cf.imag)
- print(cf.conjugate())
read-only attributes
2.0z 3.0 (2-3j)
複素数型の変数にrealを適用すると実部、imagを適用すると虚部を取り出すことができます。また、ある複素数に対して、虚部の正負を反転したものを共益複素数といいます。共益複素数はconjugateメソッドで取り出すことできます。
複素数を扱うcmathモジュール
虚数単位のi(Pythonではj)の計算をしてみます。
- #4 負の実数の平方根の計算
- import math
- try:
- print((-1)**0.5)
- print(math.sqrt(-1))
- except Exception as e:
- print(str(type(e)))
(6.123233995736766e-17+1j)
- 4行目では-1の0.5乗を計算すると複素数型になりますが、実部が0になるはずなのに約6×10のマイナス17乗とわずかですが誤差が生じてしまいます。
- 5行目でmathモジュールのsqrt関数を使って-1の平方根を計算するとvalueエラーになってしまいます。
そこで、cmathモジュールのsqrt関数を使い同じ計算をします。
- #5 cmath関数を使った
- import cmath
- z1 = cmath.sqrt(-1)
- print(z1)
- print(type(z1))
- z2 = cmath.sqrt(-1)+2
- print(z2)
1j(2+1j)
cmath関数を使うとうまくいくようです。