Iterační výpočty Projekt č. 2



Podobné dokumenty
Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

Iterační výpočty. Dokumentace k projektu č. 2 do IZP. 24. listopadu 2004

Iterační výpočty. Dokumentace k projektu pro předměty IZP a IUS. projekt č listopadu 2008

Iterační výpočty. Dokumentace k projektu pro předměty IZP a IUS. 22. listopadu projekt č. 2

Dokumetace k projektu pro předměty IZP a IUS

Metody výpočtu limit funkcí a posloupností

Wolfram Alpha. v podobě html stránky, samotný výsledek je často doplněn o další informace (např. graf, jiné možné zobrazení výsledku a

LEKCE10-RAD Otázky

SBÍRKA ÚLOH I. Základní poznatky Teorie množin. Kniha Kapitola Podkapitola Opakování ze ZŠ Co se hodí si zapamatovat. Přírozená čísla.

Požadavky k opravným zkouškám z matematiky školní rok

Anotace: Digitální učební materiály slouží k zopakování a k testování získaných znalostí a dovedností.

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Číslo hodiny. Označení materiálu. 1. Mnohočleny. 25. Zlomky. 26. Opakování učiva 7. ročníku. 27. Druhá mocnina, odmocnina, Pythagorova věta

KTE / PPEL Počítačová podpora v elektrotechnice

Algoritmizace a programování

Kapitola 2: Spojitost a limita funkce 1/20

Definice (Racionální mocnina). Buď,. Nechť, kde a a čísla jsou nesoudělná. Pak: 1. je-li a sudé, (nebo) 2. je-li liché, klademe

Praha & EU: investujeme do vaší budoucnosti. Daniel Turzík, Miroslava Dubcová,

Konvergence kuncova/

Matematika I (KMI/PMATE)

Tato tematika je zpracována v Záznamy přednášek: str

Rovnice 2 Vypracovala: Ing. Stanislava Kaděrková

MATURITNÍ TÉMATA Z MATEMATIKY

0.1 Funkce a její vlastnosti

x (D(f) D(g)) : (f + g)(x) = f(x) + g(x), (2) rozdíl funkcí f g znamená: x (D(f) D(g)) : (f g)(x) = f(x) g(x), (3) součin funkcí f.

Matematika (KMI/PMATE)

Břetislav Fajmon, UMAT FEKT, VUT Brno. Poznámka 1.1. A) první část hodiny (cca 50 minut): představení všech tří metod při řešení jednoho příkladu.

Co je obsahem numerických metod?

Připomenutí co je to soustava lineárních rovnic

Cyklometrické funkce

Složitější aritmetické operace

V této kapitole si zobecníme dříve probraný pojem limita posloupnosti pro libovolné funkce.

0.1 Úvod do matematické analýzy

Požadavky k opravným zkouškám z matematiky školní rok

Projekt OPVK - CZ.1.07/1.1.00/ Matematika pro všechny. Univerzita Palackého v Olomouci

7B. Výpočet limit L Hospitalovo pravidlo

(FAPPZ) Petr Gurka aktualizováno 12. října Přehled některých elementárních funkcí

1. Několik základních pojmů ze středoškolské matematiky. Na začátku si připomeneme následující pojmy:

Základy programování (IZP)

8. Elementární funkce. I. Exponenciální funkce Definice: Pro komplexní hodnoty z definujeme exponenciální funkci předpisem ( ) e z z k k!.

CZ 1.07/1.1.32/

Maturitní témata z matematiky

ANOTACE vytvořených/inovovaných materiálů

Čísla, reprezentace, zjednodušené výpočty

7. Aplikace derivace

Matematika 1. Matematika 1

Funkce jedn e re aln e promˇ enn e Derivace Pˇredn aˇska ˇr ıjna 2015

Matematika 1 pro PEF PaE

Vypracoval: Mgr. Lukáš Bičík TENTO PROJEKT JE SPOLUFINANCOVÁN EVROPSKÝM SOCIÁLNÍM FONDEM A STÁTNÍM ROZPOČTEM ČESKÉ REPUBLIKY

Příklad 1/23. Pro rostoucí spojité fukce f(x), g(x) platí f(x) Ω(g(x)). Z toho plyne, že: a) f(x) Ο(g(x)) b) f(x) Θ(g(x)) d) g(x) Ω(f(x))

Mgr. Ladislav Zemánek Maturitní okruhy Matematika Obor reálných čísel

Základy algoritmizace a programování

Určete (v závislosti na parametru), zda daný integrál konverguje, respektive zda konverguje. dx = t 1/α 1 dt. sin x α dx =

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

= - rovnost dvou výrazů, za x můžeme dosazovat různá čísla, tím měníme

Obecnou definici vynecháme. Jednoduše řečeno: složenou funkci dostaneme, když dosadíme za argument funkci g. Potom y f g

Už známe datové typy pro representaci celých čísel i typy pro representaci

Logaritmické a exponenciální funkce

9. lekce Úvod do jazyka C 4. část Funkce, rekurze Editace, kompilace, spuštění Miroslav Jílek

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

úloh pro ODR jednokrokové metody

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

Funkce kotangens. cotgα = = Zopakuj všechny části předchozí kapitoly pro funkci kotangens. B a

1 Diference a diferenční rovnice

1. Chyby vstupních dat metody převedení úlohy na numerickou (řád použité metody) zaokrouhlovací reprezentace čísel v počítači

Funkce jedné reálné proměnné. lineární kvadratická racionální exponenciální logaritmická s absolutní hodnotou

Definice funkce tangens na jednotkové kružnici :

f (k) (x 0 ) (x x 0 ) k, x (x 0 r, x 0 + r). k! f(x) = k=1 Řada se nazývá Taylorovou řadou funkce f v bodě x 0. Přehled některých Taylorových řad.

Programování v C++ 1, 1. cvičení

INTEGRÁLY S PARAMETREM

Násobení pomocí sčítání

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Projekt IMPLEMENTACE ŠVP. pořadí početních operací, dělitelnost, společný dělitel a násobek, základní početní operace

Algoritmizace a programování

KTE/TEVS - Rychlá Fourierova transformace. Pavel Karban. Katedra teoretické elektrotechniky Fakulta elektrotechnická Západočeská univerzita v Plzni

I. 7. Diferenciál funkce a Taylorova věta

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

Numerická matematika 1

Numerická matematika Písemky

Učební plán 4. letého studia předmětu matematiky. Učební plán 6. letého studia předmětu matematiky

MATURITNÍ OTÁZKY Z MATEMATIKY PRO ŠKOLNÍ ROK 2010/2011

DIGITÁLNÍ ARCHIV VZDĚLÁVACÍCH MATERIÁLŮ

Příklad 1. Řešení 1a Máme vyšetřit lichost či sudost funkce ŘEŠENÉ PŘÍKLADY Z M1A ČÁST 3

Funkce komplexní proměnné a integrální transformace

Cyklometrické funkce

NMAF 051, ZS Zkoušková písemná práce 26. ledna x. x 1 + x dx. q 1. u = x = 1 u2. = 1 u. u 2 (1 + u 2 ) (1 u 2 du = 2.

Libovolnou z probraných metod najděte s přesností na 3 desetinná místa kladný kořen rovnice. sin x + x 2 2 = 0.

Hledání kořenů rovnic jedné reálné proměnné metoda půlení intervalů Michal Čihák 23. října 2012

Statistická teorie učení

1) Spočítejte limitu pomocí l Hospitalova pravidla, pokud selˇze, spočítejte ji klasicky:

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Algebraické výrazy - řešené úlohy

Funkce tangens. cotgα = = B a. A Tangens a cotangens jsou definovány v pravoúhlém trojúhelníku: a protilehlá b přilehlá.

V této chvíli je obtížné exponenciální funkci přesně definovat. Můžeme však říci, že

Transkript:

Dokumentace k projektu pro předměty IUS & IZP Iterační výpočty Projekt č. 2 Autor: Jan Kaláb (xkalab00@stud.fit.vutbr.cz)

Úvod Úkolem bylo napsat v jazyce C program sloužící k výpočtům matematických funkcí druhé odmocniny, sinu, mocniny Eulerova čísla, přirozeného logaritmu a některých jejich kombinací (druhá odmocnina z mocniny Eulerova čísla, ) pomocí základních matematických operací (sčítání, odečítání, násobení a dělení). Dokument postupně rozebírá jednotlivé funkce a popisuje jejich implementaci. V poslední kapitole jsou informace o použití programu. 1

Druhá odmocnina Druhá odmocnina je jedna ze základních matematických funkcí. Její definiční obor v množině reálných čísel a obor hodnot jsou všechna kladná reálná čísla včetně nuly. Pro její výpočet existuje několik aproximačních metod, v programu je použita tzv. Babylonská. Tato metoda je odvozena z Newtonovy metody, avšak je starší. x 0 S x n 1 = 1 2 x n S x n S=lim x n Z výše uvedeného vzorce vyplývá celý algoritmus: 1 výsledek je zadané číslo 2 zpřesníme výsledek 2.1 podělíme zadané číslo předchozím výsledkem 2.2 přičteme předchozí výsledek 2.3 podělíme dvěma 3 krok 2 opakujeme dokud nedosáhneme požadované přesnosti ε. V praxi vypadá kód v jazyce C takto: double druhaodmocnina (double neznama, double eps) { double y = neznama; if (y == 0) return 0; double last = 0; if (neznama > 0) { do { last = y; y = (neznama / last + last) / 2; while (fabs (y last) >= eps); else { fprintf (stderr, "Odmocninu lze vypocitat jen z kladnych cisel!\n"); return NAN; return y; 2

Sinus Sinus je periodicky se opakující (po 2π) goniometrická funkce. Definičním oborem jsou jí všechna reálná čísla, oborem hodnot pak interval < 1; 1>. Pro aproximaci její hodnoty lze dobře použít Taylorovu řadu: Tu lze upravit do rekurentního vztahu: sin x=x x3 3! x5 5! x7 7! y n = y n 1 x 2 k k 1 y n je aktuální člen člen, y n 1 je předchozí člen, x je hodnota pro kterou chceme vypočíst sinus, k se po každém kroku navýší o 2, takže k * k 1 je rekurentní vztah pro faktoriál ob číslo. Takto počítáme dokud není člen menší nebo roven zadané přesnosti ε. V jazyce C pak funkce sinus vypadá třeba takto: double sinus (double neznama, double eps) { short neg = 0; if (neznama < 0) { neznama = fabs (neznama); neg++; if (neznama > IZP_2PI) neznama = fmod (fabs (neznama), IZP_2PI); double neznama2 = pow (neznama, 2); double y = neznama; double prirustek = neznama; unsigned short k = 3; while (fabs (prirustek) >= eps) { prirustek = ( prirustek/(k * (k 1))) * neznama2; k += 2; y += prirustek; if (neg!= 0) y *= 1; if (y > 1 y < 1) { fprintf (stderr, "Vysledek je mimo rozsah < 1; 1>!\n"); return NAN; return y; Za zmínku stojí řádek if (neznama > IZP_2PI) neznama = fmod (fabs (neznama), IZP_2PI); (IZP_2PI je konstanta pro 2π). Taylorův rozvoj totiž nejrychleji konverguje v intervalu 0 2π. Do toho intervalu se nejrychleji přesuneme tak, že zadané číslo podělíme 2π a použijeme zbytek po dělení. Pokud umíme spočítat sinus, není problém ani kosinus. Stačí pouze k neznámé na začátku přičíst π / 2. No a pokud umíme sinus i kosinus, zvládneme spočítat i tangens (sinus / kosinus) a kotangens (kosinus / sinus). Je ovšem třeba si uvědomit, že jejich definičním oborem nejsou všechna reálná čísla. 3

Mocnina Eulerova čísla Mocnina Eulerova čísla se chová jako každá jiná exponenciální funkce, jejím základem je Eulerovo číslo (e 2,71828182845904523536 ). Pro její výpočet je opět použita Taylorova řada: Z ní lze opět dovodit rekurentní vztah: e x 1 x x2 2! x3 xn 3! n! y n = y n 1 x k y n je aktuální člen, y n 1 je předchozí člen, x je hodnota pro kterou chceme vypočíst mocninu, k číslo kroku. Takto počítáme dokud není člen menší nebo roven zadané přesnosti ε. V jazyce C lze zapsat takto: double enax (double neznama, double eps) { short neg = 0; if (neznama < 0) { neznama = fabs (neznama); neg = 1; double y = neznama + 1; double prirustek = neznama; unsigned short k = 2; while (fabs (prirustek) >= eps && y!= INFINITY && prirustek!= INFINITY) { prirustek *= (neznama / k); k++; y += prirustek; if (y == INFINITY prirustek == INFINITY) { fprintf (stderr, "Preteceni!\n"); return NAN; if (neg!= 0) y = 1 / y; return y; Problémem je prudký růst exponenciálních funkcí. Výše uvedená implementace dokáže počítat v intervalu ±709, pak dochází k přetečení výsledku z rozsahu double. 4

Přirozený logaritmus Přirozený logaritmus je funkce logaritmu s Eulerovým číslem jako základem. Definičním oborem funkce je množina všech kladných reálných čísel včetně 0 (ln (0) = nekonečno). Pro její výpočet existuje opět Taylorova řada: Z ní se odvodí rekurentní vztah: ln x =2 y 1 y 2 3 y4 5 y6 7 y8 9 y= x 1 x 1 y n = y n 1 k z 2 k 2 y n je aktuální člen, y n 1 je předchozí člen, k je číslo kroku (v každém kroku se navýší o 2), z je y z prvního vzorce. Takto počítáme dokud není člen menší nebo roven zadané přesnosti ε. Zápis v jazyce C: double prirozenylogaritmus (double neznama, double eps) { if (neznama == 0) return INFINITY; if (neznama < 0){ fprintf (stderr, "Prirozeny logaritmus lze pocitat jen z cisel vetsich nez 0!\n"); return NAN; int mocnina = 0; while (neznama >= 2) { neznama = neznama / 10; mocnina++; while (neznama <=.1 && neznama > 0) { neznama = neznama * 10; mocnina ; double z = (neznama 1) / (neznama + 1); double zz = z * 2; double z2 = pow(z, 2); double y = zz; unsigned int k = 1; double prirustek = y; while (fabs (prirustek) >= eps && prirustek!= INFINITY && y!= INFINITY) { prirustek *= ((k * z2) / (k + 2)); k += 2; y += prirustek; if (mocnina!= 0) y += (mocnina * log (10)); return y; Problémem tohoto Taylorova rozvoje je opět konvergence nejrychleji konverguje kolem čísla 1. K tomu lze použít pravidlo o dělení logaritmů. log 123,456 =log 1,23456 10 2 =log 1,23456 log 10 2 =log 1,23456 2 log 10 K tomu slouží první dvě while smyčky, první pro velká čísla, druhá pro malá. 5

Složené funkce Program také dokáže počítat složené funkce: Druhou odmocninu z mocniny Eulerova čísla Sinus z přirozeného logaritmu Není třeba v tom hledat nějaké složitosti. Nejdříve vypočteme hodnotu vnitřní funkce se zadanou přesností, poté z výsledku vypočteme vnější funkci se stejnou přesností. Pokud jsou funkce naprogramovány dostatečně efektivně, je výpočet rychlý a přesný. 6

Použití programu Program je psán v jazyce C podle standardu C99. Pro jeho přeložení použijte příkaz gcc -std=c99 -Wall -W -lm -pedantic proj2.c -o proj2 -O2 (nemělo by se vypsat žádné varování). Program se poté spouští příkazem./proj2 -FUNKCE ε (pro seznam funkcí a informace o ε si parametrem -h nebo spuštěním bez parametrů zobrazte nápovědu). Program pak na standardním vstupu očekává zadání pro výpočet. 7

Použité zdroje http://cs.wikipedia.org/wiki/taylorova_%c5%99ada#p.c5.99.c3.adklady_taylorova_r ozvoje http://en.wikipedia.org/wiki/natural_logarithm http://en.wikipedia.org/wiki/trigonometric_function Metriky kódu 1 soubor o 239 řádcích, po překladu dle dokumentace 9,8 kb (10046 bytů), z toho 316 bytů jsou statická data. 8