====== 4. úkol - Pi ====== Cílem čtvrté úlohy je aproximovat transcendentní číslo Pi pomocí částečných součtů dvou nekonečných řad a numerickým řešením rovnice $\sin(x) = 0$. ===== Zadání ===== ==== Gregoryho-Leibnizova řada ==== Vytvořte funkci s názvem leibnizPi s jedním parametrem (určujícím počet členů), jež sečte daný počet členů Gregoryho-Leibnizovy řady: {{courses:b6b36zal:zadani:pi1.png?400|}} Tzn. volání funkce ''leibnizPi(1)'' vrátí ''4.0'', ''leibnizPi(2)'' vrátí ''2.666666'', atd. ==== Nilakantova řada ==== Vytvořte obdobnou funkci nilakanthaPi (také s jedním parametrem) sčítající řadu: {{courses:b6b36zal:zadani:pi2.png?600|}} Tzn. volání funkce ''nilakanthaPi(1)'' vrátí ''3.0'', ''nilakanthaPi(2)'' vrátí ''3.166666'', atd. ==== Numerické řešení rovnice ==== Vytvořte funkci newtonPi s jedním parametrem (počáteční hodnota $x_0$), která bude numericky řešit rovnici $\sin(x) = 0$ pomocí metody tečen (viz. [[https://cs.wikipedia.org/wiki/Metoda_te%C4%8Den|Newtonova metoda]] a její použití při výpočtu odmocniny). Tento **algoritmus** se obecně snaží najít takové $x$, pro které platí $f(x) = 0$, pomocí cyklického vyhodnocování výrazu: $$ x_{k+1} = x_k - \frac{f(x_k)}{f^{\prime}(x_k)}, $$ kde $f^{\prime}$ značí derivaci funkce $f$. Hledání tedy začneme s nějakou počáteční hodnotu $x_0$ (parametr funkce newtonPi). Použitím uvedeného výrazu vypočteme novou hodnotu $x_1$ (krok $k$=0). Tuto nově získanou hodnotu $x_1$ následně obdobně použijeme k výpočtu $x_2$ (krok $k$=1), atd. dokud rozdíl mezi $x_k$ a $x_{k+1}$ není zanedbatelně malý, neboli $x_k = x_{k+1}$ s ohledem na přesnost použitého datového typu proměnných. Jakmile tato podmínka nastane, tak poslední takto získanou hodnotu $x$ prohlásíme za řešení rovnice $f(x) = 0$. * V tomto případě $f(x) = \sin(x)$ a $f^{\prime}(x) = \cos(x)$. * Pro výpočet $\cos(x)$ a $\sin(x)$ v Pythonu použijte modul math (funkce math.cos, math.sin). * Volání funkce newtonPi(3.0) (počáteční hodnota $x_0=3.0$) by mělo vrátit vámi spočtenou hodnotu konstanty Pi. * Inspirujte se obdobným příkladem ze cvičení pro výpočet odmocniny $\sqrt{S}$, kde se takto hledá řešení pro $f(x) = x^2 - S$. ==== Upload ==== Všechny tyto tři funkce umístěte do souboru picalculator.py a ten následně nahrajte do [[https://cw.felk.cvut.cz/upload|Odevzdávacího systému]]. K implementaci použijte tuto šablonu: {{:courses:b6b36zal:zadani:picalculator.py|}} Pozor: K vyhodnocení se využívá Python 3. ===== Hodnocení ===== Za každou funkci můžete získat **1 bod**, celkem tedy **3 body**. Za každý započatý týden po deadline (termínu odevzdání) je penalizace 2 body. Záporné body neudělujeme. Aby jste nemuseli chodit na vaše následující cvičení, tak je potřeba úlohu odevzdat před cvičením a mít za ní plný počet bodů.