# Python program for Complex Numbers

There are always two real roots of a positive number. For example, if x2 is 25, x is ±5. However, if x2 is -25 real roots do not exist. The square root of any negative number is the square root of its absolute value multiplied by an imaginary unit j = √−1.

Hence √−25 = √25 𝑋−1 = √25 × √−1 = 5j

A Complex number consists of real and imaginary component. It is represented as x+yj. Both x and y are real numbers. Y multiplied by imaginary unit forms an imaginary part of complex number.

Examples: 3+2j, 10-5.5J, 9.55+2.3j, 5.11e-6+4j

Python has a built-in complex data type. A complex number object can be created by literal representation as follows −

>>> x = 2+3j
>>> type(x)



The complex number object has two attributes real (returns the real component) and imag (returns imaginary component excluding imaginary unit j)

>>> x.real
2.0
>>> x.imag
3.0

It also has conjugate() method. Conjugate of a complex number has the same real component and imaginary component with the opposite sign. Hence conjugate of 2+3j is 2-3j

>>> x.conjugate()
(2-3j)

Python also has built-in complex() function which returns a complex number object. The function takes two parameters, one each for real and imaginary component. They can be of any numeric type (int, float or complex)

>>> complex(9,5)
(9+5j)
>>> complex(-6, -2.5)
(-6-2.5j)
>>> complex(1.5j, 2.5j)
(-2.5+1.5j)

If only one parameter is given it is treated as real component, imaginary component is assumed to be zero.

>>> complex(15)
(15+0j)

The function can also take a string as argument provided it contains numeric representation.

>>> complex('51')
(51+0j)
>>> complex('1.5')
(1.5+0j)

Addition and subtraction of complex numbers is similar to that of integers or floats. Real and imaginary parts are added / subtracted separately.

>>> a = 6+4j
>>> b = 3+6j
>>> a+b
(9+10j)
>>> a-b
(3-2j)

For multiplication consider complex number as a binomial and multiply each term in the first number by each term in the second number.

a = 6+4j
b = 3+2j
c = a*b
c = (6+4j)*(3+2j)
c = (18+12j+12j+8*-1)
c = 10+24j

In Python console the result verifies this −

>>> a = 6+4j
>>> b = 3+2j
>>> a*b
(10+24j)

Division of complex numbers is done as follows −

Let the two numbers be

a = 2+4j

b = 1-2j

and we want to calculate a/b.

Obtain conjugate of denominator which is 1+2j

Multiply numerator and denominator by the conjugate of the denominator to get result of division

c = a/b
c = (2+4j)*(1+2j)/(1-2j)(1+2j)
c = (2+4j+4j+8*-1)/(1+2j-2j-4*-1)
c = (-6+8j)/5
c = -1.2+1.6j

Following Python console session verifies above treatment.

>>> a = 2+4j
>>> b = 1-2j
>>> a/b
(-1.2+1.6j)

## The cmath module

Mathematical functions defined in math module of Python’s standard library process floating point numbers. For complex numbers, Python library contains cmath module.

Complex number z = x+yj is a Cartesian representation. It is internally represented in polar coordinates with its modulus r (as returned by built-in abs() function) and the phase angle Φ (pronounced as phi) which is counterclockwise angle in radians, between the x axis and line joining x with the origin. Following diagram illustrates polar representation of complex number −

Functions in cmath module allow conversion of Cartesian representation to polar representation and vice versa.

polar() − This function returns polar representation of a Cartesian notation of complex number. The return value is a tuple consisting of modulus and phase.

>>> import cmath
>>> a = 2+4j
>>> cmath.polar(a)
(4.47213595499958, 1.1071487177940904)

Note that the modulus is returned by abs() function

>>> abs(a)
4.47213595499958

phase() − This function returns counterclockwise angle between x axis and segment joining a with origin. The angle is represented in radians and is between π and -π

>>> cmath.phase(a)
1.1071487177940904
z = x+yj
Φ

rect() − This function returns Cartesian representation of complex number represented in polar form i.e. in modulus and phase

>>> cmath.rect(4.47213595499958, 1.1071487177940904)
(2.0000000000000004+4j)

The cmath module contains alternatives for all mathematical functions defined in math module. There are trigonometric and logarithmic functions as explained below −

cmath.sin() − This function returns the sine trigonometric ratio for phase angle represented in radians.

>>> import cmath
>>> a = 2+4j
>>> p = cmath.phase(a)
>>> cmath.sin(p)
(0.8944271909999159+0j)

Similarly, functions for other ratios cos(), tan(), asin(), acos() and atan() are defined in cmath module.

cmath.exp() − Similar to math.exp(), this function returns ex where x is a complex number and e is 2.71828

>>> cmath.exp(a)
(-1.1312043837568135+2.4717266720048188j)

cmath.log10() − This function calculates log value of complex number taking base as 10

>>> a = 1+2j
>>> cmath.log10(a)
(0.3494850021680094+0.480828578784234j)

cmath.sqrt() − This function returns square root of complex number.

>>> cmath.sqrt(a)
(1.272019649514069+0.7861513777574233j)

In this article we learned important features of Python’s complex number data type and how arithmetic operations can be done on it. We also explored various functions defined in cmath module.

Samual Sam

Learning faster. Every day.