本記事ではPythonで複素数を扱う方法を解説します。
Pythonで複素数を扱う際には目的に応じて、二種類の方法があります。
- 数値計算・・・標準ライブラリを使う
- 代数計算・・・SymPyライブラリを使う
数値の計算を行いたい際には前者を使用し、因数分解など代数的な扱いをしたい場合はSymPyライブラリを使用しましょう。
\[ e^{i\theta} =\cos\theta + i\sin\theta \]
複素数とは
まず複素数について簡単に解説します。
複素数とは、実数と虚数を組み合わせた数のことです。
そして、虚数とは二乗すると-1になる数であるiのことです。
このような数は実数には存在しません。
従って、複素数は実数を拡張した概念と言えます。
標準ライブラリを使う方法
事前準備
標準ライブラリを使うので特に不要です。
実装
四則演算
複素数の四則演算を行うにはまず、複素数オブジェクトを作成する必要があります。
それ以外は通常の四則演算と同じです。
# 複素数オブジェクトの生成
a = complex(1+2j)
b = complex(2+1j)
# 足し算
a + b # (3+3j)
# 引き算
a - b # (-1+1j)
# 掛け算
a * b # 5j
# 割り算
c = complex(2+1j)
d = complex(4+2j)
d/c # (2+0j)
実部、虚部の取得
実部はreal
、虚部はimag
を使用することで取得できます。
# 複素数オブジェクトの生成
a = complex(1+2j)
# 実部の取得
a.real # (1.0)
# 虚部の取得
a.imag # (2.0)
共役の複素数
共役の複素数を算出するにはconjugate()
を使用します。
# 複素数オブジェクトの生成
a = complex(1+2j)
# 共役の複素数
a.conjugate() # (1-2j)
複素数の絶対値
複素数の絶対値を算出するにはabs()
を使用します。
# 複素数オブジェクトの生成
a = complex(3+4j)
# 複素数の絶対値
a.abs() # 5.0
SymPyライブラリを使う方法
事前準備
まずは事前準備としてSymPyのインストールを下記のコマンドで行います。
pip install sympy
これで準備完了です。
実装
先ほどと同じことをSymPyを用いて算出する方法を紹介しましょう。
四則演算
SymPyを使用した四則演算は下記のとおりです。
# ライブラリのインポート
import sympy
# 複素数の定義
a = 1+2*sympy.I
b = 2+sympy.I
# 足し算
a + b # 3 + 3*I
# 引き算
a - b # -1 + I
# 掛け算
(a * b).simplify() # 5*I
# 割り算
c = 2+sympy.I
d = 4+2*sympy.I
(d/c).simplify() # 2
標準ライブラリとの違いはsimplify()
を使う必要があります。simplify()
を使わないと下記のように式が簡略化されないままになってしまいます。
# 掛け算(simplifyを使わない方法)
a * b # (1 + 2*I)*(2 + I)
# 掛け算
(a * b).simplify() # 5*I
# 割り算(simplifyを使わない方法)
d/c # (2 - I)*(4 + 2*I)/5
# 割り算
(d/c).simplify() # 2
実部、虚部の取得
実部の取得にはsympy.re
、虚部の取得にはsympy.im
を使用します。
# 複素数の定義
a = 1+2*sympy.I
# 実部の取得
sympy.re(a) # 1
# 虚部の取得
sympy.im(a) # 2
共役の複素数
共役の複素数な複素数を算出するにはsympy.conjugate
を使用します。
# 複素数の定義
a = 1+2*sympy.I
# 共役の複素数
sympy.conjugate(a) # 1.0 - 2.0*I
複素数の絶対値
絶対値を算出するにはsympy.Abs
を使用します。
# 複素数の定義
a = 3+4*sympy.I
# 複素数の絶対値
sympy.Abs(a) # 5
SymPyライブラリを使った方が良い場合
冒頭で述べた通り、数値計算をする際には標準ライブラリ、代数計算をする場合にはSymPyライブラリを使うのがオススメです。
試しにSymPyライブラリを使った方がいい例を二つ紹介します。
因数分解
SymPyライブラリを使うと因数分解が可能です。これは数値計算しかできない標準ライブラリには不可能です。
# ライブラリのインポート
import sympy
# 複素数の定義
x = sympy.Symbol('x')
# 因数分解
sympy.factor(x**2 + 4, extension=[sympy.I]) # (x - 2*I)*(x + 2*I)
最後のsympy.factorの引数にextension=[sympy.I]
を含めるのがポイントです。
これがないと、虚数を含めた形での因数分解ができないので下記のような結果になってしまいます。
# 因数分解 extension=[sympy.I]を含めない
sympy.factor(x**2 + 4) # x**2 + 4
オイラーの公式
次に三角関数同士からオイラーの公式が算出されるか確かめてみましょう。
# ライブラリのインポート
import sympy
# 複素数の定義
x = sympy.Symbol('x')
# オイラーの公式
(sympy.cos(x)+sympy.sin(x)*sympy.I).simplify() # exp(I*x)
きちんと公式通りになっていることが確認できます。
数値計算やSymPyライブラリの使い方についても学べます。
