2021-04-04に投稿

Python 標準ライブラリ cmath 数学関数(複素数)

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)

cosh(x) 双曲線余弦

cmath.cosh(1+1j) # => (0.8337300251311491+0.9888977057628651j)

tanh(x) 双曲線正接

cmath.tanh(1+1j) # => (1.0839233273386946+0.2717525853195118j)

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)
Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント