「Python3」cmath(複素数の数学関数)

cmath cmath

複素数の数学関数モジュールcmathで使用できる関数を説明します。

極座標変換

極座標変換 説明
cmath.phase(x) xの位相を浮動小数点数で返す
cmath.polar(x) xの極座標表現を返す
cmath.rect(r, phi) 複素数を返す

cmath.phase(x)

xの位相を浮動小数点数で返します。

<ソースコード>
z = 1 + 1j
print(cmath.phase(z))
<出力結果>
0.7853981633974483

<数式>\begin{eqnarray}
z &=& x+jy \\
\theta &=& \tan^{-1}{\frac{y}{x}}
\end{eqnarray}

cmath.polar(x)

xの極座標表現を返します。

<ソースコード>
z = 1 + 1j
print(cmath.polar(z))
<出力結果>
(1.4142135623730951, 0.7853981633974483)

<数式>\begin{eqnarray}
z &=& x+jy \\
r &=& \sqrt{x^2+y^2} \\
\theta &=& \tan^{-1}{\frac{y}{x}}
\end{eqnarray}

cmath.rect(r, phi)

複素数を返します。

<ソースコード>
z = 1 + 1j
print(cmath.rect(1.4142135623730951, 0.7853981633974483))
<出力結果>
(1.0000000000000002+1.0000000000000002j)

<数式>\begin{eqnarray}
re^{j\theta}&=&r(\cos\theta+j\sin\theta) \\
&=&r\cos\theta+jr\sin\theta \\
\end{eqnarray}

指数関数と対数関数

指数関数と対数関数 説明
cmath.exp(x) eを自然対数の底として、eのx乗を返す
cmath.log(x[, base]) baseを底とするxの対数を返す
baseを指定しない場合は、xの自然対数を返す
cmath.log10(x) xの底を10とする対数を返す
cmath.sqrt(x) xの平方根を返す

cmath.exp(x)

eを自然対数の底として、eのx乗を返します。

<ソースコード>
z = 1 + 1j
print(cmath.exp(z))
<出力結果>
(1.4686939399158851+2.2873552871788423j)

数式\begin{eqnarray}
e^{x+jy} &=& e^{x}e^{jy} \\
&=& e^{x}\left(\cos(y)+j\sin(y)\right) \\
&=& e^{x}\cos(y)+je^{x}\sin(y) \\
\end{eqnarray}

cmath.log(x[, base])

baseを底とするxの対数を返します。baseを指定しない場合は、xの自然対数を返します。

<ソースコード>
z = 1 + 1j
print(cmath.log(z))
<出力結果>
(0.34657359027997264+0.7853981633974483j)

数式\begin{eqnarray}
\log_{}(x+jy) &=& \log_{}(re^{j\theta}) \\
&=& \log_{}(r)+\log_{}(e^{j\theta}) \\
&=& \log_{}(r)+j\theta \\
\end{eqnarray}

cmath.log10(x)

xの底を10とする対数を返します。

<ソースコード>
z = 1 + 1j
print(cmath.log10(z))
<出力結果>
(0.15051499783199057+0.3410940884604603j)

数式\begin{eqnarray}
\log_{10}(x+jy) &=& \log_{10}(re^{j\theta}) \\
&=& \log_{10}(r)+\log_{10}(e^{j\theta}) \\
&=& \log_{10}(r)+{j\theta}\log_{10}(e) \\
\end{eqnarray}

cmath.sqrt(x)

xの平方根を返します。

<ソースコード>
print(cmath.sqrt(5-12j))
<出力結果>
(3-2j)

数式\begin{eqnarray}
(x+jy)^2 &=& 5-j12 \\
x^2-y^2+j2xy &=& 5-j12
\end{eqnarray}\begin{eqnarray}
\left\{
\begin{array}{ll}
x^2-y^2=5 & (1) \\
2xy=-12 & (2)
\end{array}
\right.
\end{eqnarray}\begin{eqnarray}
x^2-y^2 &=& 5 \\
x^4-x^2y^2-5x^2 &=& 0
\end{eqnarray}(2)に \(xy=-6\) を代入\begin{eqnarray}
x^4-x^2y^2-5x^2 &=& 0 \\
x^4-5x^2-36 &=& 0 \\
(x^2-9)(x^2+4) &=& 0 \\
x^2 &=& 9, -4 \\
\end{eqnarray}\(x\neq-4\)より、\begin{eqnarray}
x &=& \pm3
\end{eqnarray}\(xy=-6\)より、\begin{eqnarray}
y &=& \mp2
\end{eqnarray}\begin{eqnarray}
\{\pm{(3-j2)}\}^2 &=& (3-j2)^2 \\
&=& 9-4-j12 \\
&=& 5-j12
\end{eqnarray}よって、\(3-j2\)

三角関数

三角関数 説明
cmath.acos(x) xの逆余弦を返す
cmath.asin(x) xの逆正弦を返す
cmath.atan(x) xの逆正接を返す
cmath.cos(x) xの余弦を返す
cmath.sin(x) xの正弦を返す
cmath.tan(x) xの正接を返す

cmath.acos(x)

xの逆余弦を返します。

<ソースコード>
z = 1 + 1j
print(cmath.acos(z))
<出力結果>
(0.9045568943023814-1.0612750619050357j)

数式\begin{eqnarray}
\arccos{z}=\frac{1}{j}\log{\left(z+\sqrt{z^2-1}\right)}
\end{eqnarray}

cmath.asin(x)

xの逆正弦を返します。

<ソースコード>
z = 1 + 1j
print(cmath.asin(z))
<出力結果>
(0.6662394324925153+1.0612750619050357j)

数式\begin{eqnarray}
\arcsin{z}=\frac{1}{j}\log{\left(jz+\sqrt{1-z^2}\right)}
\end{eqnarray}

cmath.atan(x)

xの逆正接を返します。

<ソースコード>
z = 1 + 1j
print(cmath.atan(z))
<出力結果>
(1.0172219678978514+0.40235947810852507j)

数式\begin{eqnarray}
\arctan{z}=\frac{j}{2}\log{\left(\frac{j+z}{j-z}\right)}
\end{eqnarray}

cmath.cos(x)

xの余弦を返します。

<ソースコード>
print(cmath.cos(cmath.pi))
<出力結果>
(-1-0j)

数式\begin{eqnarray}
\cos{z}=\frac{e^{iz}+e^{-iz}}{2}
\end{eqnarray}

cmath.sin(x)

xの正弦を返します。

<ソースコード>
print(cmath.sin(cmath.pi/2))
<出力結果>
(1+0j)

数式\begin{eqnarray}
\sin{z}=\frac{e^{jz}-e^{-jz}}{j2}
\end{eqnarray}

cmath.tan(x)

xの正接を返します。

<ソースコード>
print(cmath.tan(cmath.pi/4))
<出力結果>
(0.9999999999999999+0j)

数式\begin{eqnarray}
\tan{z} = \frac{\sin{z}}{\cos{z}} = \frac{e^{jz}-e^{-jz}}{j(e^{iz}+e^{-iz})}
\end{eqnarray}

双曲線関数

双曲線関数 説明
cmath.acosh(x) xの逆双曲線余弦を返す
cmath.asinh(x) xの逆双曲線正弦を返す
cmath.atanh(x) xの逆双曲線正接を返す
cmath.cosh(x) xの双曲線余弦を返す
cmath.sinh(x) xの双曲線正弦を返す
cmath.tanh(x) xの双曲線正接を返す

cmath.acosh(x)

xの逆双曲線余弦を返します。

<ソースコード>
z = 2 + 1j
print(cmath.acosh(z))
<出力結果>
(1.4693517443681852+0.5073563032171445j)

数式\begin{eqnarray}
\cosh^{-1}{z}=\log{\left(z+\sqrt{z^2-1}\right)}
\end{eqnarray}

cmath.asinh(x)

xの逆双曲線正弦を返します。

<ソースコード>
z = 2 + 1j
print(cmath.asinh(z))
<出力結果>
(1.5285709194809982+0.4270785863924761j)

数式\begin{eqnarray}
\sinh^{-1}{z}=\log{\left(z+\sqrt{z^2+1}\right)}
\end{eqnarray}

cmath.atanh(x)

xの逆双曲線正接を返します。

<ソースコード>
z = 2 + 1j
print(cmath.atanh(z))
<出力結果>
(0.40235947810852507+1.3389725222944935j)

数式\begin{eqnarray}
\tanh^{-1}{z}=\frac{1}{2}\log{\left(\frac{1+z}{1-z}\right)}
\end{eqnarray}

cmath.cosh(x)

xの双曲線余弦を返します。

<ソースコード>
z = 2 + 1j
print(cmath.cosh(z))
<出力結果>
(2.0327230070196656+3.0518977991517997j)

数式\begin{eqnarray}
\cosh{z}=\frac{e^z+e^{-z}}{2}
\end{eqnarray}

cmath.sinh(x)

xの双曲線正弦を返します。

<ソースコード>
z = 2 + 1j
print(cmath.sinh(z))
<出力結果>
(1.959601041421606+3.165778513216168j)

数式\begin{eqnarray}
\sinh{z}=\frac{e^z-e^{-z}}{2}
\end{eqnarray}

cmath.tanh(x)

xの双曲線正接を返します。

<ソースコード>
z = 2 + 1j
print(cmath.tanh(z))
<出力結果>
(1.0147936161466335+0.0338128260798967j)

数式\begin{eqnarray}
\tanh{z}=\frac{e^z-e^{-z}}{e^z+e^{-z}}
\end{eqnarray}

類別関数

類別関数 説明
cmath.isfinite(x) xの実部、虚部ともに有限であればTrueを返し、それ以外の場合Falseを返す
cmath.isinf(x) xの実数部または虚数部が正または負の無限大であればTrueを、そうでなければFalseを返す
cmath.isnan(x) xの実部と虚部のどちらかがNaNのときTrueを返し、それ以外の場合Falseを返す
cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0) 値aとbが互いに近い場合Trueを、そうでない場合はFalseを返す

cmath.isfinite(x)

xの実部、虚部ともに有限であればTrueを返し、それ以外の場合Falseを返します。

<ソースコード>
print(cmath.isfinite(1+1j))
<出力結果>
True

cmath.isinf(x)

xの実数部または虚数部が正または負の無限大であればTrueを、そうでなければFalseを返します。

<ソースコード>
print(cmath.isinf(cmath.inf+cmath.infj))
<出力結果>
True

cmath.isnan(x)

xの実部と虚部のどちらかがNaNのときTrueを返し、それ以外の場合Falseを返します。

<ソースコード>
print(cmath.isnan(cmath.nan+cmath.nanj))
<出力結果>
True

cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

値aとbが互いに近い場合Trueを、そうでない場合はFalseを返します。

<ソースコード>
print(cmath.isclose(1+1j, 1-(10**-10)+1j))
<出力結果>
True

定数

定数 説明
cmath.pi π(円周率)で、浮動小数点数
cmath.e e(自然対数の底)で、浮動小数点数
cmath.tau 数学定数τで、浮動小数点数
cmath.inf 浮動小数点数の正の無限大
cmath.infj 実部がゼロ、虚部が正の無限大の複素数
cmath.nan 浮動小数点数の非数”not a number”(NaN)
cmath.nanj 実部がゼロ、虚部がNaNの複素数

コメント

タイトルとURLをコピーしました