Time for action – drawing sawtooth and triangle waves

We will initialize t just like in the previous section. Again, k = 99 should be sufficient. In order to draw sawtooth and triangle waves, follow these steps:

  1. Set initial values for the function to zero:
    t = np.linspace(-np.pi, np.pi, 201)
    k = np.arange(1, 99)
    f = np.zeros_like(t)
  2. Compute the function values with the sin() and sum() functions:
    for i, ti in enumerate(t):
       f[i] = np.sum(np.sin(2 * np.pi * k * ti)/k)
    
    f = (-2 / np.pi) * f
  3. It's easy to plot the sawtooth and triangle waves since the value of the triangle wave should be equal to the absolute value of the sawtooth wave. Plot the waves as shown in the following:
    plt.plot(t, f, lw=1.0, label='Sawtooth')
    plt.plot(t, np.abs(f), '--', lw=2.0, label='Triangle')
    plt.title('Triangle and sawtooth waves')
    plt.grid()
    plt.legend(loc='best')
    plt.show()

    In the following figure, the triangle wave is the one with the dashed line:

    Time for action – drawing sawtooth and triangle waves

What just happened?

We drew a sawtooth wave using the sin() function. We assembled the input values with the linspace() function and the k values with the arange() function. A triangle wave was derived from the sawtooth wave by taking the absolute value (see sawtooth.py):

import numpy as np
import matplotlib.pyplot as plt


t = np.linspace(-np.pi, np.pi, 201)
k = np.arange(1, 99)
f = np.zeros_like(t)

for i, ti in enumerate(t):
   f[i] = np.sum(np.sin(2 * np.pi * k * ti)/k)

f = (-2 / np.pi) * f
plt.plot(t, f, lw=1.0, label='Sawtooth')
plt.plot(t, np.abs(f), '--', lw=2.0, label='Triangle')
plt.title('Triangle and sawtooth waves')
plt.grid()
plt.legend(loc='best')
plt.show()

Have a go hero – getting rid of the loop

Your challenge, should you choose to accept it, is to get rid of the loop in the program. It should be doable with NumPy functions and the performance should improve.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset