blob: 682e6db653309676c22724dd3ef6a6a5fc23dddc [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
2:mod:`cmath` --- Mathematical functions for complex numbers
3===========================================================
4
5.. module:: cmath
6 :synopsis: Mathematical functions for complex numbers.
7
8
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
26Complex coordinates
27-------------------
28
29Complex numbers can be expressed by two important coordinate systems.
30Python's :class:`complex` type uses rectangular coordinates where a number
31on the complex plain is defined by two floats, the real part and the imaginary
32part.
33
34Definition::
35
36 z = x + 1j * y
37
38 x := real(z)
39 y := imag(z)
40
41In engineering the polar coordinate system is popular for complex numbers. In
42polar coordinates a complex number is defined by the radius *r* and the phase
Benjamin Petersondcf97b92008-07-02 17:30:14 +000043angle *phi*. The radius *r* is the absolute value of the complex, which can be
Christian Heimes53876d92008-04-19 00:31:39 +000044viewed as distance from (0, 0). The radius *r* is always 0 or a positive float.
Benjamin Petersondcf97b92008-07-02 17:30:14 +000045The phase angle *phi* is the counter clockwise angle from the positive x axis,
Christian Heimes53876d92008-04-19 00:31:39 +000046e.g. *1* has the angle *0*, *1j* has the angle *π/2* and *-1* the angle *-π*.
47
48.. note::
49 While :func:`phase` and func:`polar` return *+π* for a negative real they
50 may return *-π* for a complex with a very small negative imaginary
51 part, e.g. *-1-1E-300j*.
52
53
54Definition::
55
Benjamin Petersondcf97b92008-07-02 17:30:14 +000056 z = r * exp(1j * phi)
57 z = r * cis(phi)
Christian Heimes53876d92008-04-19 00:31:39 +000058
59 r := abs(z) := sqrt(real(z)**2 + imag(z)**2)
60 phi := phase(z) := atan2(imag(z), real(z))
Benjamin Petersondcf97b92008-07-02 17:30:14 +000061 cis(phi) := cos(phi) + 1j * sin(phi)
Christian Heimes53876d92008-04-19 00:31:39 +000062
63
64.. function:: phase(x)
65
66 Return phase, also known as the argument, of a complex.
67
Christian Heimes53876d92008-04-19 00:31:39 +000068
69.. function:: polar(x)
70
Georg Brandl48310cd2009-01-03 21:18:54 +000071 Convert a :class:`complex` from rectangular coordinates to polar
Christian Heimes53876d92008-04-19 00:31:39 +000072 coordinates. The function returns a tuple with the two elements
Georg Brandl48310cd2009-01-03 21:18:54 +000073 *r* and *phi*. *r* is the distance from 0 and *phi* the phase
Christian Heimes53876d92008-04-19 00:31:39 +000074 angle.
75
Christian Heimes53876d92008-04-19 00:31:39 +000076
77.. function:: rect(r, phi)
78
79 Convert from polar coordinates to rectangular coordinates and return
80 a :class:`complex`.
81
Christian Heimes53876d92008-04-19 00:31:39 +000082
83
84cmath functions
85---------------
Georg Brandl116aa622007-08-15 14:28:22 +000086
87.. function:: acos(x)
88
89 Return the arc cosine of *x*. There are two branch cuts: One extends right from
90 1 along the real axis to ∞, continuous from below. The other extends left from
91 -1 along the real axis to -∞, continuous from above.
92
93
94.. function:: acosh(x)
95
96 Return the hyperbolic arc cosine of *x*. There is one branch cut, extending left
97 from 1 along the real axis to -∞, continuous from above.
98
99
100.. function:: asin(x)
101
102 Return the arc sine of *x*. This has the same branch cuts as :func:`acos`.
103
104
105.. function:: asinh(x)
106
Christian Heimes53876d92008-04-19 00:31:39 +0000107 Return the hyperbolic arc sine of *x*. There are two branch cuts:
108 One extends from ``1j`` along the imaginary axis to ``∞j``,
109 continuous from the right. The other extends from ``-1j`` along
110 the imaginary axis to ``-∞j``, continuous from the left.
111
Georg Brandl116aa622007-08-15 14:28:22 +0000112
113.. function:: atan(x)
114
115 Return the arc tangent of *x*. There are two branch cuts: One extends from
Christian Heimes53876d92008-04-19 00:31:39 +0000116 ``1j`` along the imaginary axis to ``∞j``, continuous from the right. The
Georg Brandl116aa622007-08-15 14:28:22 +0000117 other extends from ``-1j`` along the imaginary axis to ``-∞j``, continuous
Christian Heimes53876d92008-04-19 00:31:39 +0000118 from the left.
119
Georg Brandl116aa622007-08-15 14:28:22 +0000120
121.. function:: atanh(x)
122
123 Return the hyperbolic arc tangent of *x*. There are two branch cuts: One
Christian Heimes53876d92008-04-19 00:31:39 +0000124 extends from ``1`` along the real axis to ``∞``, continuous from below. The
Georg Brandl116aa622007-08-15 14:28:22 +0000125 other extends from ``-1`` along the real axis to ``-∞``, continuous from
Christian Heimes53876d92008-04-19 00:31:39 +0000126 above.
127
Georg Brandl116aa622007-08-15 14:28:22 +0000128
129.. function:: cos(x)
130
131 Return the cosine of *x*.
132
133
134.. function:: cosh(x)
135
136 Return the hyperbolic cosine of *x*.
137
138
139.. function:: exp(x)
140
141 Return the exponential value ``e**x``.
142
143
Christian Heimes53876d92008-04-19 00:31:39 +0000144.. function:: isinf(x)
145
146 Return *True* if the real or the imaginary part of x is positive
147 or negative infinity.
148
Christian Heimes53876d92008-04-19 00:31:39 +0000149
150.. function:: isnan(x)
151
152 Return *True* if the real or imaginary part of x is not a number (NaN).
153
Christian Heimes53876d92008-04-19 00:31:39 +0000154
Georg Brandl116aa622007-08-15 14:28:22 +0000155.. function:: log(x[, base])
156
157 Returns the logarithm of *x* to the given *base*. If the *base* is not
158 specified, returns the natural logarithm of *x*. There is one branch cut, from 0
159 along the negative real axis to -∞, continuous from above.
160
Georg Brandl116aa622007-08-15 14:28:22 +0000161
162.. function:: log10(x)
163
164 Return the base-10 logarithm of *x*. This has the same branch cut as
165 :func:`log`.
166
167
168.. function:: sin(x)
169
170 Return the sine of *x*.
171
172
173.. function:: sinh(x)
174
175 Return the hyperbolic sine of *x*.
176
177
178.. function:: sqrt(x)
179
180 Return the square root of *x*. This has the same branch cut as :func:`log`.
181
182
183.. function:: tan(x)
184
185 Return the tangent of *x*.
186
187
188.. function:: tanh(x)
189
190 Return the hyperbolic tangent of *x*.
191
192The module also defines two mathematical constants:
193
194
195.. data:: pi
196
197 The mathematical constant *pi*, as a float.
198
199
200.. data:: e
201
202 The mathematical constant *e*, as a float.
203
204.. index:: module: math
205
206Note that the selection of functions is similar, but not identical, to that in
207module :mod:`math`. The reason for having two modules is that some users aren't
208interested in complex numbers, and perhaps don't even know what they are. They
209would rather have ``math.sqrt(-1)`` raise an exception than return a complex
210number. Also note that the functions defined in :mod:`cmath` always return a
211complex number, even if the answer can be expressed as a real number (in which
212case the complex number has an imaginary part of zero).
213
214A note on branch cuts: They are curves along which the given function fails to
215be continuous. They are a necessary feature of many complex functions. It is
216assumed that if you need to compute with complex functions, you will understand
217about branch cuts. Consult almost any (not too elementary) book on complex
218variables for enlightenment. For information of the proper choice of branch
219cuts for numerical purposes, a good reference should be the following:
220
221
222.. seealso::
223
224 Kahan, W: Branch cuts for complex elementary functions; or, Much ado about
225 nothing's sign bit. In Iserles, A., and Powell, M. (eds.), The state of the art
226 in numerical analysis. Clarendon Press (1987) pp165-211.
227
Christian Heimes53876d92008-04-19 00:31:39 +0000228