/
taylor_sin_5.py
64 lines (48 loc) · 1.46 KB
/
taylor_sin_5.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""Výpočet aproximace hodnoty funkce pomocí Taylorovy řady."""
#
# Použito v článku:
#
# Křivky určené polynomem – nejpoužívanější křivky v současnosti
# https://www.root.cz/clanky/krivky-urcene-polynomem-nejpouzivanejsi-krivky-v-soucasnosti/
#
# Součást seriálu:
#
# Křivky nejen v počítačové grafice
# https://www.root.cz/serialy/krivky-nejen-v-pocitacove-grafice/
#
# Zdrojový kód tohoto skriptu ve stylu literate programming
# https://tisnik.github.io/presentations/appendix/lit_sources/approximation/taylor_sin_5.html
#
import numpy as np
import matplotlib.pyplot as plt
def taylor_series(x, order):
"""Výpočet aproximace hodnoty funkce pomocí Taylorovy řady."""
a = x
sum = a
for i in range(1, order):
a *= -1 * x ** 2 / ((2 * i) * (2 * i + 1))
sum += a
return sum
# průběh nezávislé proměnné x
# (hodnoty na x-ové ose)
x = np.linspace(-20, 20, 500)
# funkce kterou aproximujeme Taylorovou řadou
y = np.sin(x)
# vykreslení původní funkce
plt.plot(x, y, label="sin(x)")
# příprava pro vlastní výpočet
ys = np.vectorize(taylor_series)
# aproximace Taylorovou řadou
N = 5
# výpočet s převodem na typ numpy.array
approx = ys(x, N)
# vykreslení aproximace funkce
plt.plot(x, approx, label="order {o}".format(o=N))
# limity na ose y
plt.ylim([-3, 3])
# legenda grafu
plt.legend()
# uložení grafu do rastrového obrázku
plt.savefig("taylor_sin_5.png")
# zobrazení grafu
plt.show()