cmath --- 複素数用の数学関数¶
このモジュールは、複素数を扱う数学関数へのアクセスを提供しています。
このモジュール中の関数は整数、浮動小数点数または複素数を引数にとります。
また、 __complex__() または __float__() どちらかのメソッドを提供している Python オブジェクトも受け付けます。
これらのメソッドはそのオブジェクトを複素数または浮動小数点数に変換するのにそれぞれ使われ、呼び出された関数はそうして変換された結果を利用します。
注釈
分枝切断を持つ関数では、切断そのものの上で関数をどう定義するかが問題になります。 Kahan の論文 "Branch cuts for complex elementary functions" と、C99 以降の C 規格の附属書 G に従い、ゼロの符号で分枝切断のどちら側かを区別します。 実軸の一部に沿った分枝切断では虚部の符号を使い、虚軸に沿った分枝切断では実部の符号を使います。
For example, the cmath.sqrt() function has a branch cut along the
negative real axis. An argument of complex(-2.0, -0.0) is treated as
though it lies below the branch cut, and so gives a result on the negative
imaginary axis:
>>> cmath.sqrt(complex(-2.0, -0.0))
-1.4142135623730951j
But an argument of complex(-2.0, 0.0) is treated as though it lies above
the branch cut:
>>> cmath.sqrt(complex(-2.0, 0.0))
1.4142135623730951j
極座標変換 |
|
z の位相を返します |
|
z を極座標で表した値を返します |
|
極座標が r と phi である複素数 z を返します |
|
指数関数と対数関数 |
|
e の z 乗を返します |
|
base (デフォルトは e) を底とする z の対数を返します |
|
10 を底とする z の対数を返します |
|
z の平方根を返します |
|
三角関数 |
|
z の逆余弦を返します |
|
z の逆正弦を返します |
|
z の逆正接を返します |
|
z の余弦を返します |
|
z の正弦を返します |
|
z の正接を返します |
|
双曲線関数 |
|
z の逆双曲線余弦を返します |
|
z の逆双曲線正弦を返します |
|
z の逆双曲線正接を返します |
|
z の双曲線余弦を返します |
|
z の双曲線正弦を返します |
|
z の双曲線正接を返します |
|
類別関数 |
|
z の実部と虚部が両方とも有限かどうかを調べます |
|
z の実部または虚部が無限大かどうかを調べます |
|
z の実部または虚部が NaN かどうかを調べます |
|
a と b が互いに近い値かを調べる |
|
定数 |
|
π = 3.141592... |
|
e = 2.718281... |
|
τ = 2π = 6.283185... |
|
正の無限大 |
|
虚部が無限大の純虚数 |
|
非数 "Not a number" (NaN) |
|
虚部が NaN の純虚数 |
|
極座標変換¶
Python の複素数 z は、内部では 直交座標 (デカルト座標) で保持されます。
実部 z.real と 虚部 z.imag によって完全に定まります。
極座標 は複素数を表現する別の方法です。極座標では、複素数 z は半径 r と位相角 phi で定義されます。半径 r は z から原点までの距離です。位相 phi は x 軸の正の部分から原点と z を結んだ線分までの角度を反時計回りにラジアンで測った値です。
次の関数はネイティブの直交座標を極座標に変換したりその逆を行うのに使えます。
- cmath.phase(z)¶
z の位相 (偏角 とも呼びます) を浮動小数点数で返します。
phase(z)はmath.atan2(z.imag, z.real)と同じです。 結果の範囲は [-π, π] で、分枝切断は負の実軸に沿っています。z.imagがゼロの場合も、結果の符号はz.imagの符号と同じです。>>> phase(complex(-1.0, 0.0)) 3.141592653589793 >>> phase(complex(-1.0, -0.0)) -3.141592653589793
注釈
The modulus (absolute value) of a complex number z can be
computed using the built-in abs() function. There is no
separate cmath module function for this operation.
- cmath.polar(z)¶
z の極座標表現を返します。 戻り値は
(r, phi)の組で、r は z の大きさ、phi は z の位相です。polar(z)は(abs(z), phase(z))と同じです。
- cmath.rect(r, phi)¶
極座標が r と phi である複素数 z を返します。
complex(r * math.cos(phi), r * math.sin(phi))と同じです。
指数関数と対数関数¶
- cmath.exp(z)¶
自然対数の底 e の z 乗を返します。
- cmath.log(z[, base])¶
base を底とする z の対数を返します。 base を指定しない場合は z の自然対数を返します。 分枝切断は 1 つで、0 から負の実軸に沿って -∞ まで延びています。
三角関数¶
- cmath.acos(z)¶
z の逆余弦を返します。 分枝切断は 2 つあります。 一方は 1 から実軸に沿って右に ∞ まで、もう一方は -1 から実軸に沿って左に -∞ まで延びています。
- cmath.atan(z)¶
z の逆正接を返します。 分枝切断は 2 つあります。 一方は
1jから虚軸に沿って∞jまで、もう一方は-1jから虚軸に沿って-∞jまで延びています。
- cmath.cos(z)¶
z の余弦を返します。
- cmath.sin(z)¶
z の正弦を返します。
- cmath.tan(z)¶
z の正接を返します。
双曲線関数¶
- cmath.acosh(z)¶
z の逆双曲線余弦を返します。 分枝切断は 1 つで、1 から実軸に沿って左に -∞ まで延びています。
- cmath.asinh(z)¶
z の逆双曲線正弦を返します。 分枝切断は 2 つあります。 一方は
1jから虚軸に沿って∞jまで、もう一方は-1jから虚軸に沿って-∞jまで延びています。
- cmath.atanh(z)¶
z の逆双曲線正接を返します。 分枝切断は 2 つあります。 一方は
1から実軸に沿って∞まで、もう一方は-1から実軸に沿って-∞まで延びています。
- cmath.cosh(z)¶
z の双曲線余弦を返します。
- cmath.sinh(z)¶
z の双曲線正弦を返します。
- cmath.tanh(z)¶
z の双曲線正接を返します。
類別関数¶
- cmath.isfinite(z)¶
z の実部と虚部が両方とも有限なら
True、それ以外はFalseを返します。Added in version 3.2.
- cmath.isinf(z)¶
z の実部または虚部が無限大なら
True、それ以外はFalseを返します。
- cmath.isnan(z)¶
z の実部または虚部が NaN なら
True、それ以外はFalseを返します。
- cmath.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)¶
値 a と b が互いに近い場合
Trueを、そうでない場合はFalseを返します。2 つの値が近いとみなされるかは、指定された絶対許容誤差と相対許容誤差で決まります。 エラーが起きなければ、結果は
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)です。rel_tol は相対許容誤差です。 a と b の絶対値の大きい方に対する、両者の差の許容最大比率を表します。 例えば、5% の誤差を許容するには
rel_tol=0.05を渡します。 デフォルトの許容誤差は1e-09で、2 つの値がおよそ 10 進 9 桁の精度で等しいことを保証します。 rel_tol は非負で1.0未満でなければなりません。abs_tol is the absolute tolerance; it defaults to
0.0and it must be nonnegative. When comparingxto0.0,isclose(x, 0)is computed asabs(x) <= rel_tol * abs(x), which isFalsefor anyxand rel_tol less than1.0. So add an appropriate positive abs_tol argument to the call.IEEE 754 特殊値
NaN、inf、-infは IEEE の規則に従って処理されます。 具体的には、NaNは自身を含めたあらゆる値に近いとは見なされません。infと-infは自身とのみ近いと見なされます。Added in version 3.5.
参考
PEP 485 -- A function for testing approximate equality
定数¶
- cmath.pi¶
定数 π (円周率)で、浮動小数点数です。
- cmath.e¶
定数 e (自然対数の底)で、浮動小数点数です。
- cmath.tau¶
数学定数 τ で、浮動小数点数です。
Added in version 3.6.
- cmath.inf¶
浮動小数点数の正の無限大です。
float('inf')と等価です。Added in version 3.6.
- cmath.infj¶
実部がゼロ、虚部が正の無限大の複素数です。
complex(0.0, float('inf'))と等価です。Added in version 3.6.
- cmath.nan¶
A floating-point "not a number" (NaN) value. Equivalent to
float('nan'). See alsomath.nan.Added in version 3.6.
- cmath.nanj¶
実部がゼロ、虚部が NaN の複素数です。
complex(0.0, float('nan'))と等価です。Added in version 3.6.
math と同じような関数が選ばれていますが、全く同じではないので注意してください。機能を二つのモジュールに分けているのは、複素数に興味がなかったり、もしかすると複素数とは何かすら知らないようなユーザがいるからです。そういった人たちはむしろ、 math.sqrt(-1) が複素数を返すよりも例外を送出してほしいと考えます。また、 cmath で定義されている関数は、たとえ結果が実数で表現可能な場合 (虚数部がゼロの複素数) でも、常に複素数を返すので注意してください。
分枝切断 (branch cut) について: 分枝切断は、関数が連続でなくなる曲線で、多くの複素関数に必要なものです。 複素関数を計算する場合、分枝切断を理解していることを前提とします。 詳しくは、初歩的すぎない複素関数の教科書を参照してください。 数値計算に適した分枝切断の選び方については、次の文献が参考になります。
参考
Kahan, W: Branch cuts for complex elementary functions; or, Much ado about nothings's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the art in numerical analysis. Clarendon Press (1987) pp165--211.