#!/usr/bin/python
# -*- coding: utf8 -*-
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from math import *
code_website = 'http://commons.wikimedia.org/wiki/User:Geek3/mplwp'
try:
import mplwp
except ImportError, er:
print 'ImportError:', er
print 'You need to download mplwp.py from', code_website
exit(1)
name = 'mplwp_resonance_zeta_envelope.svg'
fig = mplwp.fig_standard(mpl)
xlim = 0,3; fig.gca().set_xlim(xlim)
ylim = 0,6; fig.gca().set_ylim(ylim)
mplwp.mark_axeszero(fig.gca())
maxima = lambda x: 1.0 / sqrt(1 - x**4)
x_max = np.linspace(xlim[0], 1, 2001)[:-1]
y_max = [maxima(xx) for xx in x_max]
plt.plot(x_max, y_max, color='grey', dashes=[3,3], label='maxima', zorder=-2)
x = np.linspace(xlim[0], xlim[1], 6001)
def resonance(x, zeta):
den = sqrt((x**2 - 1.0)**2 + (2*x*zeta)**2)
if den == 0:
return float('nan')
return 1.0 / den
for zeta in [0.0, 0.1, 0.2, 0.3, 0.5, 1.0]:
y = [resonance(xx, zeta) for xx in x]
l = label='$\zeta={:.1f}$'.format(zeta)
if zeta == 0.0:
plt.plot(x, y, color='grey', dashes=[10,5], label=l, zorder=0)
else:
plt.plot(x, y, label=l, zorder=1.1-zeta)
plt.legend(loc='upper right').get_frame().set_alpha(0.9)
plt.savefig(name)
mplwp.postprocess(name)