Time for action – drawing sawtooth and triangle waves

We will initialize t just like in the previous tutorial. 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(-ny.pi, np.pi, 201)
    k = np.arange(1, float(sys.argv[1]))
    f = np.zeros_like(t)
  2. This computation of function values should again be a straightforward application for the sin and sum functions:
    for i in range(len(t)):
       f[i] = np.sum(np.sin(2 * np.pi * k * t[i])/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 here:
    plot(t, f, lw=1.0)
    plot(t, np.abs(f), lw=2.0)
    show()

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

    Time for action – drawing sawtooth and triangle waves

What just happened?

We drew a sawtooth wave using the sin function. The input values were assembled with linspace 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
from matplotlib.pyplot import plot
from matplotlib.pyplot import show
import sys

t = np.linspace(-np.pi, np.pi, 201)
k = np.arange(1, float(sys.argv[1]))
f = np.zeros_like(t)

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

f = (-2 / np.pi) * f
plot(t, f, lw=1.0)
plot(t, np.abs(f), lw=2.0)
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 double.

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

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