# Author: Ika, 2013-08-24
import math as m
import numpy as np
import matplotlib.pyplot as plt
import scipy.special as sp
# import matplotlib.animation as animation
def draw_frame(n,filename,line_color):
fig = plt.figure()
plt.axes([0.02,0.13,0.9,0.8])
plt.hold(True)
plt.xlim(-3,3)
plt.ylim(-2,4)
# Set up the spines
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
# Set up the label
ax.text(2,3,'N='+str(n),fontsize=24,color=line_color)
Q = []
X = np.arange(-3, 3, 0.001)
# Draw the original function (ORG) curve
ORG = np.exp(-1/(X*X))
a = plt.plot(X, ORG, '-', color='black', lw=4)
Q.append(a)
# Draw the approximation function (APPR) curve
i=1
APPR = 1+(-1)**i*(X**(-2*i))/m.factorial(i)
while (i<n):
i = i+1
APPR = APPR+(-1)**i*(X**(-2*i))/m.factorial(i)
a = plt.plot(X, APPR, '-', color=line_color, lw=4)
Q.append(a)
plt.savefig(filename)
draw_frame(1,'frame01.eps','#b30000')
draw_frame(2,'frame02.eps','#00b300')
draw_frame(3,'frame03.eps','#0000b3')
draw_frame(4,'frame04.eps','#b3b300')
draw_frame(5,'frame05.eps','#00b3b3')
draw_frame(6,'frame06.eps','#b300b3')
draw_frame(7,'frame07.eps','#b3b3b3')
draw_frame(10,'frame08.eps','#3300b3')
draw_frame(50,'frame09.eps','#33b300')
draw_frame(65,'frame10.eps','#0033b3')
draw_frame(80,'frame11.eps','#b3b333')
# To generate the final GIF file, use the shell command:
# convert -antialias -loop 0 -delay 100 -compress LZW frame* Expinvsqlau_GIF.gif