Vytvorte súbor [priezvisko]-2.R a naprogramujte v ňom nasledovné:
- Naprogramujte funkciu createMatrixByPowers(x, k). Vstupným argumentom je číselný vektor x; jeho dĺžku označme n. Výstupom funkcie je matica s n riadkami a k+1 stĺpcami; jej stĺpce sú: stĺpec jednotiek, stĺpec x, stĺpec x^2, ..., stĺpec x^k. Otestujte túto funkciu pre vektor x=1:5 a k=2. Získanú maticu označte A. Maticu vypíšte (a výpis skopírujte do R-súboru vo forme komentára). Vypíšte aj maticu B, získanú ako (maticový) súčin t(A) s A. Spočítajte inverznú maticu k B a determinant B aj inverznej k B. Vypíšte vlastné čísla B a overte, že sú nezáporné.
- Naprogramujte funkciu calcPi(tol=1e-10, verbose=0), ktorá so zadanou presnosťou odhadne konštantu π podľa metódy Bailey-Borwein-Plouffe (v ďalšom: BBP). Algoritmus implementujte nasledovne:
- postupne v cykle sčitujte jednotlivé členy BBP-rozvoja; pritom nepoužívajte umocňovanie, ale hodnotu zlomku 1/16^k počítajte postupne tak, že si pred cyklom zavediete pomocnú premennú pow16 (ktorú inicializujete na 1) a v cykle ju zakaždým vydelíte 16;
- výpočet ukončite, keď aktuálny člen BBP-rozvoja bude menší ako tol (argument funkcie s default hodnotou 1e-10);
- ak bude argument verbose väčší ako 0, v cykle vypisujte k, aktuálny člen BBP-rozvoja aj aktuálnu aproximáciu konštanty π.
Funkciu použite postupne s toleranciami 1e-10, 1e-11, ..., 1e-16. Zakaždým vypíšte Váš odhad aj chybu (ktorú získate pomocou R-konštanty pi). - Naprogramujte funkciu expByTaylor(x, tol=1e-10), ktorá pre číslo x spočíta hodnotu e^x pomocou Taylorovho rozvoja: e^x = 1 + x^1/1! + x^2/2! + x^3/3! + ... Algoritmus implementujte nasledovne:
- postupne v cykle sčitujte jednotlivé členy Taylorovho rozvoja;
- výpočet ukončite, keď aktuálny člen bude menší ako tol (druhý argument funkcie s default hodnotou 1e-10);
- pri výpočte nasledovného člena nepoužívajte umocňovanie ani faktoriál, ale využite jednoduchý vzťah, ako z (n-1)-vého člena vypočítať n-tý: (n-1)-vý člen stačí vynásobiť x a vydeliť n.
Funkciu použite na celé čísla x od 0 do 10 (využite pritom cyklus for) a výsledok uložte do vektora expx. Porovnaním expx s výsledkom funkcie exp() (ktorá funguje aj pre vektorové argumenty) spočítajte chyby, akých sa Vaša metóda dopustila.
Nepovinne: skúste metódu expByTaylor(x, tol=1e-10) zaimplementovať tak, aby za x bolo možné dosadiť aj vektor. Malo by postačovať upraviť podmienku na ukončenie cyklu.
Všetky výsledky uložte do R-súboru vo forme komentára, hneď za príslušným R-kódom. Pri riešení nepoužite žiadnu z externých R-knižníc; využiť môžete funkcie zo súboru 04-fun.R z poslednej prednášky.
R-súbor pošlite na email vladimir.spitalsky (doména umb.sk) do 14.3.2022.