Dokumentace k projektu pro předměty IZP a IUS Iterační výpočty projekt č.. lstopadu 1 Autor: Mlan Setler, setl1@stud.ft.vutbr.cz Fakulta Informačních Technologí Vysoké Učení Techncké v Brně
Obsah 1 Úvod... 1 Analýza problému... 1. 1 Zadání problému... 1. Obecný logartmus... 1. Hyperbolcký tangens.... 4 Vážený artmetcký průměr.... 5 Vážený kvadratcký průměr... Návrh řešení problému.... 1 Obecný logartmus.... 1. 1 Rekurentní vztah... 4. Hyperbolcký tangens... 4. Vážený artmetcký a kvadratcký průměr... 5. 4 Počet platných číslc... 5 4 Specfkace testů... 5 5 Pops řešení... 7 5. 1 Ovládání programu... 7 5. Datové typy... 8 5. Vlastní realzace... 8 6 Závěr... 8 A Metrky kódu... 9
1 Úvod Tento dokument obsahuje pops návrhu a mplementace programu, který pomocí teračních algortmů zpracovává číselná data zadaná užvatelem a provádí matematcké operace obecný logartmus a hyperbolcký tangens. Se stejným daty počítá také vážený artmetcký průměr a vážený kvadratcký průměr. Analýza problému. 1 Zadání problému Výsledný program musí být schopen provádět matematcké operace hyperbolcký tangens a obecný logartmus. U obou operací určuje přesnost užvatel zadáním parametru sgdg. U obecného logartmu užvatel navíc zadává také základ logartmu. Druhým požadavkem je výpočet statstckých funkcí vážený artmetcký průměr a vážený kvadratcký průměr. Užvatel zadává na standardní vstup posloupnost hodnot, které jsou v programu zpracovány a každé této hodnotě přísluší jedna hodnota z výstupní posloupnost, která je vypsována na standardní výstup. U statstckých funkcí je vstupní posloupnost nterpretována jako dvojce hodnot a výstupní posloupnost je tedy polovční délky vstupní posloupnost. Program musí být schopen ověřt, zda zadané parametry a vstupní hodnoty vyhovují matematcké defnc daných operací a musí umět ošetřt výjmečné případy za použtí hodnot INFINITY a NAN.. Obecný logartmus Logartmcká funkce (v projektu jako loga) je funkcí nverzní k funkc eponencální, jejím výsledkem (y) je číslo nazývané logartmus, pro nějž platí vztahy: y log a, a y (1) Prvním krokem př tvorbě vlastní funkce pro výpočet logartmu je určení defnčního oboru hodnot proměnné a také základu logartmu a. Obrázek 1: Graf logartmcké funkce 1
Z obrázku 1 vyplývají následující omezení hodnot a základu a: a R \{1}, R () Dále je potřeba určt způsob, jakým se bude obecný logartmus počítat. Vzhledem k vlastnostem obecných logartmů jsem použl vzorec log log a log a ln ln a () Výsledný logartmus tedy vyjádřím jako podíl přrozeného logartmu čísla a přrozeného logartmu čísla a. Přrozený logartmus je takový logartmus, ve kterém je jako základ použto tzv. Eulerovo číslo (,7188 1884...).. Hyperbolcký tangens Hyperbolcký tangens je hyperbolcká funkce, v projektu označená zkratkou tanh. Defnčním oborem funkce tanh jsou všechna reálná čísla, oborem hodnot je nterval (-1, 1). Hyperbolcký tangens lze defnovat vztahem. 4 Vážený artmetcký průměr Obrázek : Graf funkce hyperbolcký tangens snh tanh (4) cosh Vážený artmetcký průměr se od artmetckého průměru odlšuje tím, že každá hodnota statstckého souboru má přřazenu odpovídající váhu. Výsledný vážený artmetcký průměr lze pak spočítat následovně: 1w1 w w w 1 w... nw w... w n n (5)
kde je hodnota ze statstckého souboru a w je odpovídající váha této hodnoty. Pokud mají všechny váhy stejnou hodnotu, lze výsledný vážený průměr považovat za artmetcký průměr.. 5 Vážený kvadratcký průměr Pro vážený kvadratcký průměr platí stejná pravdla jako pro vážený artmetcký průměr (vz.. 4), vzorec pro výpočet je následující: 1 w1 w w w 1 w... w... w n n w n (6) Návrh řešení problému. 1 Obecný logartmus Vzhledem k využtí přrozeného logartmu př výpočtu obecného logartmu (vz. vzorec ) bylo nutné sestavt vzorec pro výpočet přrozeného logartmu. Vzhledem k zadání, ve kterém bylo zdůrazněno použtí teračních výpočtů, jsem se rozhodl použít Taylorovu řadu pro přrozený logartmus: 5 ln 1 ( 1) ( 1)... 1 ( 1) 5( 1) 5 Dle matematcké defnce lze v tomto vzorc použít hodnoty >, v rámc optmalzace jsem se však rozhodl počítat pouze s hodnotam v ntervalu <.1, >, kde řada konverguje nejrychlej. Nepoužl jsem nterval (, >, neboť pro nízké hodnoty (např..1) nebyl výpočet zcela přesný. Aby bylo možno tuto řadu použít pro všechna, je nutné hodnoty, které do ntervalu nenáleží, do ntervalu převést. K tomuto účelu slouží vzorec (7) ln ln r m ln e (8) kde je původní hodnota, která je dělena Eulerovým číslem (e), dokud výsledný podíl r nenáleží do ntervalu <.1, >. M je pak počet dělení. Vzhledem k defnc ln e 1 (9) pak lze vzorec 8 zjednodušt takto: ln ln r Tento vztah lze použít pouze pro hodnoty >, pro < <.1 je operace dělení nahrazena násobením a ve vztahu je nutno změnt znaménko před m na -. m (1)
. 1. 1 Rekurentní vztah Nekonečnou řadu ze vzorce 7 je potřeba převést na rekurentní vztah: Y Y ( 1) ( 1) ( k ) (11) Y 1 1 ( 1), ( 1), k 1 (1). Hyperbolcký tangens Pro výpočet této funkce (vzorec 4) jsou potřeba dvě Taylorovy řady: snh! 5 5!... (1) cosh 1! 4 4!... (14) pro které jsem sestavl následující rekurentní vztahy: snh : Y Y Y,, ( k ( k 1)) 1, k 1 k k (15) cosh : Y Y Y 1, 1, ( k ( k 1)) 1, k k k (16) 4
. Vážený artmetcký a kvadratcký průměr Pro výpočet statstckých funkcí je nezbytné průběžně ukládat hodnoty součtů ve a čtatel vzorce 5, resp. 6. Aktuální průměr se pak vypočítá vztahem w w, (17) pro vážený artmetcký průměr, jeho kvadratckému ekvvalentu náleží obdobný vzorec w w, (18). 4 Počet platných číslc Výše uvedené terační vztahy tvoří nekonečně dlouhou řadu, kde se k celkovému součtu přčítají jednotlvé členy, které se postupně zmenšují. Aby bylo možné tyto vztahy použít, je nutné stanovt určtou hodnotu posledního členu, který bude ve výpočtu použt. K určení této hodnoty jsem použl parametr sgdg a zároveň tak určuj také přesnost výsledku. Výpočetní cyklus před každým opakováním testuje, zda je jž dosaženo požadované přesnost a pokud ano, výpočet ukončí. Podmínka na začátku cyklu vypadá takto: Y Y 1 ε.1 sgdg ε (19) 4 Specfkace testů Př testování jsem se zaměřl především na různé varanty chybných vstupních hodnot č parametrů. Test 1: Neplatná hodnota parametru sgdg (počet platných číslc) Program vypíše chybové hlášení na stderr a ukončí se. -5 a blabla 5
Test : Parametr a (základ logartmu) nevyhovuje matematcké defnc Program vypíše chybové hlášení na stderr a ukončí se. 1-1 8 Test : Neplatný znak na standardním vstupu Program vypíše na standardní výstup hodnotu výsledku NAN, vypíše chybové hlášení na stderr a ukončí se. abc a!@ Test 4: Hodnoty logartmu pro a > 1, < a < 1 správný výsledek. 4. a: --loga 1 5 4.6765587e-1.4 7.674477e-1 15 1.68661945e 4. b: --loga 1.5 6 -.5849657e 1. -.8794485e-1 1-6.648561898e Test 5: Hodnoty tanh pro R -6.8-9.999895855e-1 4.68 9.99999e-1 4 1.e správný výsledek. Test 6: Posloupnost čísel a jejch odpovídající váhy u váženého artmetckého průměru posloupnost průběžných výsledků. standardní vstup: 1 5 8 4 6 4 standardní výstup: 1.e 4.1111111111e 4.58e 4.5e 6
Test 7: Posloupnost čísel a jejch odpovídající váhy u váženého kvadratckého průměru posloupnost průběžných výsledků. standardní vstup: 1 5 8 4 6 4 standardní výstup: 1.e 5.85164871e 5.545685e 5.5191986e Test 8: Specální případy, konstanty ± INFINITY a NAN správný výsledek. 8. a: --loga 1 5 nf nf -nf nan nan nan 8. b: --loga 1. nf -nf -nf nan nan nan 8. c: Specální hodnoty základu logartmu --loga 1 nf --loga 1 nf chybný vstup --loga 1 nan nan 8. d: --tanh 1 nf 1.e -nf -1.e nan nan 5 Pops řešení Tato kaptola popsuje vlastní realzac teoretckých podkladů uvedených v kaptolách a. 5. 1 Ovládání programu Celá aplkace je ovládána prostřednctvím příkazového řádku (konzole), pro zobrazení nápovědy je nutno zadat parametr h. Následuje seznam dalších možných parametrů: --loga sgdg a (obecný logartmus o základu a s přesností na sgdg čísel) --tanh sgdg (hyperbolcký tangens s přesností na sgdg čísel) --wam (vážený artmetcký průměr) 7
--wqm (vážený kvadratcký průměr) Program očekává na standardním vstupu posloupnost vstupních hodnot, jejchž zpracované výsledky jsou vypsovány na standardní výstup, vstup výstup lze směrovat z a do souboru, např: --loga 1 15 < "vstup.tt" > "vystup.tt" 5. Datové typy Vzhledem k zadání úlohy všechny funkce kromě man vracejí hodnotu typu double. Stejně tak je většna proměnných typu double. Několk proměnných typu unsgned nt je použto př zpracovávání parametrů z příkazové řádky, případně př prác s teračním výpočty. V programu jsem vytvořl strukturu s názvem stat_hodnoty, která slouží k uchování průběžných součtů ve statstckých funkcích. Tato struktura obsahuje dvě položky typu double. Druhou použtou strukturou je struktura parametry, kterou tvoří dvě položky typu double, dvě položky typu unsgned nt a jedna položka ukazatel na datový typ char. 5. Vlastní realzace Funkce man se dělí na dvě část. V první část jsou ve funkc nact_parametry zpracovány parametry příkazové řádky, pokud některý z nch nevyhovuje požadované formě č rozsahu (vz. kaptola 4), program vypíše chybové hlášení na stderr a ukončí se. Druhou část funkce tvoří jeden cyklus, který zajšťuje načítání hodnot ze standardního vstupu a jejch předání do odpovídající funkce, která je dále zpracuje. Všechny výpočetní funkce vracejí hodnotu výsledku, který je pak na konc cyklu vypsán na standardní výstup. Funkce muj_loga a muj_tanh zpracovávají pouze jednu hodnotu, pro funkce wam a wqm je nutné ještě načíst druhou hodnotu (váhu). Uvntř těchto funkcí probíhá kromě samotného výpočtu také ověření parametrů funkce (např. u funkce muj_loga jsou to parametry cslo, eps, a), přesněj kontrola rozsahu a defnčního oboru. V případě, že užvatel zadá na standardním vstupu nepovolený znak nebo je některý z parametrů příkazové řádky chybný, funkce vyps_chybu vypíše odpovídající chybové hlášení a ukončí program. 6 Závěr Program počítá operace hyperbolcký tangens a obecný logartmus a statstcké funkce vážený artmetcký průměr a vážený kvadratcký průměr. Veškeré výsledky mých funkcí jsem porovnával s výpočty knhovních funkcí, oba výsledky byly na vzhledem k požadované přesnost stejné. Př analýze zadání bylo nutné pochopt prncp jednotlvých matematckých operací a stanovt jejch defnční obory a obory hodnot. Dalším důležtým krokem bylo zvolt nejlépe konvergující Taylorovu řadu a případně j omezt na nějaký nterval, ve kterém konverguje nejrychlej. Výsledná aplkace byla testována v operačních systémech MS Wndows a GNU / Lnu, v obou případech fungovala bez problémů a vypsovala odpovídající hodnoty. 8
POUŽITÉ ZDROJE [1] BARTSCH, H.-J.: Matematcké vzorce. Praha: Mladá fronta, třetí vydání, 1996, 81 s., ISBN 8-4-67-7. Grafy funkcí byly vytvořeny v programu Mcrosoft Math. A Metrky kódu Počet souborů: 1 Počet funkcí: 1 (včetně funkce man) Počet řádků zdrojového kódu: 5 Velkost statckých dat: 68B Velkost kódu programu: 548B Velkost spusttelného souboru: 1679B (systém Lnu, 64btová archtektura, překlad bez ladících nformací) 9