【初心者向け】Pythonの複素数(complex型)の使い方を徹底解説!作成方法・四則演算・cmathモジュールまで
複素数は、実数から生成される数値です。Pythonでは、直接代入文を使うか、complex()関数を使うことで、簡単に複素数を作成できます。
複素数は、2つの実数(実部と虚部)を扱う場面で主に活用されます。例えば、電圧(V)と電流(C)で定義される電気回路の解析や、幾何学、科学計算、微積分などの分野で広く利用されています。
構文
complex([real[, imag]])
Pythonでシンプルな複素数を作成する
まずは、最も基本的な複素数の作成方法を見てみましょう。リテラルで直接記述する方法と、complex()関数を使う方法の2通りがあります。
>>> c = 3 + 6j >>> print(type(c)) <class 'complex'> >>> print(c) (3+6j) >>> >>> c1 = complex(3, 6) >>> print(type(c1)) <class 'complex'> >>> print(c1) (3+6j)
実行結果からわかるように、Pythonの複素数はcomplex型として扱われます。それぞれの複素数は、1つの実部と1つの虚部で構成されています。
複素数の属性と関数
複素数オブジェクトには、実部を取得する.real、虚部を取得する.imag、共役複素数を返す.conjugate()といった便利な属性やメソッドが用意されています。
>>> # 複素数
>>> c = (3 + 6j)
>>>
>>> # 実部を取得
>>> print('Complex Number: Real Part is = ', c.real)
Complex Number: Real Part is = 3.0
>>>
>>> # 虚部を取得
>>> print('Complex Number: Imaginary Part is = ', c.imag)
Complex Number: Imaginary Part is = 6.0
>>>
>>> # 共役複素数を取得
>>> print('Complex Number: conjugate Part = ', c.conjugate())
Complex Number: conjugate Part = (3-6j)複素数の数学的計算
複素数同士は、通常の数値と同じように四則演算を行うことができます。
>>> # 1つ目の複素数
>>> c1 = 3 + 6j
>>> # 2つ目の複素数
>>> c2 = 6 + 15j
>>>
>>> # 加算
>>> print("Addition of two complex number =", c1 + c2)
Addition of two complex number = (9+21j)
>>>
>>> # 減算
>>> print("Subtraction of two complex number =", c1 - c2)
Subtraction of two complex number = (-3-9j)
>>>
>>> # 乗算
>>> print("Multiplication of two complex number =", c1 * c2)
Multiplication of two complex number = (-72+81j)
>>>
>>> # 除算
>>> print("Division of two complex number =", c1 / c2)
Division of two complex number = (0.4137931034482759-0.03448275862068964j)ただし、複素数には大小関係という概念がないため、<、>、<=、>=といった比較演算子はサポートされていません。使用するとTypeErrorが発生します。
>>> c2 <= c2 Traceback (most recent call last): File "<pyshell#40>", line 1, in <module> c2 <= c2 TypeError: '<=' not supported between instances of 'complex' and 'complex'
Pythonのcmathモジュールとは
Pythonのcmathモジュールは、複素数に対する数学関数へのアクセスを提供します。ここでは、cmathモジュールを使った複素数の重要な機能をいくつか紹介します。
複素数の偏角(フェーズ)を求める
複素数の偏角(位相)とは、実軸と、虚部を表すベクトルとの間の角度のことです。
mathモジュールおよびcmathモジュールが返す偏角の単位はラジアンです。度数法に変換したい場合は、numpy.degrees()関数を使用します。
import cmath, math, numpy
c = 4 + 4j
# 偏角を取得
phase = cmath.phase(c)
print('4+ 4j Phase =', phase)
print('Phase in Degrees =', numpy.degrees(phase))
print('-4-4j Phase =', cmath.phase(-4-4j), 'radians. Degrees =', numpy.degrees(cmath.phase(-4-4j)))
# math.atan2()関数でも偏角を求められる
print('Complex number phase using math.atan2() =', math.atan2(2, 1))実行結果
4+ 4j Phase = 0.7853981633974483 Phase in Degrees = 45.0 -4-4j Phase = -2.356194490192345 radians. Degrees = -135.0 Complex number phase using math.atan2() = 1.1071487177940904
cmathモジュールの定数
cmathモジュールには、複素数計算で使用できる定数がいくつか用意されています。
import cmath
print('π =', cmath.pi)
print('e =', cmath.e)
print('tau =', cmath.tau)
print('Positive infinity =', cmath.inf)
print('Positive Complex infinity =', cmath.infj)
print('NaN =', cmath.nan)
print('NaN Complex =', cmath.nanj)実行結果
π = 3.141592653589793 e = 2.718281828459045 tau = 6.283185307179586 Positive infinity = inf Positive Complex infinity = infj NaN = nan NaN Complex = nanj
冪乗と対数関数
cmathモジュールは、対数演算や冪乗演算に便利な関数も提供しています。
import cmath
c = 1 + 2j
print('e^c =', cmath.exp(c))
print('log2(c) =', cmath.log(c, 2))
print('log10(c) =', cmath.log10(c))
print('sqrt(c) =', cmath.sqrt(c))実行結果
e^c = (-1.1312043837568135+2.4717266720048188j) log2(c) = (1.1609640474436813+1.5972779646881088j) log10(c) = (0.3494850021680094+0.480828578784234j) sqrt(c) = (1.272019649514069+0.7861513777574233j)
三角関数
import cmath
c = 2 + 4j
print('arc sine value:\n ', cmath.asin(c))
print('arc cosine value :\n', cmath.acos(c))
print('arc tangent value of complex number c :\n', cmath.atan(c))
print('sine value:\n', cmath.sin(c))
print('cosine value:\n', cmath.cos(c))
print('tangent value:\n', cmath.tan(c))実行結果
arc sine value: (0.4538702099631225+2.198573027920936j) arc cosine value : (1.1169261168317741-2.198573027920936j) arc tangent value of complex number c : (1.4670482135772953+0.20058661813123432j) sine value: (24.83130584894638-11.356612711218174j) cosine value: (-11.36423470640106-24.814651485634187j) tangent value: (-0.0005079806234700387+1.0004385132020523j)
双曲線関数
import cmath
c = 2 + 4j
print('Inverse hyperbolic sine value: \n', cmath.asinh(c))
print('Inverse hyperbolic cosine value: \n', cmath.acosh(c))
print('Inverse hyperbolic tangent value: \n', cmath.atanh(c))
print('Hyperbolic sine value: \n', cmath.sinh(c))
print('Hyperbolic cosine value: \n', cmath.cosh(c))
print('Hyperbolic tangent value: \n', cmath.tanh(c))実行結果
Inverse hyperbolic sine value: (2.183585216564564+1.096921548830143j) Inverse hyperbolic cosine value: (2.198573027920936+1.1169261168317741j) Inverse hyperbolic tangent value: (0.09641562020299617+1.3715351039616865j) Hyperbolic sine value: (-2.370674169352002-2.8472390868488278j) Hyperbolic cosine value: (-2.4591352139173837-2.744817006792154j) Hyperbolic tangent value: (1.0046823121902348+0.03642336924740368j)
まとめ
Pythonでは、リテラルやcomplex()関数を使って手軽に複素数を扱えます。実部・虚部の取得や共役複素数の計算はもちろん、cmathモジュールを活用すれば、偏角の算出や三角関数・双曲線関数など、高度な数学処理も簡単に実装できます。科学技術計算や信号処理などで複素数が必要になった際は、ぜひ本記事の内容を参考にしてください。
-
Pythonでカンマ区切りの整数文字列を複素数に変換する方法
Pythonでは、カンマで区切られた2つの整数が含まれる文字列(例:1,2)を、complex()関数を使って複素数へと変換できます。この記事では、その具体的な手順をわかりやすく解説します。 手順1:文字列をsplit()メソッドで分割する まず、文字列に含まれる2つの整数はカンマ(,)で区切られています。そこで、split()メソッドを使って文字列を分割し、数字からなる2つの文字列要素を持つリストを作成します。 >>> s = 1,2.split(,) >>> s [1, 2] split(,)により、元の文字列がカンマの位置で分割され、結果として [1,
-
Pythonで複素数を扱う方法:基本の書き方とcomplex()関数の使い方を解説
複素数とは?複素数とは、2つの実数 a と b の組み合わせで表される数であり、一般的に「a+bi」または「a+ib」という形式で書かれます。ここで i は虚数単位と呼ばれ、第2項であることを示すラベルのような役割を果たします。数学的には、虚数単位 i は次の性質を持ちます。i² = -1なお、分野によっては i の代わりに j が使われることもあります(特に電気工学などでは j が標準的です)。Pythonでの複素数の基本的な書き方Pythonでは、虚数部分に接尾辞 j を付けることで、複素数リテラルをそのまま記述できます。変数への代入は以下のように行います。>>> a =