Dokumentace programu sdc

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

ZÁPOČTOVÁ PRÁCE z UIR

Paradigmata programování 1

Dokumentace programu piskvorek

Lingebraické kapitolky - Počítání s maticemi

Paměť počítače. alg2 1

Algoritmizace a programování

Středoškolská technika SCI-Lab

volitelný předmět ročník zodpovídá PŘÍPRAVA NA PŘIJÍMACÍ ZKOUŠKY Z MATEMATIKY 9. MACASOVÁ

VI. Maticový počet. VI.1. Základní operace s maticemi. Definice. Tabulku

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Matematika B101MA1, B101MA2

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Úvod do lineární algebry

Logické programování I

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

Zavedení a vlastnosti reálných čísel

Operace s maticemi

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

Základy algoritmizace a programování

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

Michal Fusek. 10. přednáška z AMA1. Ústav matematiky FEKT VUT, Michal Fusek 1 / 62

4.2 Syntaxe predikátové logiky

Operace s maticemi. 19. února 2018

6.1.2 Operace s komplexními čísly

V předchozí kapitole jsme podstatným způsobem rozšířili naši představu o tom, co je to číslo. Nadále jsou pro nás důležité především vlastnosti

COMPLEXITY

Pojem limity funkce charakterizuje chování funkce v blízkém okolí libovolného bodu, tedy i těch bodů, ve kterých funkce není definovaná. platí. < ε.

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

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

Úvod do programování. Lekce 1

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

MATEMATIKA II V PŘÍKLADECH

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Programovací jazyk Pascal

Domény. Petr Štěpánek. S využitím materialu Krysztofa R. Apta

Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

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

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

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

PODPROGRAMY PROCEDURY A FUNKCE

Algebraické struktury s jednou binární operací

ZŠ ÚnO, Bratří Čapků 1332

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.

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

0. ÚVOD - matematické symboly, značení,

11. Číselné a mocninné řady

PŘETĚŽOVÁNÍ OPERÁTORŮ

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

12. Automatické vyhodnocení derivací. jaro 2012

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

Posloupnosti a řady. 28. listopadu 2015

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

VI. Derivace složené funkce.

Booleova algebra. ZákonyBooleovy algebry Vyjádření logických funkcí

Logické proměnné a logické funkce

Matice. a m1 a m2... a mn

Algebraické výrazy pro učební obory

Matematika 2 LS 2012/13. Prezentace vznikla na základě učebního textu, jehož autorem je doc. RNDr. Mirko Rokyta, CSc. J. Stebel Matematika 2

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Kreslení elipsy Andrej Podzimek 22. prosince 2005

SPECIÁLNÍCH PRIMITIVNÍCH FUNKCÍ INTEGRACE RACIONÁLNÍCH FUNKCÍ

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

M - Příprava na pololetní písemku č. 1

Lineární algebra Operace s vektory a maticemi

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

Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy

Logické programování

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

Funkce a základní pojmy popisující jejich chování

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

Algebraické výrazy. Algebraický výraz je zápis složený z čísel, písmen (označujících proměnné), znaků matematických funkcí ( +, -,, :, 2, ) a závorek.

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

Bakalářská matematika I

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

0.1 Úvod do lineární algebry

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

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

Aritmetika s didaktikou I.

Dosud jsme se zabývali pouze soustavami lineárních rovnic s reálnými koeficienty.

Racionální čísla, operátory, výrazy, knihovní funkce

Algoritmizace prostorových úloh

VZORCE A VÝPOČTY. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2

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

Úvod do informačních technologií

Texty k přednáškám z MMAN3: 4. Funkce a zobrazení v euklidovských prostorech

Úvod do programování 7. hodina

Unární je také spojka negace. pro je operace binární - příkladem může být funkce se signaturou. Binární je velká většina logických spojek

Výroková a predikátová logika - XIII

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Operátory. Základy programování 1 Tomáš Kühr

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Matematika 1 pro PEF PaE

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Derivace funkce Otázky

Transkript:

Dokumentace programu sdc Zápočtového programu z Programování III pro neinformatiky NRPM046 Ondřej Vostal 8. června 2011, Zimní semestr, 2009/2010 1 Stručné zadání sdc je symbolická kalkulačka, která umí derivovat a výsledek derivování mírně zjednodušit. Jako zjednodušení bude alespon provedeno sečtení konstant za použití distributivního zákona sčítání a násobení. Také budou zjednodušeny výrazy užitím asociativity násobení a sčítání. Dále budou provedeny podobné operace s mocninami: sečteny exponenty se stejnými základy a vynásobeny základy se stejnými mocninami. Upravování bude statické v tom smyslu, že se nebude přecházet mezi jednotlivými ekvivalentními výrazy u kterých by se určovala "jednoduchost"a z nich se vybral nejjednodušší. Spíše bude zjednodušení probíhat tak, že se sdc pokusí výraz postupně zkracovat. Nebude se procházet přes dočasné zesložitení výrazu, ikdyž by to mohlo nakonec vést k většímu zjednodušení. Pouze se budou přetáčet jednotlivé argumenty u komutativních operací. Implicitně jsou zadány derivace všech elementárních funkcí, t.j. sin, cos, tan, exp, log, polynom, odmocnina. Ondřej Vostal je studentem Matematiky, 4. semestr, Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. mailto:ondrej.vostal@vostal.net. 1

Tabulku známých jednoduchých derivací lze jednoduše rozšířit o nové. Lze také zavést nové symboly. Ty lze však definovat výlučně za použití konečného přirozeného skládání již defino- vaných symbolů. (např. n b je b+...+b, to celé n krát). 2 Přesnější zadání Program bude interaktivní. Rozhraní programu je textové. Po spuštění program na vstupu očekává zadání dvou slov oddělených buď mezerou, nebo novou řádkou. Pokud je první slovo qq program skončí. Pokud je první slovo tt vypočtou se testové příklady a program skončí. Pokud je první i druhé slovo validní swi-prolog term, pak program na výstupu vypíše derivaci funkce y = T, kde T je druhý term podle proměnné definované prvním termem x. Proměnné ve funkci musí mít názvy složené z malých písmen anglické abecedy (a-z). Proměnná, podle které derivovat musí být stejně jako proměnné ve funkci malé písmeno anglické abecedy. Výstup programu bude seřazený To Do. Pokud bude v termu T funkce, jejíž derivaci program nemůže spočítat, užije ve výstupu formální značení d(t,x) a pokusí se vyhodnotit zbytek výrazu, jak nejlépe to jen půjde. Program lze rozšiřovat přidáváním informací o derivování a aritmetických úpravách libovolných operátorů, nebo přidáním nových operátorů. O tom více v části o rozšiřování programu. 3 Prostředky implementace a použité algoritmy Program jsem implementoval v prologu. Testování prováděl výlučně v swiprologu. Derivování jako takové je algoritmicky jednoduchá záležitost. Po načtení vstupního termu, který chci derivovat na něj spustím predikát, který zná základní pravidla pro derivování, plus libovolná přidaná pravidla. Ví například, 2

že derivace součtu je součet derivací, atd. Tím dojde k rekurzi a průchodu přes výraz. Složitější část programu představuje zjednodušení výsledného výrazu. Toho dociluji tak, že na výraz v pevném pořadí použiji různé zjednodušující transformace, které vzužívají algebraických vlastností operátorů a funkcí, ze terých se výraz skládá. Použiji transformace v pořadí, ve kterém je uvádím. Popsány budou dále: a) zjednodušovací pravidla (s); b) aritmetické vyhodnocení podvírazů (evaluate); c) přezávorkování (associate) a znovu užitá zjednodušovací pravidla; d) vytknutí (distrib); e) přezávorkování a vytknutí; f) seřazení podle zákonů komutativity (komut); g) vytknutí pro unárních operátory (unarzdistrib). Zjednodušení se nejprve zavolá rekurzivně do hloubky na každý podvýraz, přičemž podvýrazy jsou rozděleny vždy podle argumentů operátorů (viz op dále). Na výsledek každého zjednodušení rekurzivně zavolám zjednodušující predikát. Zjednodušování skončí ve chvíli, kdy už není, co zjednodušit. To, že se tak stane, je v programu zajištěno tak, že To Do. 3.1 Popis zjednodušujících predikátů Predikáty zde uvedené lze rozšiřovat, nebo, chcete-li, nastavovat přípravou databáze pomocných faktů sdcrc.pl. U každého popíši, jak to lze udělat. 3.1.1 Zesložiťovací pravidla (cp) O těchto nebyla výše řeč. Zesložitěním projde vstup, než se počítá jeho derivace. Odzesložitěním (což je predikát zesložitění použitý opačně) projde pak výstup, než je vytištěn. Zesložiťování umožní, aby mohl být vstup složitější a tím hezčí a zároveň program i databáze známých algebraických jevů a derivací jednodušší. Např. sqrt(x) = x2), 1 kde sqrt lze napsat značně jednoduššeji, než mocninu x, ale program díky zesložitění při vstupu nemusí o funkci sqrt nic vědět. Predikátcp(?vnější reprezetace,?vnitřní reprezentace) zajišťuje zesložiťování. Při přidávání, nebo změnách databáze sdcrc.pl je nutné mít 3

na paměti, že predikát nikdy nesmí být použitelný na svůj výsledek (přesněji nesmí se stát, aby cp(a,b),cp(b,c) uspělo, pro daný řádek). Jinak by se program zacyklil. Příklad je možné vyčíst z původní databáze. 3.1.2 Zjednodušovací pravidla (s) Zjednodušovací pravidla jsou realizovaná v zásadě shodným predikátem jeko predikát cp, akorád předpokládám, že pdedikát s je pouze jednosměrný s(+složitý výraz, -Jednoduchý výraz). Při přidávání dalších je opět potřeba mít na paměti, že nikdy nesmí uspět s(a,b),s(b,c) vezmeme-li pro definici s jen jeden řádek z databáze. Poznámka. Zacyklit se můžeme i přes více řádku definice predikátu s. Nepodařilo se mi ale vymyslet žádný příklad, který by toto mohl při běžném použití způsobit. Z faktu, že jen jedna forma výrazu je pro nás nejjednoduší by definice způsobující zacyklení stejně neměla smysl. Jako nesmyslný příklad budiž s(a,g(a)). s(g(a),-a). 3.1.3 Přezávorkování (associate) Uzávorkování výrazů v programu implementuji tak, že kolem operátorů s argumenty si vždy představuji závorky. Tyto nemusí uživatel explicitně na vstupu zadat. Program si je tam představuje automaticky. Přezávorkování se provede tak, že např. platí associate(a+b+c,(a+b)+c). associate(a+b+c,a+(b+c)). Přičemž jednu z variant program generuje automaticky, podle toho, jakou přednost mají operátory. To je vnitřní věcí swi-prologu a není třeba se tím zaobírat, neboť algoritmus v každém případě vygeneruje všechny ostatní možná přezávorkování, jak plyne z postupu zjednodušení vrazu. 4

3.1.4 Vytknutí (distrib) Vytýkání chápu v programu jako transformaci výrazu (1) (a b)+(c b), kde + a můžou být libovolné operátory. Předpokládám, že operátory nejsou komutativní (tedy že a b b a). Zavádím dvě pravidla pro distributivitu. Distributivitou zprava myslím transformaci, která by z výrazu (1) udělala výraz (1r) (a + c) b. Jde tedy o transformaci, kdy jsou výrazy napravo od vnitřních operátorů (zde ) stejné. Důležité je podotknout, že pořadí operandů je zachováno (c je napravo od svého operátoru a b je napravo od svého. Už je asi jasné, že levá transformace převádí výraz (2) (x 2 3)+ 2 (x 2 2) na výraz (2l) x 2 (3+ 2 2) Skrze vytýkání také implementuji přičítání jednotek jako příklad poslouží (3) (x 2) + x transformuji na (3 ) x (2 + 1) (o sečtení konstant se pak postará jiná část programu). U jednotky už musím počítat s jejím výskytem na obou stranách, tedy je zvlášť implementováno pravidlo pro transformaci z (3) na (3 ) a z (4) (p 4)+1 na (4 ) p (4+ 1). Podobně pro distributivitu zleva. 5