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:

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:

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. 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 Odevzdávacího systému.

K implementaci použijte tuto šablonu: 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ů.

courses/b6b36zal/zadani/4_pi.txt · Last modified: 2019/10/16 10:11 by seredlad