• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# taylor_series.py DeaD_EyE   Oct 3rd, 2019 (edited) 116 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. #!/usr/bin/env python3
2. """
4.
5. sinus(x)=x-((x**3)/3!)+((x**5)/5!)-((x**7)/7!)+...
6.
7. https://en.wikipedia.org/wiki/Taylor_series
8. """
9.
10.
11. from math import factorial, pow, sin, tau
12. from itertools import count, cycle
13. from operator import add, sub, mul
14. from functools import reduce
15.
16. import matplotlib.pyplot as plt
17.
18.
19. def pow(x, y):
20.     """
21.    simple own implementation of pow
22.    """
23.     return x ** y
24.
25.
26. def factorial(x):
27.     """
28.    simple own implementation of factorial
29.    functional style
30.    """
31.     return reduce(mul, range(2, x + 1), 1)
32.
33.
34. def sinus(x, degree=21):
35.     """
36.    First overcomplicated idea. Just wanted to use itertools
37.    as much I can.
38.    """
39.     if n == 1:
40.         return x
41.     y = 0
43.     for factor, op, _ in zip(count(3, step=2), ops, range(degree)):
44.         y = op(y, pow(x, factor) / factorial(factor))
45.     return x - y
46.
47.
48. def sinus2(x, degree=21):
49.     """
50.    Straight forward implementation, which looks easier
51.    and should run faster. The name tau is 2 * pi
52.    The modulo operation makes it possible to use x < -2pi and x > 2pi
53.    """
54.     x %= tau
55.     sign = -1
56.     y = 0
57.     for factor in range(3, degree + 1, 2):
58.         y += sign * pow(x, factor) / factorial(factor)
59.         sign *= -1
60.     return x + y
61.
62.
63. def cosine(x, degree=21):
64.     """
65.    Almost the same like sinus2
66.    """
67.     x %= tau
68.     sign = -1
69.     y = 0
70.     for factor in range(2, degree + 1, 2):
71.         y += sign * (pow(x, factor) / factorial(factor))
72.         sign *= -1
73.     return  1 + y
74.
75.
76. def visualize(degree):
77.     legend = []
78.     base = [x / 1000 for x in range(-10_000, 10_000, 100)]
79.     for n in degree:
80.         legend.append(f'degree={n}')
81.         plt.plot(base, [sinus(x, n) for x in base])
82.     legend.append('math.sin(x)')
83.     plt.plot(base, [sin(x) for x in base])
84.     plt.legend(legend, loc='upper right', framealpha=0.2, fontsize=8)
85.     plt.title('Taylor series')
86.     plt.xlabel('x')
87.     plt.ylabel('y')
88.     plt.xlim(-10, 10)
89.     plt.ylim(-10, 10)
90.     plt.grid()
91.     plt.savefig('Taylor series.png', dpi=300)
92.     plt.show()
93.
94.
95. if __name__ == '__main__':
96.     visualize([1, 3, 5, 7, 9, 11, 13])
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top