[Matplotlib-users] Convolution integral export as animation

Erdem farukerdemoncel at gmail.com
Sat May 18 18:05:10 EDT 2019

This example is taken from a tutorial
to convolution integral.

I would like to export this example as animation in mp4 format. So far, the
code looks like this :

import scipy.integrateimport numpy as npimport matplotlib.pyplot as
pltimport matplotlib.animation as animation
def showConvolution(t0,f1, f2):
    # Calculate the overall convolution result using Simpson integration
    convolution = np.zeros(len(t))
    for n, t_ in enumerate(t):
        prod = lambda tau: f1(tau) * f2(t_-tau)
        convolution[n] = scipy.integrate.simps(prod(t), t)

    # Create the shifted and flipped function
    f_shift = lambda t: f2(t0-t)
    prod = lambda tau: f1(tau) * f2(t0-tau)

    # Plot the curves
    plt.gcf().clear() # il

    plt.gca().set_ymargin(0.05) # il
    plt.plot(t, f1(t), label=r'$f_1(\tau)$')
    plt.plot(t, f_shift(t), label=r'$f_2(t_0-\tau)$')
    plt.fill(t, prod(t), color='r', alpha=0.5, edgecolor='black',
hatch='//') # il
    plt.plot(t, prod(t), 'r-', label=r'$f_1(\tau)f_2(t_0-\tau)$')
    plt.grid(True); plt.xlabel(r'$\tau$'); plt.ylabel(r'$x(\tau)$') # il
    plt.legend(fontsize=10) # il
    plt.text(-4, 0.6, '$t_0=%.2f$' % t0, bbox=dict(fc='white')) # il

    # plot the convolution curve
    plt.gca().set_ymargin(0.05) # il
    plt.plot(t, convolution, label='$(f_1*f_2)(t)$')

    # recalculate the value of the convolution integral at the current
time-shift t0
    current_value = scipy.integrate.simps(prod(t), t)
    plt.plot(t0, current_value, 'ro')  # plot the point
    plt.grid(True); plt.xlabel('$t$'); plt.ylabel('$(f_1*f_2)(t)$') # il
    plt.legend(fontsize=10) # il
    plt.show() # il
Fs = 50  # our sampling frequency for the plotting
T = 5    # the time range we are interested in
t = np.arange(-T, T, 1/Fs)  # the time samples
f1 = lambda t: np.maximum(0, 1-abs(t))
f2 = lambda t: (t>0) * np.exp(-2*t)

t0 = np.arange(-2.0,2.0, 0.05)

fig = plt.figure(figsize=(8,3))
anim = animation.FuncAnimation(fig, showConvolution, frames=t0,

anim.save('animation.mp4', fps=30) # fps = frames per second


When I run the program I see the output of see the output of convolution
integral at t0 = -0.20.

[image: convolution.png]

Is there a way to change t0 so that I'd like to able to save it as
animation as in the tutorial
the example t0 decreases from -2.0 to -1.95 etc the green curve is shifted
right, and the area between curves, product increases. In the tutorial
there is an html animation and I would like to save as mp4 file.

I've also added source code as an attachment.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20190519/01592354/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: convolution.png
Type: image/png
Size: 36111 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20190519/01592354/attachment-0001.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: convolution.py
Type: text/x-python
Size: 2029 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20190519/01592354/attachment-0001.py>

More information about the Matplotlib-users mailing list