Zápočtový úkol 1#
Implementujte funkci o jednom parametru \(n \in \mathbb{N}_0\), která vrací prvních \(n + 1\) členů Maclaurinovy řady (Taylorova řada pro \(a = 0\)) funkce:
ve formátu numpy.poly1d
(pole koeficientů polynomu obalené do speciální Numpy struktury). Vypište polynom pro \(n=3\). Vykreslete aproximaci a funkci \(\sin(x)\) na intervalu \([-\pi,\pi]\) pro \(n = 3\).
Pro vyhodnocení polynomu polynom
v daném bodě \(x\) lze použít funkci np.polyval(polynom, x)
nebo přímo polynom(x)
.
Dále napište funkci, která spočítá relativní chybu aproximace této funkce pro libovolné \(x \in \mathbb{R}\) a \(n \in \mathbb{N}_0\). Vypiště hodnotu relativní chyby pro \( x = \frac{\pi}{2} \) a \( n = 2\) na 16 platných míst.
Najděte \( n \) takové, pro které je relativní chyba v \( x = \frac{\pi}{2} \) menší než \( 200 \, \varepsilon \), kde \( \varepsilon \) je strojová přesnost pro 64-bitovou floating-point reprezentaci desetinných čísel (np.float64
). Vypište nalezenou hodnotu \(n\).
Implementujte metodu, která počítá funkci \(\sin(x)\) na celé množině reálných čísel \(\mathbb{R}\) s rozumnou chybou (která příliš neroste pro vysoké hodnoty \(x\)). Princip řešení tohoto problému je podobný jako v přednášce zde, kde jsme počítali hodnotu funkce \(e^x\). Navrhněte způsob, jak redukovat hodnotu \(x\), kterou využíváme v Taylorově řadě funkce \(\sin(x)\). Využijte k tomu 2 známé základní vlastnosti funkce sinus.
Vykreslete na intervalu \([-5.1\pi,5.1\pi]\). Kde dochází k největší absolutní a kde relativní chybě? Proč?
Bonus:
Vylepšete aproximaci dále použitím celkem 3 vlastností tak, že použijete také vlastnost:
Tento vztah dále omezí interval, na kterém musíme použít Taylora. (Dejte pozor na zápornou část intervalu.) Relativní chyba by měla být menší než \(10^{-3}\) na celém \(\mathbb{R}\) již pro \(n=3\) (pro čtyři členy Taylorova rozvoje)! To je díky tomu, že je použit rozvoj pouze na intervalu \([0,\frac{\pi}{2}]\). Pro jaké \(n\) narazí chyba na strojovou přesnost počítače \(\varepsilon\)? Pro určité hodnoty \(x\) je relativní chyba výrazně vyšší a roste s rozlišením (s menším krokem, se kterým vyhodnocujeme \(\sin(x)\)). Proč k tomu dochází a co by s tím šlo udělat?
import numpy as np
import matplotlib.pyplot as plt
## DOPLŇTE ##