Python 標準ライブラリ cmath 数学関数(複素数)
Publish date: 2021-04-03
Pythonには複素数に関する種々の計算を行うためのライブラリcmathが用意されています。
これを使うと例えばcmath.sqrt(3+4j) # => (2+1j)
のような計算が行えるようになります。
数学定数
pi 円周率 π
import cmath
cmath.pi # => 3.141592653589793
tau 円周率の2倍 2π
cmath.tau # => 6.283185307179586
e 自然対数の底、ネイピア数
cmath.e # => 2.718281828459045
inf 実部の無限大
cmath.inf # => inf
infj 虚部の無限大
cmath.infj # => infj
nan 実部の非数 not a number(NaN)
cmath.nan # => nan
nanj 虚部の非数 not a number(NaN)
cmath.nanj # => nanj
複素数の座標変換
polar(x) 複素数の極座標表現
cmath.polar(0) # => (0.0, 0.0)
cmath.polar(1j) # => (1.0, 1.5707963267948966)
cmath.polar(-1) # => (1.0, 3.141592653589793)
cmath.polar(1+1j) # => (1.4142135623730951, 0.7853981633974483)
phase(x) 複素数の偏角
cmath.phase(-1j) # => -1.570796326794896
cmath.phase(1-1j) # => -0.7853981633974483
cmath.phase(1) # => 0.0
cmath.phase(1 + 1j) # => 0.7853981633974483
cmath.phase(1j) # => 1.5707963267948966
cmath.phase(-1) # => 3.141592653589793
rect(r, phi) 絶対値r、偏角phiの複素数
cmath.rect(1, math.pi/4) # => (0.7071067811865476+0.7071067811865476j)
数値の判定を行う関数
isfinite(x) 実部・虚部が有限か
cmath.isfinite(1 + cmath.inf * 1j) # => False
cmath.isfinite(cmath.inf + 1j) # => False
cmath.isfinite(1 + 1j) # => True
isinf(x) 実部・虚部が無限大か
cmath.isinf(1 + cmath.inf * 1j) # => True
cmath.isinf(cmath.inf + 1j) # => True
cmath.isinf(1 + 1j) # => False
isnan(x) 実部・虚部がNaN (not a number、非数)か
cmath.isnan(1 + cmath.nan * 1j) # => True
cmath.isnan(cmath.nan + 1j) # => True
cmath.isnan(1 + 1j) # => False
isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) aとbが近いか
rel_tol:相対許容差はaとbの差をa(b)で割った値、 abt_tol:絶対許容差はa,bの差で比較する。
a,bが小さい場合は絶対許容差で比較しやすい。
cmath.isclose(1.000000001+1.000000001j, 1.000000002+1.000000002j) # => True
cmath.isclose(1.00000001+1.00000001j, 1.00000002+1.00000002j) # => False
cmath.isclose(100.01+100.01j, 100.02+100.02j , rel_tol=1e-4) # => True
cmath.isclose(100.01+100.01j, 100.02+100.02j , rel_tol=1e-5) # => False
cmath.isclose(0.000101+0.000101j, 0.000102+0.000102j , rel_tol=1e-5) # => False
cmath.isclose(0.000101+0.000101j, 0.000102+0.000102j , rel_tol=1e-5, abs_tol=1e-6) # => False
cmath.isclose(0.000101+0.000101j, 0.000102+0.000102j , rel_tol=1e-5, abs_tol=1e-5) # => True
cmath.isclose(0.000101+0.000101j, 0.000102+0.000102j , abs_tol=1e-6) # => False
cmath.isclose(0.000101+0.000101j, 0.000102+0.000102j , abs_tol=1e-5) # => True
指数関数
sqrd(x) xの平方根
cmath.sqrt(-1) # => 1j
cmath.sqrt(3+4j) # => (2+1j)
exp(x) eのx乗
cmath.exp(math.pi*1j) # => (-1+1.2246467991473532e-16j)
対数関数
log(x[, base]) 底baseの対数
base省略時は自然対数。
cmath.log(1+1j) # => (0.34657359027997264+0.7853981633974483j)
cmath.log(1+1j, 2) # => (0.5+1.1330900354567985j)
log10(x) 常用対数
cmath.log10(1+1j) # => (0.15051499783199057+0.3410940884604603j)
三角関数
sin(x) 正弦(サイン)
cmath.sin(1+1j) # => (1.2984575814159773+0.6349639147847361j)
cos(x) 余弦 (コサイン)
cmath.cos(1+1j) # => (0.8337300251311491-0.9888977057628651j)
tan(x) 正接(タンジェント)
cmath.tan(1+1j) # => (0.2717525853195118+1.0839233273386946j)
asin(x) 逆正弦(アークサイン)
cmath.asin(1.2984575814159773+0.6349639147847361j) # => (1+1j)
acos(x) 逆余弦 (アークコサイン)
cmath.acos(0.8337300251311491-0.9888977057628651j) # => (0.9999999999999999+1j)
atan(x) 逆正接(アークタンジェント)
cmath.atan(0.2717525853195118+1.0839233273386946j) # => (1+0.9999999999999999j)
双曲線関数
sinh(x) 双曲線正弦
cmath.sinh(1+1j) # => (0.6349639147847361+1.2984575814159773j)
$$ \operatorname {sinh} x={e^{x}-e^{-x} \over 2} $$
cosh(x) 双曲線余弦
cmath.cosh(1+1j) # => (0.8337300251311491+0.9888977057628651j)
$$ \operatorname {cosh} x={e^{x}+e^{-x} \over 2} $$
tanh(x) 双曲線正接
cmath.tanh(1+1j) # => (1.0839233273386946+0.2717525853195118j)
$$ \operatorname {tanh} x={\operatorname {sinh} x \over \operatorname {cosh} x} $$
asinh(x) 逆双曲線正弦
cmath.asinh(0.6349639147847361+1.2984575814159773j) # => (1+1j)
acosh(x) 逆双曲線余弦
cmath.acosh(0.8337300251311491+0.9888977057628651j) # => (1+0.9999999999999999j)
atanh(x) 逆双曲線正接
cmath.atanh(1.0839233273386946+0.2717525853195118j) # => (0.9999999999999999+1j)