blob: c819a667ec23bf524425cb82202cfca370436b6c [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001:mod:`cmath` --- Mathematical functions for complex numbers
2===========================================================
3
4.. module:: cmath
5 :synopsis: Mathematical functions for complex numbers.
6
Terry Jan Reedyfa089b92016-06-11 15:02:54 -04007--------------
Georg Brandl116aa622007-08-15 14:28:22 +00008
9This module is always available. It provides access to mathematical functions
10for complex numbers. The functions in this module accept integers,
11floating-point numbers or complex numbers as arguments. They will also accept
12any Python object that has either a :meth:`__complex__` or a :meth:`__float__`
13method: these methods are used to convert the object to a complex or
14floating-point number, respectively, and the function is then applied to the
15result of the conversion.
16
Christian Heimes53876d92008-04-19 00:31:39 +000017.. note::
Georg Brandl116aa622007-08-15 14:28:22 +000018
Christian Heimes53876d92008-04-19 00:31:39 +000019 On platforms with hardware and system-level support for signed
20 zeros, functions involving branch cuts are continuous on *both*
21 sides of the branch cut: the sign of the zero distinguishes one
22 side of the branch cut from the other. On platforms that do not
23 support signed zeros the continuity is as specified below.
24
25
Mark Dickinsonc2eab892009-07-28 16:31:03 +000026Conversions to and from polar coordinates
27-----------------------------------------
Christian Heimes53876d92008-04-19 00:31:39 +000028
Mark Dickinsonc2eab892009-07-28 16:31:03 +000029A Python complex number ``z`` is stored internally using *rectangular*
30or *Cartesian* coordinates. It is completely determined by its *real
31part* ``z.real`` and its *imaginary part* ``z.imag``. In other
32words::
Christian Heimes53876d92008-04-19 00:31:39 +000033
Mark Dickinsonc2eab892009-07-28 16:31:03 +000034 z == z.real + z.imag*1j
Christian Heimes53876d92008-04-19 00:31:39 +000035
Mark Dickinsonc2eab892009-07-28 16:31:03 +000036*Polar coordinates* give an alternative way to represent a complex
37number. In polar coordinates, a complex number *z* is defined by the
38modulus *r* and the phase angle *phi*. The modulus *r* is the distance
39from *z* to the origin, while the phase *phi* is the counterclockwise
Mark Dickinson5251cce2010-01-02 14:33:10 +000040angle, measured in radians, from the positive x-axis to the line
41segment that joins the origin to *z*.
Christian Heimes53876d92008-04-19 00:31:39 +000042
Mark Dickinsonc2eab892009-07-28 16:31:03 +000043The following functions can be used to convert from the native
44rectangular coordinates to polar coordinates and back.
Christian Heimes53876d92008-04-19 00:31:39 +000045
46.. function:: phase(x)
47
Mark Dickinsonc2eab892009-07-28 16:31:03 +000048 Return the phase of *x* (also known as the *argument* of *x*), as a
49 float. ``phase(x)`` is equivalent to ``math.atan2(x.imag,
50 x.real)``. The result lies in the range [-π, π], and the branch
51 cut for this operation lies along the negative real axis,
52 continuous from above. On systems with support for signed zeros
53 (which includes most systems in current use), this means that the
54 sign of the result is the same as the sign of ``x.imag``, even when
55 ``x.imag`` is zero::
56
57 >>> phase(complex(-1.0, 0.0))
58 3.141592653589793
59 >>> phase(complex(-1.0, -0.0))
60 -3.141592653589793
61
62
63.. note::
64
65 The modulus (absolute value) of a complex number *x* can be
66 computed using the built-in :func:`abs` function. There is no
67 separate :mod:`cmath` module function for this operation.
Christian Heimes53876d92008-04-19 00:31:39 +000068
Christian Heimes53876d92008-04-19 00:31:39 +000069
70.. function:: polar(x)
71
Mark Dickinsonc2eab892009-07-28 16:31:03 +000072 Return the representation of *x* in polar coordinates. Returns a
73 pair ``(r, phi)`` where *r* is the modulus of *x* and phi is the
74 phase of *x*. ``polar(x)`` is equivalent to ``(abs(x),
75 phase(x))``.
Christian Heimes53876d92008-04-19 00:31:39 +000076
Christian Heimes53876d92008-04-19 00:31:39 +000077
78.. function:: rect(r, phi)
79
Mark Dickinsonc2eab892009-07-28 16:31:03 +000080 Return the complex number *x* with polar coordinates *r* and *phi*.
81 Equivalent to ``r * (math.cos(phi) + math.sin(phi)*1j)``.
Christian Heimes53876d92008-04-19 00:31:39 +000082
Christian Heimes53876d92008-04-19 00:31:39 +000083
Mark Dickinsonc2eab892009-07-28 16:31:03 +000084Power and logarithmic functions
85-------------------------------
Christian Heimes53876d92008-04-19 00:31:39 +000086
Mark Dickinsonc2eab892009-07-28 16:31:03 +000087.. function:: exp(x)
88
89 Return the exponential value ``e**x``.
90
91
92.. function:: log(x[, base])
93
94 Returns the logarithm of *x* to the given *base*. If the *base* is not
95 specified, returns the natural logarithm of *x*. There is one branch cut, from 0
96 along the negative real axis to -∞, continuous from above.
97
Mark Dickinsonc2eab892009-07-28 16:31:03 +000098
99.. function:: log10(x)
100
101 Return the base-10 logarithm of *x*. This has the same branch cut as
102 :func:`log`.
103
104
105.. function:: sqrt(x)
106
107 Return the square root of *x*. This has the same branch cut as :func:`log`.
108
109
110Trigonometric functions
111-----------------------
Georg Brandl116aa622007-08-15 14:28:22 +0000112
113.. function:: acos(x)
114
115 Return the arc cosine of *x*. There are two branch cuts: One extends right from
116 1 along the real axis to ∞, continuous from below. The other extends left from
117 -1 along the real axis to -∞, continuous from above.
118
119
Georg Brandl116aa622007-08-15 14:28:22 +0000120.. function:: asin(x)
121
122 Return the arc sine of *x*. This has the same branch cuts as :func:`acos`.
123
124
Georg Brandl116aa622007-08-15 14:28:22 +0000125.. function:: atan(x)
126
127 Return the arc tangent of *x*. There are two branch cuts: One extends from
Christian Heimes53876d92008-04-19 00:31:39 +0000128 ``1j`` along the imaginary axis to ``j``, continuous from the right. The
Georg Brandl116aa622007-08-15 14:28:22 +0000129 other extends from ``-1j`` along the imaginary axis to ``-∞j``, continuous
Christian Heimes53876d92008-04-19 00:31:39 +0000130 from the left.
131
Georg Brandl116aa622007-08-15 14:28:22 +0000132
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000133.. function:: cos(x)
134
135 Return the cosine of *x*.
136
137
138.. function:: sin(x)
139
140 Return the sine of *x*.
141
142
143.. function:: tan(x)
144
145 Return the tangent of *x*.
146
147
148Hyperbolic functions
149--------------------
150
151.. function:: acosh(x)
152
Mark Dickinsondfe0b232015-01-11 13:08:05 +0000153 Return the inverse hyperbolic cosine of *x*. There is one branch cut,
154 extending left from 1 along the real axis to -∞, continuous from above.
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000155
156
157.. function:: asinh(x)
158
Mark Dickinsondfe0b232015-01-11 13:08:05 +0000159 Return the inverse hyperbolic sine of *x*. There are two branch cuts:
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000160 One extends from ``1j`` along the imaginary axis to ``j``,
161 continuous from the right. The other extends from ``-1j`` along
162 the imaginary axis to ``-∞j``, continuous from the left.
163
164
Georg Brandl116aa622007-08-15 14:28:22 +0000165.. function:: atanh(x)
166
Mark Dickinsondfe0b232015-01-11 13:08:05 +0000167 Return the inverse hyperbolic tangent of *x*. There are two branch cuts: One
Christian Heimes53876d92008-04-19 00:31:39 +0000168 extends from ``1`` along the real axis to ````, continuous from below. The
Georg Brandl116aa622007-08-15 14:28:22 +0000169 other extends from ``-1`` along the real axis to ``-∞``, continuous from
Christian Heimes53876d92008-04-19 00:31:39 +0000170 above.
171
Georg Brandl116aa622007-08-15 14:28:22 +0000172
Georg Brandl116aa622007-08-15 14:28:22 +0000173.. function:: cosh(x)
174
175 Return the hyperbolic cosine of *x*.
176
177
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000178.. function:: sinh(x)
Georg Brandl116aa622007-08-15 14:28:22 +0000179
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000180 Return the hyperbolic sine of *x*.
Georg Brandl116aa622007-08-15 14:28:22 +0000181
182
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000183.. function:: tanh(x)
184
185 Return the hyperbolic tangent of *x*.
186
187
188Classification functions
189------------------------
190
Mark Dickinson8e0c9962010-07-11 17:38:24 +0000191.. function:: isfinite(x)
192
Mark Dickinsonc7622422010-07-11 19:47:37 +0000193 Return ``True`` if both the real and imaginary parts of *x* are finite, and
194 ``False`` otherwise.
195
196 .. versionadded:: 3.2
Mark Dickinson8e0c9962010-07-11 17:38:24 +0000197
198
Christian Heimes53876d92008-04-19 00:31:39 +0000199.. function:: isinf(x)
200
Mark Dickinsonc7622422010-07-11 19:47:37 +0000201 Return ``True`` if either the real or the imaginary part of *x* is an
202 infinity, and ``False`` otherwise.
Christian Heimes53876d92008-04-19 00:31:39 +0000203
Christian Heimes53876d92008-04-19 00:31:39 +0000204
205.. function:: isnan(x)
206
Mark Dickinsonc7622422010-07-11 19:47:37 +0000207 Return ``True`` if either the real or the imaginary part of *x* is a NaN,
208 and ``False`` otherwise.
Christian Heimes53876d92008-04-19 00:31:39 +0000209
Christian Heimes53876d92008-04-19 00:31:39 +0000210
Tal Einatd5519ed2015-05-31 22:05:00 +0300211.. function:: isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
212
213 Return ``True`` if the values *a* and *b* are close to each other and
214 ``False`` otherwise.
215
216 Whether or not two values are considered close is determined according to
217 given absolute and relative tolerances.
218
219 *rel_tol* is the relative tolerance -- it is the maximum allowed difference
220 between *a* and *b*, relative to the larger absolute value of *a* or *b*.
221 For example, to set a tolerance of 5%, pass ``rel_tol=0.05``. The default
222 tolerance is ``1e-09``, which assures that the two values are the same
223 within about 9 decimal digits. *rel_tol* must be greater than zero.
224
225 *abs_tol* is the minimum absolute tolerance -- useful for comparisons near
226 zero. *abs_tol* must be at least zero.
227
228 If no errors occur, the result will be:
229 ``abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)``.
230
231 The IEEE 754 special values of ``NaN``, ``inf``, and ``-inf`` will be
232 handled according to IEEE rules. Specifically, ``NaN`` is not considered
233 close to any other value, including ``NaN``. ``inf`` and ``-inf`` are only
234 considered close to themselves.
235
236 .. versionadded:: 3.5
237
238 .. seealso::
239
240 :pep:`485` -- A function for testing approximate equality
241
242
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000243Constants
244---------
Georg Brandl116aa622007-08-15 14:28:22 +0000245
246
247.. data:: pi
248
Mark Dickinsonc2eab892009-07-28 16:31:03 +0000249 The mathematical constant *π*, as a float.
Georg Brandl116aa622007-08-15 14:28:22 +0000250
251
252.. data:: e
253
254 The mathematical constant *e*, as a float.
255
Guido van Rossum0a891d72016-08-15 09:12:52 -0700256.. data:: tau
257
258 The mathematical constant *τ*, as a float.
259
Georg Brandl4770d6e2016-08-16 07:08:46 +0200260 .. versionadded:: 3.6
261
Mark Dickinson84e63112016-08-29 13:56:58 +0100262.. data:: inf
263
264 Floating-point positive infinity. Equivalent to ``float('inf')``.
265
266 .. versionadded:: 3.6
267
268.. data:: infj
269
270 Complex number with zero real part and positive infinity imaginary
271 part. Equivalent to ``complex(0.0, float('inf'))``.
272
273 .. versionadded:: 3.6
274
275.. data:: nan
276
277 A floating-point "not a number" (NaN) value. Equivalent to
278 ``float('nan')``.
279
280 .. versionadded:: 3.6
281
282.. data:: nanj
283
284 Complex number with zero real part and NaN imaginary part. Equivalent to
285 ``complex(0.0, float('nan'))``.
286
287 .. versionadded:: 3.6
288
289
Georg Brandl116aa622007-08-15 14:28:22 +0000290.. index:: module: math
291
292Note that the selection of functions is similar, but not identical, to that in
293module :mod:`math`. The reason for having two modules is that some users aren't
294interested in complex numbers, and perhaps don't even know what they are. They
295would rather have ``math.sqrt(-1)`` raise an exception than return a complex
296number. Also note that the functions defined in :mod:`cmath` always return a
297complex number, even if the answer can be expressed as a real number (in which
298case the complex number has an imaginary part of zero).
299
300A note on branch cuts: They are curves along which the given function fails to
301be continuous. They are a necessary feature of many complex functions. It is
302assumed that if you need to compute with complex functions, you will understand
303about branch cuts. Consult almost any (not too elementary) book on complex
304variables for enlightenment. For information of the proper choice of branch
305cuts for numerical purposes, a good reference should be the following:
306
307
308.. seealso::
309
310 Kahan, W: Branch cuts for complex elementary functions; or, Much ado about
311 nothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the art
Serhiy Storchakac7b1a0b2016-11-26 13:43:28 +0200312 in numerical analysis. Clarendon Press (1987) pp165--211.