Pythonでは、数学的な複素数を簡単に扱うことができ、これには専用のデータ型であるcomplex型が用意されています。複素数は、実部と虚部を持ち、虚数単位にはPythonではjを使用します。この記事では、Pythonにおけるcomplex型の基本的な使い方や計算方法を詳しく解説します。

complex型とは?

複素数は、実部と虚部からなる数で、通常は$a + bi$の形式で表されます。ここで、$a$は実部、$b$は虚部、$i$は虚数単位です。Pythonでは、この虚数単位をiではなくjとして表します。 例えば、$3 + 4i$という複素数は、Pythonでは3 + 4jと記述します。複素数は数値計算や信号処理、物理学など幅広い分野で使用されます。

複素数の作成方法

Pythonでは複素数を作成するために、2つの方法があります。

方法1: real + imagjの形式

z = 3 + 4j
print(z)  # 出力: (3+4j)

このように、直接実部と虚部を指定して複素数を作成できます。

方法2: complex()関数を使用する

Pythonの組み込み関数complex()を使って複素数を作成することも可能です。

z = complex(3, 4)
print(z)  # 出力: (3+4j)

どちらの方法でも、複素数が作成されます。

複素数の実部と虚部にアクセスする

作成した複素数の実部や虚部にアクセスするには、realおよびimagプロパティを使用します。

z = 3 + 4j
print(z.real)  # 出力: 3.0 (実部)
print(z.imag)  # 出力: 4.0 (虚部)

これにより、複素数の実部と虚部を個別に取得することができます。

複素数の基本的な操作

複素数同士の加減乗除は、通常の数値と同様に扱うことができます。Pythonでは、複素数の四則演算やその他の操作がサポートされています。

加算

z1 = 2 + 3j
z2 = 1 + 4j
result = z1 + z2
print(result)  # 出力: (3+7j)

減算

result = z1 - z2
print(result)  # 出力: (1-1j)

乗算

result = z1 * z2
print(result)  # 出力: (-10+11j)

除算

result = z1 / z2
print(result)  # 出力: (0.8235294117647058-0.29411764705882354j)

これらの演算は、実部と虚部を適切に処理して結果を返します。

絶対値(大きさ)と偏角

複素数の大きさ(絶対値)は、ピタゴラスの定理に基づいて計算され、abs()関数を使って求めることができます。また、複素数の偏角(角度)はcmathモジュールを使って求めることが可能です。

絶対値を求める

z = 3 + 4j
magnitude = abs(z)
print(magnitude)  # 出力: 5.0

ここで、複素数$3 + 4j$の大きさは、$\sqrt7 = 5$です。

偏角を求める

偏角(角度)は、cmath.phase()関数を使って求めます。結果はラジアン単位で返されます。

import cmath
z = 3 + 4j
phase = cmath.phase(z)
print(phase)  # 出力: 0.9272952180016122

この結果はラジアンなので、度数法に変換するにはmath.degrees()関数を使います。

import math
degree = math.degrees(phase)
print(degree)  # 出力: 53.13010235415599

極形式への変換

複素数は極形式(大きさと角度)で表すこともできます。cmath.polar()関数を使うと、複素数を極形式で取得できます。

import cmath
z = 3 + 4j
polar = cmath.polar(z)
print(polar)  # 出力: (5.0, 0.9272952180016122)

結果は、(絶対値, 偏角) のタプルで返されます。

応用: フーリエ変換などでの利用

複素数は信号処理やフーリエ変換など、工学的な計算で頻繁に使われます。例えば、フーリエ変換は複素数を使って信号を周波数成分に分解する手法であり、複素数の演算がその中心にあります。 Pythonでは、numpyscipyといったライブラリを使って、複雑な複素数演算やフーリエ変換を簡単に実行できます。

import numpy as np
# サンプルデータにフーリエ変換を適用
data = np.array([0, 1, 2, 3])
fft_result = np.fft.fft(data)
print(fft_result)  # 出力: 複素数の配列

このように、複素数は単なる数学的な概念にとどまらず、さまざまな実用的な応用が可能です。

まとめ

Pythonのcomplex型を使うと、複素数を直感的に扱うことができます。複素数の加減乗除、絶対値の計算、偏角の取得、極形式への変換など、複素数に関するあらゆる操作を簡単に実行できます。複素数は数学や物理学だけでなく、信号処理やフーリエ変換など、実世界の問題解決にも重要な役割を果たします。