9. Complex Numbers and Trigonometry#

9.1. Overview#

This lecture introduces some elementary mathematics and trigonometry.

Useful and interesting in its own right, these concepts reap substantial rewards when studying dynamics generated by linear difference equations or linear differential equations.

For example, these tools are keys to understanding outcomes attained by Paul Samuelson (1939) [Samuelson, 1939] in his classic paper on interactions between the investment accelerator and the Keynesian consumption function, our topic in the lecture Samuelson Multiplier Accelerator.

In addition to providing foundations for Samuelson’s work and extensions of it, this lecture can be read as a stand-alone quick reminder of key results from elementary high school trigonometry.

So let’s dive in.

9.1.1. Complex Numbers#

A complex number has a real part xx and a purely imaginary part yy.

The Euclidean, polar, and trigonometric forms of a complex number zz are:

z=x+iy=reiθ=r(cosθ+isinθ) z = x + iy = re^{i\theta} = r(\cos{\theta} + i \sin{\theta})

The second equality above is known as Euler’s formula

  • Euler contributed many other formulas too!

The complex conjugate zˉ\bar z of zz is defined as

zˉ=xiy=reiθ=r(cosθisinθ) \bar z = x - iy = r e^{-i \theta} = r (\cos{\theta} - i \sin{\theta} )

The value xx is the real part of zz and yy is the imaginary part of zz.

The symbol z| z | = zˉz=r\sqrt{\bar{z}\cdot z} = r represents the modulus of zz.

The value rr is the Euclidean distance of vector (x,y)(x,y) from the origin:

r=z=x2+y2 r = |z| = \sqrt{x^2 + y^2}

The value θ\theta is the angle of (x,y)(x,y) with respect to the real axis.

Evidently, the tangent of θ\theta is (yx)\left(\frac{y}{x}\right).

Therefore,

θ=tan1(yx) \theta = \tan^{-1} \Big( \frac{y}{x} \Big)

Three elementary trigonometric functions are

cosθ=xr=eiθ+eiθ2,sinθ=yr=eiθeiθ2i,tanθ=yx \cos{\theta} = \frac{x}{r} = \frac{e^{i\theta} + e^{-i\theta}}{2} , \quad \sin{\theta} = \frac{y}{r} = \frac{e^{i\theta} - e^{-i\theta}}{2i} , \quad \tan{\theta} = \frac{y}{x}

We’ll need the following imports:

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (11, 5)  #set default figure size
import numpy as np
from sympy import (Symbol, symbols, Eq, nsolve, sqrt, cos, sin, simplify,
                  init_printing, integrate)

9.1.2. An Example#

Example 9.1

Consider the complex number z=1+3iz = 1 + \sqrt{3} i.

For z=1+3iz = 1 + \sqrt{3} i, x=1x = 1, y=3y = \sqrt{3}.

It follows that r=2r = 2 and θ=tan1(3)=π3=60o\theta = \tan^{-1}(\sqrt{3}) = \frac{\pi}{3} = 60^o.

Let’s use Python to plot the trigonometric form of the complex number z=1+3iz = 1 + \sqrt{3} i.

# Abbreviate useful values and functions
π = np.pi


# Set parameters
r = 2
θ = π/3
x = r * np.cos(θ)
x_range = np.linspace(0, x, 1000)
θ_range = np.linspace(0, θ, 1000)

# Plot
fig = plt.figure(figsize=(8, 8))
ax = plt.subplot(111, projection='polar')

ax.plot((0, θ), (0, r), marker='o', color='b')          # Plot r
ax.plot(np.zeros(x_range.shape), x_range, color='b')       # Plot x
ax.plot(θ_range, x / np.cos(θ_range), color='b')        # Plot y
ax.plot(θ_range, np.full(θ_range.shape, 0.1), color='r')  # Plot θ

ax.margins(0) # Let the plot starts at origin

ax.set_title("Trigonometry of complex numbers", va='bottom',
    fontsize='x-large')

ax.set_rmax(2)
ax.set_rticks((0.5, 1, 1.5, 2))  # Less radial ticks
ax.set_rlabel_position(-88.5)    # Get radial labels away from plotted line

ax.text(θ, r+0.01 , r'$z = x + iy = 1 + \sqrt{3}\, i$')   # Label z
ax.text(θ+0.2, 1 , '$r = 2$')                             # Label r
ax.text(0-0.2, 0.5, '$x = 1$')                            # Label x
ax.text(0.5, 1.2, r'$y = \sqrt{3}$')                      # Label y
ax.text(0.25, 0.15, r'$\theta = 60^o$')                   # Label θ

ax.grid(True)
plt.show()
_images/c3e0ee881a15115309bc7dda9b1fb2f9022098f773ca979bfc42195dc1b1a7bf.png

9.2. De Moivre’s Theorem#

de Moivre’s theorem states that:

(r(cosθ+isinθ))n=rneinθ=rn(cosnθ+isinnθ) (r(\cos{\theta} + i \sin{\theta}))^n = r^n e^{in\theta} = r^n(\cos{n\theta} + i \sin{n\theta})

To prove de Moivre’s theorem, note that

(r(cosθ+isinθ))n=(reiθ)n (r(\cos{\theta} + i \sin{\theta}))^n = \big( re^{i\theta} \big)^n

and compute.

9.3. Applications of de Moivre’s Theorem#

9.3.1. Example 1#

We can use de Moivre’s theorem to show that r=x2+y2r = \sqrt{x^2 + y^2}.

We have

1=eiθeiθ=(cosθ+isinθ)(cos(-θ)+isin(-θ))=(cosθ+isinθ)(cosθisinθ)=cos2θ+sin2θ=x2r2+y2r2 \begin{aligned} 1 &= e^{i\theta} e^{-i\theta} \\ &= (\cos{\theta} + i \sin{\theta})(\cos{(\text{-}\theta)} + i \sin{(\text{-}\theta)}) \\ &= (\cos{\theta} + i \sin{\theta})(\cos{\theta} - i \sin{\theta}) \\ &= \cos^2{\theta} + \sin^2{\theta} \\ &= \frac{x^2}{r^2} + \frac{y^2}{r^2} \end{aligned}

and thus

x2+y2=r2 x^2 + y^2 = r^2

We recognize this as a theorem of Pythagoras.

9.3.2. Example 2#

Let z=reiθz = re^{i\theta} and zˉ=reiθ\bar{z} = re^{-i\theta} so that zˉ\bar{z} is the complex conjugate of zz.

(z,zˉ)(z, \bar z) form a complex conjugate pair of complex numbers.

Let a=peiωa = pe^{i\omega} and aˉ=peiω\bar{a} = pe^{-i\omega} be another complex conjugate pair.

For each element of a sequence of integers n=0,1,2,,n = 0, 1, 2, \ldots, .

To do so, we can apply de Moivre’s formula.

Thus,

xn=azn+aˉzˉn=peiω(reiθ)n+peiω(reiθ)n=prnei(ω+nθ)+prnei(ω+nθ)=prn[cos(ω+nθ)+isin(ω+nθ)+cos(ω+nθ)isin(ω+nθ)]=2prncos(ω+nθ) \begin{aligned} x_n &= az^n + \bar{a}\bar{z}^n \\ &= p e^{i\omega} (re^{i\theta})^n + p e^{-i\omega} (re^{-i\theta})^n \\ &= pr^n e^{i (\omega + n\theta)} + pr^n e^{-i (\omega + n\theta)} \\ &= pr^n [\cos{(\omega + n\theta)} + i \sin{(\omega + n\theta)} + \cos{(\omega + n\theta)} - i \sin{(\omega + n\theta)}] \\ &= 2 pr^n \cos{(\omega + n\theta)} \end{aligned}

9.3.3. Example 3#

This example provides machinery that is at the heard of Samuelson’s analysis of his multiplier-accelerator model [Samuelson, 1939].

Thus, consider a second-order linear difference equation

xn+2=c1xn+1+c2xn x_{n+2} = c_1 x_{n+1} + c_2 x_n

whose characteristic polynomial is

z2c1zc2=0 z^2 - c_1 z - c_2 = 0

or

(z2c1zc2)=(zz1)(zz2)=0 (z^2 - c_1 z - c_2 ) = (z - z_1)(z- z_2) = 0

has roots z1,z1z_1, z_1.

A solution is a sequence {xn}n=0\{x_n\}_{n=0}^\infty that satisfies the difference equation.

Under the following circumstances, we can apply our example 2 formula to solve the difference equation

  • the roots z1,z2z_1, z_2 of the characteristic polynomial of the difference equation form a complex conjugate pair

  • the values x0,x1x_0, x_1 are given initial conditions

To solve the difference equation, recall from example 2 that

xn=2prncos(ω+nθ) x_n = 2 pr^n \cos{(\omega + n\theta)}

where ω,p\omega, p are coefficients to be determined from information encoded in the initial conditions x1,x0x_1, x_0.

Since x0=2pcosωx_0 = 2 p \cos{\omega} and x1=2prcos(ω+θ)x_1 = 2 pr \cos{(\omega + \theta)} the ratio of x1x_1 to x0x_0 is

x1x0=rcos(ω+θ)cosω \frac{x_1}{x_0} = \frac{r \cos{(\omega + \theta)}}{\cos{\omega}}

We can solve this equation for ω\omega then solve for pp using x0=2pr0cos(ω+nθ)x_0 = 2 pr^0 \cos{(\omega + n\theta)}.

With the sympy package in Python, we are able to solve and plot the dynamics of xnx_n given different values of nn.

In this example, we set the initial values: - r=0.9r = 0.9 - θ=14π\theta = \frac{1}{4}\pi - x0=4x_0 = 4 - x1=r22=1.82x_1 = r \cdot 2\sqrt{2} = 1.8 \sqrt{2}.

We first numerically solve for ω\omega and pp using nsolve in the sympy package based on the above initial condition:

# Set parameters
r = 0.9
θ = π/4
x0 = 4
x1 = 2 * r * sqrt(2)

# Define symbols to be calculated
ω, p = symbols('ω p', real=True)

# Solve for ω
## Note: we choose the solution near 0
eq1 = Eq(x1/x0 - r * cos(ω+θ) / cos(ω), 0)
ω = nsolve(eq1, ω, 0)
ω = float(ω)
print(f'ω = {ω:1.3f}')

# Solve for p
eq2 = Eq(x0 - 2 * p * cos(ω), 0)
p = nsolve(eq2, p, 0)
p = float(p)
print(f'p = {p:1.3f}')
ω = 0.000
p = 2.000

Using the code above, we compute that ω=0\omega = 0 and p=2p = 2.

Then we plug in the values we solve for ω\omega and pp and plot the dynamic.

# Define range of n
max_n = 30
n = np.arange(0, max_n+1, 0.01)

# Define x_n
x = lambda n: 2 * p * r**n * np.cos(ω + n * θ)

# Plot
fig, ax = plt.subplots(figsize=(12, 8))

ax.plot(n, x(n))
ax.set(xlim=(0, max_n), ylim=(-5, 5), xlabel='$n$', ylabel='$x_n$')

# Set x-axis in the middle of the plot
ax.spines['bottom'].set_position('center')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

ticklab = ax.xaxis.get_ticklabels()[0] # Set x-label position
trans = ticklab.get_transform()
ax.xaxis.set_label_coords(31, 0, transform=trans)

ticklab = ax.yaxis.get_ticklabels()[0] # Set y-label position
trans = ticklab.get_transform()
ax.yaxis.set_label_coords(0, 5, transform=trans)

ax.grid()
plt.show()
_images/2047be876c84e7faed97f85602b06cb65570c7013d34fd9e749a53882c9a4539.png

9.3.4. Trigonometric Identities#

We can obtain a complete suite of trigonometric identities by appropriately manipulating polar forms of complex numbers.

We’ll get many of them by deducing implications of the equality

ei(ω+θ)=eiωeiθ e^{i(\omega + \theta)} = e^{i\omega} e^{i\theta}

For example, we’ll calculate identities for

cos(ω+θ)\cos{(\omega + \theta)} and sin(ω+θ)\sin{(\omega + \theta)}.

Using the sine and cosine formulas presented at the beginning of this lecture, we have:

cos(ω+θ)=ei(ω+θ)+ei(ω+θ)2sin(ω+θ)=ei(ω+θ)ei(ω+θ)2i \begin{aligned} \cos{(\omega + \theta)} = \frac{e^{i(\omega + \theta)} + e^{-i(\omega + \theta)}}{2} \\ \sin{(\omega + \theta)} = \frac{e^{i(\omega + \theta)} - e^{-i(\omega + \theta)}}{2i} \end{aligned}

We can also obtain the trigonometric identities as follows:

cos(ω+θ)+isin(ω+θ)=ei(ω+θ)=eiωeiθ=(cosω+isinω)(cosθ+isinθ)=(cosωcosθsinωsinθ)+i(cosωsinθ+sinωcosθ) \begin{aligned} \cos{(\omega + \theta)} + i \sin{(\omega + \theta)} &= e^{i(\omega + \theta)} \\ &= e^{i\omega} e^{i\theta} \\ &= (\cos{\omega} + i \sin{\omega})(\cos{\theta} + i \sin{\theta}) \\ &= (\cos{\omega}\cos{\theta} - \sin{\omega}\sin{\theta}) + i (\cos{\omega}\sin{\theta} + \sin{\omega}\cos{\theta}) \end{aligned}

Since both real and imaginary parts of the above formula should be equal, we get:

cos(ω+θ)=cosωcosθsinωsinθsin(ω+θ)=cosωsinθ+sinωcosθ \begin{aligned} \cos{(\omega + \theta)} = \cos{\omega}\cos{\theta} - \sin{\omega}\sin{\theta} \\ \sin{(\omega + \theta)} = \cos{\omega}\sin{\theta} + \sin{\omega}\cos{\theta} \end{aligned}

The equations above are also known as the angle sum identities. We can verify the equations using the simplify function in the sympy package:

# Define symbols
ω, θ = symbols('ω θ', real=True)

# Verify
print("cos(ω)cos(θ) - sin(ω)sin(θ) =",
    simplify(cos(ω)*cos(θ) - sin(ω) * sin(θ)))
print("cos(ω)sin(θ) + sin(ω)cos(θ) =",
    simplify(cos(ω)*sin(θ) + sin(ω) * cos(θ)))
cos(ω)cos(θ) - sin(ω)sin(θ) = cos(θ + ω)
cos(ω)sin(θ) + sin(ω)cos(θ) = sin(θ + ω)

9.3.5. Trigonometric Integrals#

We can also compute the trigonometric integrals using polar forms of complex numbers.

For example, we want to solve the following integral:

ππcos(ω)sin(ω)dω \int_{-\pi}^{\pi} \cos(\omega) \sin(\omega) \, d\omega

Using Euler’s formula, we have:

cos(ω)sin(ω)dω=(eiω+eiω)2(eiωeiω)2idω=14ie2iωe2iωdω=14i(i2e2iωi2e2iω+C1)=18[(eiω)2+(eiω)22]+C2=18(eiωeiω)2+C2=12(eiωeiω2i)2+C2=12sin2(ω)+C2 \begin{aligned} \int \cos(\omega) \sin(\omega) \, d\omega &= \int \frac{(e^{i\omega} + e^{-i\omega})}{2} \frac{(e^{i\omega} - e^{-i\omega})}{2i} \, d\omega \\ &= \frac{1}{4i} \int e^{2i\omega} - e^{-2i\omega} \, d\omega \\ &= \frac{1}{4i} \bigg( \frac{-i}{2} e^{2i\omega} - \frac{i}{2} e^{-2i\omega} + C_1 \bigg) \\ &= -\frac{1}{8} \bigg[ \bigg(e^{i\omega}\bigg)^2 + \bigg(e^{-i\omega}\bigg)^2 - 2 \bigg] + C_2 \\ &= -\frac{1}{8} (e^{i\omega} - e^{-i\omega})^2 + C_2 \\ &= \frac{1}{2} \bigg( \frac{e^{i\omega} - e^{-i\omega}}{2i} \bigg)^2 + C_2 \\ &= \frac{1}{2} \sin^2(\omega) + C_2 \end{aligned}

and thus:

ππcos(ω)sin(ω)dω=12sin2(π)12sin2(π)=0 \int_{-\pi}^{\pi} \cos(\omega) \sin(\omega) \, d\omega = \frac{1}{2}\sin^2(\pi) - \frac{1}{2}\sin^2(-\pi) = 0

We can verify the analytical as well as numerical results using integrate in the sympy package:

# Set initial printing
init_printing(use_latex="mathjax")

ω = Symbol('ω')
print('The analytical solution for integral of cos(ω)sin(ω) is:')
integrate(cos(ω) * sin(ω), ω)
The analytical solution for integral of cos(ω)sin(ω) is:
sin2(ω)2\displaystyle \frac{\sin^{2}{\left(ω \right)}}{2}
print('The numerical solution for the integral of cos(ω)sin(ω) \
from -π to π is:')
integrate(cos(ω) * sin(ω), (ω, -π, π))
The numerical solution for the integral of cos(ω)sin(ω) from -π to π is:
0\displaystyle 0

9.3.6. Exercises#

Exercise 9.1

We invite the reader to verify analytically and with the sympy package the following two equalities:

ππcos(ω)2dω=π \int_{-\pi}^{\pi} \cos (\omega)^2 \, d\omega = \pi
ππsin(ω)2dω=π \int_{-\pi}^{\pi} \sin (\omega)^2 \, d\omega = \pi