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

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

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

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

Goniometrické a hyperbolické funkce

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

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

Rovnice 2 Vypracovala: Ing. Stanislava Kaděrková

Funkce arcsin. Některé dosud probírané funkce můžeme spojit do dvojic: 4 - je číslo, které když dám na druhou tak vyjde 4.

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

Matematika I (KMI/PMATE)

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

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

Algoritmus pro hledání nejkratší cesty orientovaným grafem

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

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

0.1 Úvod do matematické analýzy

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

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

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

Cyklometrické funkce

Definice funkce tangens na jednotkové kružnici :

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

0.1 Úvod do matematické analýzy

0.1 Funkce a její vlastnosti

Úvod do programování. Lekce 1

Limita funkce. FIT ČVUT v Praze. (FIT) Limita funkce 3.týden 1 / 39

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.

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

Matematika (KMI/PMATE)

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

Vzdělávací oblast: Matematika a její aplikace Vzdělávací obor: Matematický kroužek pro nadané žáky ročník 9.

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

Obecná rovnice kvadratické funkce : y = ax 2 + bx + c Pokud není uvedeno jinak, tak definičním oborem řešených funkcí je množina reálných čísel.

Derivace funkce Otázky

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

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.

y = 1/(x 3) - 1 x D(f) = R D(f) = R\{3} D(f) = R H(f) = ( ; 2 H(f) = R\{ 1} H(f) = R +

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

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Derivace funkce DERIVACE A SPOJITOST DERIVACE A KONSTRUKCE FUNKCÍ. Aritmetické operace

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

Jednoduché cykly

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

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

Diferenciální počet 1 1. f(x) = ln arcsin 1 + x 1 x. 1 x 1 a x 1 0. f(x) = (cos x) cosh x + 3x. x 0 je derivace funkce f(x) v bodě x0.

Základy algoritmizace a programování

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

Matematika I A ukázkový test 1 pro 2014/2015

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

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

FUNKCE 2. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

PRIMITIVNÍ FUNKCE DEFINICE A MOTIVACE

Fz =a z + a z +...+a z +a z =

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

StatSoft Jak vyzrát na datum

MATA Př 3. Číselné soustavy. Desítková soustava (dekadická) základ 10, číslice 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

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

Odhad - Problémy se sdruženým rozdělením pravděpodobnosti

PRIMITIVNÍ FUNKCE. Primitivní funkce primitivní funkce. geometrický popis integrály 1 integrály 2 spojité funkce konstrukce prim.

Matematika (KMI/PMATE)

Matematika I A ukázkový test 1 pro 2011/2012. x + y + 3z = 1 (2a 1)x + (a + 1)y + z = 1 a

Matematika 1 pro PEF PaE

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.

MATURITNÍ TÉMATA Z MATEMATIKY

Funkce základní pojmy a vlastnosti

PODPROGRAMY PROCEDURY A FUNKCE

Přednáška 3: Limita a spojitost

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

KVADRATICKÁ FUNKCE URČENÍ KVADRATICKÉ FUNKCE Z PŘEDPISU FUNKCE

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

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

ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ

3. Reálná čísla. většinou racionálních čísel. V analytických úvahách, které praktickým výpočtům

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

4.3.1 Goniometrické rovnice I

Matematika. 6. ročník. Číslo a proměnná. desetinná čísla (využití LEGO EV3) číselný výraz. zaokrouhlování desetinných čísel. (využití LEGO EV3)

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

I. TAYLORŮV POLYNOM. 2. a) x x3, b) x x3 + x5, c) 1 + 2x x2 2x 4, f (4) (0) = 48, d) x , c)

, = , = , = , = Pokud primitivní funkci pro proměnnou nevidíme, pomůžeme si v tuto chvíli jednoduchou substitucí = +2 +1, =2 1 = 1 2 1

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

Kapitola 2: Spojitost a limita funkce 1/20

REÁLNÁ FUNKCE JEDNÉ PROMĚNNÉ

FUNKCE A JEJICH VLASTNOSTI

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

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

MS EXCEL_vybrané matematické funkce

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

Základy matematiky pro FEK

Funkce kotangens

Návod k programu Graph, verze 4.3

Programy na PODMÍNĚNÝ příkaz IF a CASE

VZOROVÝ TEST PRO 2. ROČNÍK (2. A, 4. C)

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

pi Ludolfovo číslo π = 3,14159 e Eulerovo číslo e = 2,71828 (lze spočítat jako exp(1)), např. je v Octave, v MATLABu tato konstanta e není

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

Derivace goniometrických funkcí

Seznámíte se s pojmem primitivní funkce a neurčitý integrál funkce jedné proměnné.

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

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

Transkript:

Dokumentace k projektu pro předměty IZP a IUS Iterační výpočty projekt č. 2 19. listopadu 2008 Autor: Vojtěch Kalčík, xkalci01@fit.stud.vutbr.cz Fakulta Informačních Technologií Vysoké Učení Technické v Brně

Obsah 1 Úvod...2 2 Analýza problému a princip jeho řešení...3 2.1 Zadání pro celý program...3 2.2 Zadání pro tangens...3 2.3 Zadání pro přirozený logaritmus...3 2.4 Zadání pro radar...3 2.5 Funkce Tangens...3 2.6 Funkce přirozený logaritmus...5 2.7 Radar...5 3 Návrh řešení problému...6 3.1 Čtení vstupních dat...6 3.2 Taylorova řada...6 3.3 Návrh řešení funkce tangens...6 3.4 Návrh řešení funkce přirozený logaritmus...7 3.5 Návrh řešení úlohy s radary...7 4 Specifikace testů...8 4.1 Testy pro tangens...8 4.2 Testy pro přirozený logaritmus...8 4.3 Testy pro radar1...8 4.4 Testy pro radar2...8 5 Popis řešení...9 5.1 Ovládání programu...9 5.2 Datové typy...9 5.3 Vlastní implementace...9 6 Závěr...10 Literatura...11 A Metriky kódu...12 1

1 Úvod Tento dokument se váže k projektu, který je zaměřený na iterační výpočty. Popisuje návrh a implementaci programu pro výpočet funkce tangens, přirozeného logaritmu a zrychlení nebo polohy objektu. Tento objekt se pohybuje v prostoru. Jeho zrychlení nebo polohu zjišťuje radar a posílá je programu ke zpracování. Jde o konzolovou aplikaci, u které lze pomocí parametrů nastavit, co má počítat ze vstupních hodnot. K samotnému programu bylo nutné najít rozvoj, který by tyto funkce počítal. Přesně vyčíslit funkce není možné, takže se podle zadané přesnosti počítá přibližná hodnota, která se více nebo méně ke skutečné hodnotě blíží. S každým x funkce není vhodné počítat. Je nutné počítat s takovými x, aby byl výsledek správný. Této úpravě na lepší definiční obor funkce se říká heuristika. Funkce tangens i přirozený logaritmus jsou různé. Každá má jiný definiční obor a jiné chování. Proto i heuristika a postup výpočtu je pro každou jiný. Pro část s počítáním s radary byly potřeba fyzikální vzorečky z mechaniky. Všechny tři části programu jsou na sobě nezávislé. Dá se o nich uvažovat jako o třech samostatných podprogramech. Z toho důvodu se každou částí zabývám vždy v samostatné podkapitole. 2

2 Analýza problému a princip jeho řešení V této kapitole popíši zadání a také se zaměřím podrobně na jednotlivé funkce. Proberu fyzikální závislosti pro výpočet zrychlení a polohy, když není konstantní rychlost. 2.1 Zadání pro celý program Program je psaný v jazyce C. To, co se bude počítat, je dáno parametry programu. Vstupem jsou čísla typu double. Pokud vstupní hodnota není číslo, je vstupní hodnotou konstanta NAN, což je zkratka not a number. Na výstupu je stejný počet čísel jako na vstupu. Každé toto číslo je na novém řádku. Výsledkem může být také NAN nebo ±INFINITY (nekonečno). To lze získat například při dělení nulou. Pokud je program spuštěn s parametrem -h, tak se zobrazí nápověda. 2.2 Zadání pro tangens Pokud je program spuštěn s parametry -tan epsilon, kde epsilon je číslo typu double větší než 0, tak počítá ze vstupu hodnotu blízkou hodnotě tangens. Odchylka je daná parametrem epsilon. 2.3 Zadání pro přirozený logaritmus Pokud je program spuštěn s parametry -ln epsilon, kde epsilon je číslo typu double větší než 0, tak počítá ze vstupu hodnotu blízkou hodnotě přirozeného logaritmu. Odchylka je daná parametrem epsilon. 2.4 Zadání pro radar Pokud je program spuštěn s parametrem -radar1 nebo -radar2, tak zpracovává informace z radaru o objektu, který se pohybuje v prostoru. Tyto informace posílá radar programu v intervalu 0,5 s. Je-li parametrem -radar1, tak těmito informacemi je zrychlení v m.s -2 po příslušné ose. První vstupní hodnota je zrychlení objektu na ose x, druhá na y, třetí na z, čtvrtá znovu na x, ale až po 0,5 s atd. Výstupem jsou naopak postupně souřadnice objektu v m. Nejdříve x, pak y, pak z a potom zase x po 0,5 s. Pokud je parametr -radar2, tak naopak vstupem jsou souřadnice objektu a výstupem je zrychlení. Z toho vyplývá, že pokud radar1 zpracuje hodnoty a jeho výstup zpracuje radar2, tak jeho výstupem budou původní vstupní hodnoty pro radar1. 2.5 Funkce Tangens Funkce tangens má definiční obor R { π + kπ}. Body 2 {π + kπ} do ní nepatří, protože 2 v těchto bodech diverguje k ±. Funkce je neomezená, to znamená, že obor hodnot je v intervalu (-, ). Je lichá, takže je středově souměrná podle počátku. Jde o periodickou funkci a v celém definičním oboru je rostoucí. 3

Obrázek 2.1: Graf funkce tangens Hodnota funkce se dá počítat pomocí Taylorovy řady. Je to mocninná řada, která se obecně matematicky vyjádří takto: f x = f a + f a 1! x a + f a 2! x a 2 + f 3 3!. x a 3 + = f k k=0 k! x a k Tato řada je pro funkce, které má program počítat, nekonečná a pro vyjádření přesné hodnoty by bylo nutné sčítat donekonečna členy, což je technicky a časově neproveditelné. Z toho důvodu je nutné si zvolit epsilon, které udává odchylku. Jakmile dosáhne program menší odchylky než je tato, je výpočet ukončen. Možné postupy jsem našel dva. První způsob je počítání řady přímo pro tangens. U této varianty je nutné počítat s Bernulliho čísly, která sama o sobě mají složitý vzoreček pro výpočet. Druhý způsob je vypočítat pomocí Taylorovy řady funkce sin a cos. Potom pomocí sin x vztahu tan x = spočítat výsledek. Zvolil jsem si druhou možnost kvůli jednoduššímu algoritmu. cos x Taylorova řada pro sinus: sin x = x x3 3! + x5 5! x7 7! + = ( 1)n Taylorova řada pro kosinus: n=0 cos x = 1 x2 2! + x4 4! x6 6! + = ( 1)n n=0 2n +1 x (2n + 1)! x 2n (2n)! Funkce tangens je periodická a pro výpočet pomocí Taylorova rozvoje je nejlepší využít interval ( π, π ), ještě lépe interval ( π, π ). Přepočítat matematicky x do intervalu ( π, π ) není 2 2 4 4 2 2 problém. Ovšem když to přepočítává program, tak tu již zádrhel je, ale o tom až dál. Pokud chci ještě o něco zvýšit přesnost, tak mohu převést x do intervalu ( π, π ), a to pomocí 4 4 vzorečku pro tan(2α). Jakmile udělám tuto heuristiku, mohu již spočítat hodnotu pro sin a cos. 4

2.6 Funkce přirozený logaritmus Funkce přirozený logaritmus je logaritmus o základu e, kde e je Eulerovo číslo, které má hodnotu 2,7182818284 Má definiční obor v intervalu (0, ). Je to inverzní funkce k funkci e x. V celém definičním oboru je rostoucí. Obrázek 2.2: Graf funkce přirozený logaritmus Tato funkce se dá počítat také pomocí Taylorovy řady. U funkce je nutné provést heuristiku do intervalu <1, 2>. Heuristika se dá udělat pomocí vztahů: ln(x y) = ln x + ln y ln x = ln x ln y y Taylorova řada pro přirozený logaritmus: ln x = x 1 x 1 2 2.7 Radar 2 + x 1 3 3 x 1 4 4 (x 1)n n+1 + = ( 1) n Zrychlení je fyzikální veličina, která udává změnu rychlosti za změnu času. Značí se a. Jednotka je m.s -2. Například gravitační zrychlení na zemi je přibližně 10 m.s -2. To znamená, že pokud pustím kámen, který bude padat volným pádem, tak v čase t = 0s je rychlost v = 0m.s -1. V čase t = 1s => v = 10m.s -1 ; t = 2 s => v = 20m.s -1 Poloha objektu se spočítá ze vzorečku pro dráhu s = s 0 + v 0 t + 1 2 at2, kde s 0 je počáteční dráha a v 0 je počáteční rychlost. Pokud bude počáteční dráha a rychlost 0, tak vzoreček je pouze s = 1 2 at2. Jde o upravený vzoreček s = v t, kde se za v dosadilo v = a t. Ovšem je tam ještě 1. To je proto, že rychlost se během času t mění, takže je nutné vzít rychlost 2 průměrnou, a ta je přesně v čase t 2. Pro výpočet zrychlení se použije vzoreček a = 2 (s s 0 v 0 t), což je pouze upravený t 2 vzoreček pro dráhu. n =1 5

3 Návrh řešení problému 3.1 Čtení vstupních dat V zadání stojí, že hodnoty vstupu jsou oddělené libovolným počtem bílých znaků, což jsou mezery, prázdné řádky, tabulátory atd. V programovacím jazyku C je na toto funkce scanf, která dokáže sama tyto hodnoty načíst. Hodnoty se nejen dají načíst, ale i přímo kontrolovat, jestli jsou korektní. Nebylo tedy nutné pro získání vstupních hodnot psát vlastní funkci. Je nutné zkontrolovat, jestli epsilon je větší než nula. 3.2 Taylorova řada Existuje několik způsobů jak počítat Taylorovu řadu. Některé jsou lepší a některé horší. Pokud jsou v této řadě faktoriály nebo mocniny, tak čísla velice strmě rostou, takže se brzy může stát, že se nevejdou do datových typů, které jsou k dispozici. Proto nelze počítat vždy znovu a znovu faktoriál nebo mocninu, protože by bylo moc prováděných příkazů a brzy by čísla byla větší, než bychom mohli použít. Členy Taylorovy řady pro funkce, které počítá program, vypadají tak, že pokud je velké číslo nad zlomkovou čárou, je i pod ní. To znamená, že ve výsledku je číslo relativně malé. Faktoriál n je vynásobení řady čísel 1 2 3 n. Mocnina z n je n n n Díky tomuto můžeme následující člen spočítat vynásobením a vydělením vhodnými čísly člen předešlý. Uvedu příklad pro funkci sinus: 2. člen: c 2 = x 3 3! = x x x 1 2 3 3.člen: c 3 = c 2 1 x2 = x5 4 5 5! 3.3 Návrh řešení funkce tangens Nejdříve je nutné provést heuristiku. Prvním krokem je, že pokud je x mimo interval < π, π >, je nutné ho do tohoto intervalu převést. Převod provádím tak, že spočítám 2 2 k = x ( π 2 ). k je desetinné číslo, takže musím oříznout vše za desetinnou čárkou. Do π správného intervalu se již dostanu x = x k π. Problémem je, že hodnotu π používám jen přibližnou. A pokud je x hodně vzdálené od tohoto intervalu, tak se rozdíl od přesného π nasčítá a x se může dokonce dostat mimo tento interval. V tom případě posun provádím do doby, dokud se do daného intervalu nedostanu. Je ale jasné, že výsledná hodnota nebude správná. Z toho důvodu mi program pro velká nebo hodně malá čísla nepočítá správně. Konkrétně do 1e10 jsou výsledky v pořádku, do 1e15 jsou ještě ucházející a co je nad, je nepoužitelné. Další zpřesnění dělám přes vzoreček pro tan(2α) = 2 tan α 1 tan 2 α. Potom mohu x vydělit dvěma, a tím pádem počítat s x z intervalu < π, π >. Ale ani toto nevyřeší problém, když se 4 4 x blíži k ± π. Zde dochází k velké odchylce od skutečné hodnoty. Konkrétně použitelné 2 hodnoty jsou do 1,5707. Řešil jsem to tak, že jsem vzorečkem zmenšoval odchylku podle vzdálenosti od ± π, ale pak již byla tak malá, že nezáleželo na hodnotě epsilon. Ať jsem 2 nastavil jakékoli, tak výsledek byl stejný. Z toho důvodu jsem zmenšování odchylky nakonec nepoužil. Ovšem přece jen je nutné hodnotu odchylky změnit, protože počítám sinus i kosinus s touto odchylkou, takže je chyba dvojnásobná. Pro normální hodnoty stačí epsilon vynásobit 0,1 a potom je odchylka dostatečná. Neplatí pro hodnoty blízké ± π 2, kde kosinus konverguje k nule. Když se tak malým číslem dělí, tak stačí malý rozdíl a vychází hodně jiné výsledky. Pokud je použit vzoreček pro tan(2α), tak znovu násobím epsilon s 0,1. 6

3.4 Návrh řešení funkce přirozený logaritmus Heuristika se dá dělat pomocí vztahů, které jsem zmiňoval již výše. Jakékoli číslo z intervalu (2, ) mohu vyjádřit jako určité číslo z intervalu <1,2> krát 2 n. A jakékoli číslo z intervalu (0, 1) jako číslo z intervalu <1,2> krát 2 n. Uložil jsem si konstantu přirozeného logaritmu 2. Pak už mi stačí spočítat akorát přirozený logaritmus z určitého čísla z intervalu <1,2> a buď přičíst, nebo odečíst n ln 2. Podle toho, jestli původní číslo bylo větší než 2, nebo menší než 1. 3.5 Návrh řešení úlohy s radary Radar vrací samostatné nezávislé hodnoty pro každou osu. Proto lze úlohu rozdělit do třech samostatných na sobě nezávislých výpočtů. Je nutné si pamatovat pro každou osu aktuální pozici a aktuální rychlost. Čas plyne ze zadání a je 0,5 sekund. A tím znám všechny potřebné údaje pro výpočet. 7

4 Specifikace testů Zadání je takové, že by neměl existovat vstup, pro který by program zahlásil chybu. Pokud je na vstupu něco, co není číslem, tak se programu předá nan. 4.1 Testy pro tangens Test 1: Správnost výpočtu -> Předpokládaná správná hodnota. 0 -> 0-0.785398163 -> 1(přibližně) 1.5 -> 14.101419 100 -> -0.587213 1000 -> 1.470324 1e10 -> -0.558349 Abc -> nan 4.2 Testy pro přirozený logaritmus Test 2: Správnost výpočtu -> Předpokládaná správná hodnota. 0 -> -infinity -5 -> nan 1 -> 0 2.718281828 -> 1(přibližně) 1000 -> 6,907755 1e10 -> 23,025850 Bca -> nan 4.3 Testy pro radar1 Test 3: Správnost výpočtu -> Předpokládaná správná hodnota. (hodnoty na sebe navazují, jde pouze o jednu osu.) 0 -> 0 1 -> 0.125 2 -> 0.625 3 -> 1.75-2.22 -> 2.9725 1e10 -> 1.25e9 nan -> nan 2 -> nan 4.4 Testy pro radar2 Test 4: Správnost výpočtu -> Předpokládaná správná hodnota. (hodnoty na sebe navazují, jde pouze o jednu osu.) 0 -> 0 1 -> 8 2 -> -8 3 -> 8-2.22 -> -57.76 1e10 -> 8e10 nan -> nan 2 -> nan 8

5 Popis řešení 5.1 Ovládání programu Program je konsolová aplikace, u které se nastavuje její chování pouze pomocí parametrů. Jaké parametry se mohou použít se dá najít v nápovědě, která se vyvolá parametrem h. Na výstupu je stejný počet čísel jako na vstupu. 5.2 Datové typy V programu se pracuje až na výjimky s datovým typem double, jenž reprezentuje reálná čísla. Epsilon, vstup i výstup jsou typu double. Pro radary jsem vytvořil pole datových struktur Tpoloha, kde počet prvků pole je počet os. Konkrétně pro toto zadání to jsou 3. Datová struktura obsahuje aktuální polohu a rychlost objektu v proměnných s a v0. Obě proměnné jsou typu double. 5.3 Vlastní implementace Ve funkci main se zavolá funkce zpracuj_parametry, které se jí předávají. Funkce vrací datovou strukturu Tparametry. V datové struktuře je proměnná stav typu int, kde je vrácen stav pro případ, kdy je vše v pořádku, pro nápovědu a pro jednotlivé chyby, které mohou nastat. Dále obsahuje proměnnou co_delat, podle které program pozná, jestli má počítat tangens, logaritmus nebo radary. Poslední proměnná je epsilon, do které se uloží epsilon pro funkce tangens a logaritmus. Další funkce, která se zavolá z funkce main, je funkce cti. Funkce čte znaky ze vstupu pomocí scanf a volá buď funkci tangens,logaritmus, nebo radar. Pokud je stav nastaven tak, že je nutné něco vypisovat, zavolá funkce vypis_hlasku, která rozpozná, kterou hlášku má vypsat, a vypíše ji. Také přizpůsobí výstup. Pokud vypisuje chybu, vypíše ji na chybový výstup, pokud nápovědu, tak na standardní výstup. Ve funkci tangens se provede heuristika pomocí funkce najdi_x a zavolá se dvakrát funkce rozvoj_tan. Jednou pro sinus a jednou pro kosinus. Nakonec se navrácené hodnoty těchto dvou funkcí podělí. Ve funkci logaritmus se provede heuristika a zavolá se funkce rozvoj_ln. Funkce radar neobsahuje žádné další volání funkce. Zde se pouze vybere, jestli se má počítat dráha nebo zrychlení, a spočítá se. Je nutné také spočítat a uložit aktuální rychlost. 9

6 Závěr Program funguje správně. Akorát s výpočtem funkce tangens nejsem příliš spokojen a kvůli speciálním případům, kdy nevychází příliš přesně, bych ji nemohl doporučit pro použití při dalších výpočtech. Funkce přirozený logaritmus počítá korektně a mohu ji doporučit pro použití při dalších výpočtech. U radarů se neprovádí počítání žádných dlouhých řad s využitím odchylky, takže tyto výsledky také považuji za korektní. Radary by se jistě daly rozšířit o další výpočty. Potom by byly schopné lepšího uplatnění v praxi. Pravděpodobně by vracely trochu jiné údaje, než je v zadání. Program je přenositelný mezi většinou používaných operačních systémů. Byly na něm provedeny testy zmíněné výše a program je spočítal správně. 10

Literatura [1] BARTSCH, Hans-Jochen. Matematické vzorce. Přeložil Mg. Mat. Vladimír Malý. Praha : Státní nakladatelství technické literatury, 1963. 580 s. 11

A Metriky kódu Počet souborů: 1 soubor Počet řádků zdrojového textu: 434 řádků Velikost statických dat: 376 B Velikost spustitelného souboru: 16463B (systém Linux, 32 bitová architektura) 12