From 2dda88569c62feb3522611d435a28787bc8ef566 Mon Sep 17 00:00:00 2001 From: Jackie Date: Tue, 12 Sep 2017 11:01:44 -0400 Subject: [PATCH] Taylor Series --- TaylorSeries.py | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 TaylorSeries.py diff --git a/TaylorSeries.py b/TaylorSeries.py new file mode 100644 index 0000000..1fe5818 --- /dev/null +++ b/TaylorSeries.py @@ -0,0 +1,50 @@ +import sympy as sy +import numpy as np +from sympy.functions import sin,cos +import matplotlib.pyplot as plt + +plt.style.use("ggplot") + +# Define the variable and the function to approximate +x = sy.Symbol('x') +f = sin(x) + +# Factorial function +def factorial(n): + if n <= 0: + return 1 + else: + return n*factorial(n-1) + +# Taylor approximation at x0 of the function 'function' +def taylor(function,x0,n): + i = 0 + p = 0 + while i <= n: + p = p + (function.diff(x,i).subs(x,x0))/(factorial(i))*(x-x0)**i + i += 1 + return p +def plot(): + x_lims = [-5,5] + x1 = np.linspace(x_lims[0],x_lims[1],800) + y1 = [] + # Approximate up until 10 starting from 1 and using steps of 2 + for j in range(1,10,2): + func = taylor(f,0,j) + print('Taylor expansion at n='+str(j),func) + for k in x1: + y1.append(func.subs(x,k)) + plt.plot(x1,y1,label='order '+str(j)) + y1 = [] + # Plot the function to approximate (sine, in this case) + plt.plot(x1,np.sin(x1),label='sin of x') + plt.xlim(x_lims) + plt.ylim([-5,5]) + plt.xlabel('x') + plt.ylabel('y') + plt.legend() + plt.grid(True) + plt.title('Taylor series approximation') + plt.show() + +plot()