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

Podobné dokumenty
Iterační výpočty Projekt č. 2

Projektč.3dopředmětuIZP. Maticové operace

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

Základy programování (IZP)

Základy programování (IZP)

Základy programování (IZP)

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

NPRG030 Programování I, 2018/19 1 / :25:37

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

X36UNX 16. Numerické výpočty v sh příkazy expr, bc, dc. Zdeněk Sojka

Matematika III. Miroslava Dubcová, Daniel Turzík, Drahoslava Janovská. Ústav matematiky

C# konzole Podíl dvou čísel, podmínka IF

Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

Otázky k ústní zkoušce, přehled témat A. Číselné řady

. je zlomkem. Ten je smysluplný pro jakýkoli jmenovatel různý od nuly. Musí tedy platit = 0

Základy programování (IZP)

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

Základy programování (IZP)

II. Úlohy na vložené cykly a podprogramy

Grafy elementárních funkcí v posunutém tvaru

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Exponenciální funkce. a>1, pro a>0 a<1 existuje jiný graf, který bude uveden za chvíli. Z tohoto

2. úkol MI-PAA. Jan Jůna (junajan)

1 LIMITA FUNKCE Definice funkce. Pravidlo f, které každému x z množiny D přiřazuje právě jedno y z množiny H se nazývá funkce proměnné x.

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Algoritmizace a programování

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Matematika I (KMI/PMATE)

0.1 Úvod do matematické analýzy

Začínáme vážně programovat. Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů

KRY. Projekt č. 2. Kamil Dudka xdudka00

Testování prvočíselnosti

Střední odborná škola a Střední odborné učiliště, Hořovice

MATURITNÍ TÉMATA Z MATEMATIKY

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Příklad 1 ŘEŠENÉ PŘÍKLADY Z M1B ČÁST 2. Určete a načrtněte definiční obory funkcí více proměnných: a) (, ) = b) (, ) = 3. c) (, ) = d) (, ) =

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Lekce 01 Úvod do algoritmizace

Maturitní témata z matematiky

Matematika (KMI/PMATE)

Základy algoritmizace a programování

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

INTERNETOVÉ ZKOUŠKY NANEČISTO - VŠE: UKÁZKOVÁ PRÁCE

7. Funkce jedné reálné proměnné, základní pojmy

IV. Základní pojmy matematické analýzy IV.1. Rozšíření množiny reálných čísel

Objektové programování

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

ŘADY KOMPLEXNÍCH FUNKCÍ

Circular Harmonics. Tomáš Zámečník

Doňar B., Zaplatílek K.: MATLAB - tvorba uživatelských aplikací, BEN - technická literatura, Praha, (ISBN:

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))

Čísla v plovoucířádovéčárce. INP 2008 FIT VUT v Brně

- jak udělat konstantu long int: L long velka = 78L;

C2110 Operační systém UNIX a základy programování

0.1 Funkce a její vlastnosti

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

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.

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

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.

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

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Základy programování (IZP)

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

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.

FUNKCE, ZÁKLADNÍ POJMY

Kapitola 2: Spojitost a limita funkce 1/20

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.

Logaritmus. Logaritmus kladného čísla o základu kladném a různém od 1 je exponent, kterým. umocníme základ a, abychom dostali číslo.

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

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice

Stručný návod k programu Octave

Základy programování. Úloha: Eratosthenovo síto. Autor: Josef Hrabal Číslo: HRA0031 Datum: Předmět: ZAP

Architektury počítačů

Základy PERLu snadno a rychle

Opakovací kurs středoškolské matematiky podzim

4EK213 Lineární modely. 4. Simplexová metoda - závěr

Planimetrie 2. část, Funkce, Goniometrie. PC a dataprojektor, učebnice. Gymnázium Jiřího Ortena, Kutná Hora. Průřezová témata Poznámky

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

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Funkce Arcsin. Předpoklady: Některé dosud probírané funkce můžeme spojit do dvojic: 4 je číslo, jehož druhá mocnina se rovná 4.

Kapitola 1: Reálné funkce 1/20

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

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

FUNKCE, ZÁKLADNÍ POJMY

Algoritmizace a programování

COMPLEXITY

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Funkce základní pojmy a vlastnosti

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

Zada ní 1. Semina rní pra ce z pr edme tu Matematický software (KI/MSW)

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Jednoduché příkazy jazyka Pascal

Doba běhu daného algoritmu/programu. 1. Který fragment programu z následujících dvou proběhne rychleji?

Posloupnosti a řady. a n+1 = a n + 4, a 1 = 5 a n+1 = a n + 5, a 1 = 5. a n+1 = a n+1 = n + 1 n a n, a 1 = 1 2

Matematická analýza 1, příklady na procvičení (Josef Tkadlec, )

Gymnázium Jiřího Ortena, Kutná Hora

Funkce základní pojmy a vlastnosti

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

NMAF 051, ZS Zkoušková písemná práce 16. ledna 2009

Výpočet excentrického klikového mechanismu v systému MAPLE 11 Tomáš Svoboda Technická fakulta Česká Zemědělská Univerzita

Transkript:

Dokumentace k projektu č. 2 do IZP Iterační výpočty 24. listopadu 2004 Autor: Kamil Dudka, xdudka00@stud.fit.vutbr.cz Fakulta Informačních Technologií Vysoké Učení Technické v Brně

Obsah 1. Úvod...3 2. Analýza problému a princip jeho řešení...3 2.1. Zadání problému 2.2. Konvergentní řada 2.3. Věta o konvergenčním intervalu 3. Návrh řešení problému...4 3.1. Definiční obory jednotlivých funkcí 3.2. Řady pro výpočet jednotlivých funkcí 3.3. Efektivita konvergentní řady 4. Specifikace testů...5 5. Popis řešení...6 5.1. Ovládání programu 5.2. Vlastní implementace 5.3. Přirozený logaritmus 6. Závěr...7 7. Metriky kódu...7 8. Použitá literatura...7

1. Úvod Tato dokumentace popisuje návrh a implementaci programu na výpočet matematických funkcí (odmocnina, sinus, e x a přirozený logaritmus). V kapitole 2 se nachází stručná charakteristika řešeného problému, jeho analýza a z ní vyplývající princip řešení. V této kapitole je přiblížena problematika použití konvergenčních řad pro výpočet matematických funkcí. Kapitola 3 se zabývá návrhem vlastního řešení, zejména problematikou efektivnosti a konečnosti algoritmů pro výpočet těchto matematických funkcí. Z ohledem na omezení těchto algoritmů byly zvoleny testovací hodnoty aplikace (kapitola 4). Implementaci (kapitola 5) přímo vyplývá z provedené analýzy a návrhu řešení. V závěru (kapitola 6) je zhodnoceno celkové řešení programu. 2. Analýza 2.1. Zadání problému Bylo požadováno vytvoření programu v jazyce C, který bude počítat matematické funkce odmocnina, sinus, e x a přirozený logaritmus se zadanou přesností. Dále bylo požadováno, aby program načetl z parametrů přepínač, determinující funkci, a přesnost epsilon. Přesnost epsilon je maximální přípustný rozdíl vypočtené hodnoty od skutečného součtu konvergenční řady. Vlastní vstupní hodnoty má program načítat ze standartního vstupu a vypočtené hodnoty má program vypisovat na standartní výstup. 2.2 Konvergentní řada Cílem úlohy bylo odvození iteračních výpočtů z rekurentních vztahů. Rekurentní vztahy pro odmocninu, sinus a e x byly uvedeny v zadání úlohy. Pro přirozený logaritmus jsem použil vztah z [2]. Nekonečné řady pro výpočet hodnoty matematických funkcí nemusí být konvergentní pro všechna reálná čísla (ani pro celý definiční obor funkce). Pokud je vstupní hodnota mimo konvergenční interval, přestává být řada konvergentní a může dojít k zacyklení algoritmu. Proto je potřeba zajistit (např. vhodnou úpravou), aby vstupní hodnoty spadaly do konvergenčního intervalu. Zejména je nutné ošetřit vstupní hodnoty, zdali nejsou mimo definiční obor funkce. 2.3. Věta o konvergenčním intervalu [2] Ke každé mocninné řadě a k x k k =0 existuje takové číslo (tzv. poloměr konvergence) r 0 (připouštíme i r = ), že pro všechna čísla x pro něž x r (tzv. interval konvergence) je mocninná řada absolutně konvergentní a pro všechna čísla x pro něž x r, je divergentní. V bodech x, pro něž x =r, nelze obecně rozhodnout, zda mocninná řada je konvergentní nebo divergentní. Je-li r =0, pak mocninná řada je konvergentní jen v bodě x =0. Jestliže r =, pak je konvergentní na množině R. - 3 -

3. Návrh řešení problému 3.1. Definiční obory jednotlivých funkcí Obor vstupních hodnot je omezen jednak skutečným definičním oborem dané funkce a jednak rozsahem hodnot použitého datového typu. Přímo v zadání byl určen datový typ double s plovoucí řádovou tečkou. Tento datový typ je omezen rozsahem i přesností a s tím je nutno v implementaci počítat. Double umí mimo jiné reprezentovat neurčité hodnoty jako je, a NAN (Not A Number). Součástí výpočtu každé matematické funkce je ošetření vstupní hodnoty, zdali spadá do zvoleného rozsahu přípustných vstupních hodnot. 3.2. Řady pro výpočet jednotlivých funkcí Některé vztahy (vztah pro odmocninu ze zadání úlohy) jsou dány rekurentně. S ohledem na omezení rekurentních algoritmů a jejich složitost byl zvolen algoritmus využívající iteraci (cyklus). Odmocnina (rekurentní vztah pro výpočet řady) Y 0 =X, Y i 1 = 1 2 X Y i Y i, kde X je vstupní hodnota Sinus (konvergentní řada) sin x = x 1 1! x 3 3! x 5 5! x 7, x 7! e x (konvergentní řada) e x = x 0 0! x 1 1! x 2 2! x 3, x 3! přirozený logaritmus (konvergentní řada)[2] ln x = x 1 x 2 x 3, 0 x 2 1 2 3 3.3. Efektivita konvergentní řady Z věty o konvergenčním intervalu (kapitola 2.3.) vyplývá, že řada je konvergentní pro všechna x z konvergenčního intervalu. To však neznamená, že je řada pro všechna x stejně efektivní. Například funkce sinus má interval nejlepší konvergence 0, 4 (s ohledem na rozsah úlohy byl zvolen interval 0, 2, který je dostačující). Funkce sinus je periodická, dá se tady vstupní hodnota snadno upravit na rozsah periody 0, 2. Dále je možné využít průběhu funkce (funkce sinus je lichá, 1. a 2. kvadrant je osově souměrný podle přímky x = 2 ) a upravit tak vstupní hodnotu na hodnotu z intervalu 0,. Obdobným způsobem jsou upraveny vstupní hodnoty 2 ostatních funkcí. Vzhledem k tomu že typ double má jen omezenou přesnost, může být tento převod velmi nepřesný, zejména pro vysokou absolutní hodnotu vstupních hodnot (projevuje se u funkce sinus). - 4 -

4. Specifikace testů Testoval jsem zejména ošetření parametrů a rozsahu vstupních hodnot. Dále jsem se zaměřil na čísla z okraje definičních oborů a tzv. nečísla neboli NAN. Testy byly provedeny na systému Linux. Výpis nápovědy $proj2 -h (vypíše se nápověda) Ošetření 1. parametru $proj2 -cos 0.001 (výpis chybové hlášky na stderr) Ošetření 2. parametru $proj2 -sqrt ahoj (výpis chybové hlášky na stderr) $proj2 -sin 0 (výpis chybové hlášky na stderr) Testování funkce odmocnina $proj2 -sqrt 1e-12 <<< -inf 0 2 4 1e30 inf nan 1.4142135624e+00 2.0000000000e+00 1.0000000000e+15 inf Testování funkce sinus $proj2 -sin 1e-30 <<< -4 0 3.5 10 7.5680249531e-01-3.5078322769e-01-5.4402111089e-01 Testování funkce e x $proj2 -ex.007 <<< "-inf.75 1e10" 2.1147460938e+00 inf Testování funkce ln(x) $proj2 -ln 1e-12 <<< "-.1 0 1 10 7.456e3 1e50" nan -inf 2.3025850930e+00 8.9167743564e+00 1.1512925465e+02-5 -

5. Popis řešení 5.1. Ovládání programu Program je řešen jako konzolová aplikace, má tedy pouze textové ovládání. Je volán se dvěma parametry. Prvním parametrem uživatel volí matematickou funkci, jejíž hodnotu bude program počítat. Pro výpis nápovědy je použit parametr -h (nápověda se také vypíše pokud je program spuštěn s méně než dvěma parametry). Další možnosti jsou: -sqrt odmocnina -sin sinus -ex e x -ln přirozený logaritmus Druhý parametr je přesnost epsilon (viz. Kapitola 2.1). Zadává se buď jako desetinné číslo, nebo v semilogaritmickém tvaru. Přesnost musí být vždy větší než nula, jinak je parametr požadován za neplatný. Vlastní hodnoty pro výpočet jsou načítány ze standartního vstupu a může jich být nekonečně mnoho (není omezeno vlastním programem). Každá hodnota je předána zvolené funkci a výsledek je zapsán na standratní výstup. Během samotného výpočtu nejsou vypisovány žádné chybové hlášky. Pokud je vstupní hodnota mimo definiční obor funkce vypíše se nan. Pokud je výsledek v nekonečnu, resp. v minus nekonečnu vypíše se inf, resp. -inf. Pokud je výsledek příliš velký a není možné ho zapsat do proměnné typu double, vrátí funkce nekonečno. 5.2. Vlastní implementace Aby byl vlastní program přehlednější, vytvořil jsem si hlavičkový soubor proj2.h, který zajišťuje výpis nápovědy a chybových hlášek. Dále jsem vytvořil čtyři podprogramy pro každou matematickou funkci jeden. Hlavní program zajišťuje rozpoznání prvního parametru, podle kterého nastaví ukazatel vypocti na požadovanou funkci. Dále načte přesnost epsilon z druhého parametru a zkontroluje její rozsah. Následuje cyklus while, který postupně načítá data ze standartního vstupu, provádí výpočet a vypisuje výsledek v přesně stanoveném tvaru na standartní výstup. Pokud jsou na vstupu neplatná data (data, která nenačte funkce scanf s konverzí %le), cyklus se ukončí dříve než dojde na konec souboru (znak EOF). Na začátku každé funkce je kontrola vstupní hodnoty (viz. kapitola 3.1). Vstupní hodnota je vždy nejprve upravena na interval nejrychlejší konvergence (viz. kapitola 3.4). Výjimku tvoří funkce odmocnina, ve které je spuštěna iterace přímo se zadaným číslem. V této části jsou využívány knihovní funkce z math.h, jejichž použití bylo omezeno na oblast mimo vlastní iterační výpočet. Jedná se o funkce sqrt(), modf(), fmod() a exp(). Výsledný součet řady je upraven tak, aby odpovídal vstupní hodnotě před úpravou na interval nejrychlejší konvergence (podrobně popsáno v následující kapitole). - 6 -

5.3. Přirozený logaritmus Výpočet přirozeného logaritmu je realizován ve funkci lnx. Této funkci jsou předávány dva parametry datového typu double. První parametr je argument přirozeného logaritmu a druhý je přesnost epsilon. Funkce vrací vypočtenou hodnotu přirozeného logaritmu, rovněž typu double. Ještě před výpočtem součtu řady, upravuji vstupní hodnotu na interval e, e. Tím e získám získám celý počet polovin výsledku logaritmu. K tomuto účelu jsou použity dva cykly typu while jeden pro vstupní hodnoty x e a druhý pro hodnoty x e. Složitost těchto cyklů e roste pro x a x 0, ale i pro mezní hodnoty skončí cyklus v rozumném čase. Konvergenční interval pro použitou řadu je 0 x 2, ale pro hodnotu z intervalu e, e získám výslednou hodnotu mnohem rychleji při stejné přesnosti. e Vlastní algoritmus pro výpočet řady byl volen s ohledem na jeho efektivnost. Aktuální člen řady je vždy vypočten na základě předchozího členu. Absolutní hodnota aktuálního členu je porovnána s epsilon pokud je dosažena přesnost, cyklus se ukončí. Aktuální člen je přičten částečnému součtu řady a provede se další iterace. Po skončení cyklu přičte funkce k součtu řady, ještě celý počet polovin (viz. výše). Uvnitř funkce není nijak kontrolována hodnota epsilon předaná parametrem eps. Proto je důležité, volat funkci vždy s eps 0. Pokud by tato podmínka nebyla splněna, stal by se cyklus nekonečný. Rozsah hodnot přípustný pro epsilon je kontrolován v hlavním programu. 6. Závěr Algoritmy byly voleny co nejefektivněji s ohledem na rozsah úlohy. Přesto je praktická využitelnost programu mizivá. Knihovní funkce sqrt(), sin(), exp() a log() totiž využívají koprocesor a jsou tak mnohem rychlejší a přesnější. Program byl otestován se všemi navrženými testovacími hodnotami a jeho výsledky byly srovnány s knihovními funkcemi z math.h. Výsledky testů jsou patrné z kapitoly 4. Program přesně dodržuje požadavky na formát vstupních a výstupních dat, takže může být bezproblémově používán spolu s dalšími programy ve skriptech nebo jiných programech. 7. Metriky kódu Počet souborů: 2 soubory Počet řádků zdrojového textu: 282 + 43 řádků Velikost statických dat: 4604 bytů Velikost spustitelného souboru: 15091 bytů (systém Linux) 8. Použitá literatura [1] Vztahy uvedené v zdání úlohy [2] Bartsch: Matematické vzorce - 7 -