POČÍTAČOVÉ ALGEBRAICKÉ SYSTÉMY: -MATHEMATICA 4.0-

Podobné dokumenty
POČÍTAČOVÉ ALGEBRAICKÉ SYSTÉMY: -MATHEMATICA 4.0-

POČÍTAČOVÉ ALGEBRAICKÉ SYSTÉMY: -MATHEMATICA 5.1-

Wolfram Mathematica. Mgr. Jindřich Soukup

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

Nalezněte obecné řešení diferenciální rovnice (pomocí separace proměnných) a řešení Cauchyho úlohy: =, 0 = 1 = 1. ln = +,

1 Polynomiální interpolace

Příklad. Řešte v : takže rovnice v zadání má v tomto případě jedno řešení. Pro má rovnice tvar

Bakalářská matematika I

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

Rejstřík - A - - B - - E - - C - - F - - D - Rejst ík

Paralelizace výpočtů v systému Mathematica

1 Mnohočleny a algebraické rovnice

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

Programovací í jazyk Haskell

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

Základy algoritmizace a programování

Kapitola 7: Neurčitý integrál. 1/14

Programovací jazyk Pascal

Matematika (KMI/PMATE)

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

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

POČÍTAČOVÉ ALGEBRAICKÉ SYSTÉMY: -MATHEMATICA 6.0-

Obsah. Aplikovaná matematika I. Gottfried Wilhelm Leibniz. Základní vlastnosti a vzorce

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

0.1 Funkce a její vlastnosti

Cvičné texty ke státní maturitě z matematiky

II. 3. Speciální integrační metody

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.

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í. < ε.

Cvičné texty ke státní maturitě z matematiky

Programovací jazyk Haskell

POČÍTAČOVÉ ALGEBRAICKÉ SYSTÉMY: -MATHEMATICA 4.0-

PŘEDNÁŠKA 2 POSLOUPNOSTI

Matematika 3. Úloha 1. Úloha 2. Úloha 3

Kapitola 7: Integrál.

Matematická analýza ve Vesmíru. Jiří Bouchala

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

Kapitola 7: Integrál. 1/17

Matematická analýza pro informatiky I.

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Funkce a lineární funkce pro studijní obory

- funkce, které integrujete aproximujte jejich Taylorovými řadami a ty následně zintegrujte. V obou případech vyzkoušejte Taylorovy řady

REÁLNÁ FUNKCE JEDNÉ PROMĚNNÉ

Funkce a limita. Petr Hasil. Podpořeno projektem Průřezová inovace studijních programů Lesnické a dřevařské fakulty MENDELU v Brně (LDF)

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

Algebraické výrazy-ii

Extrémy funkce vázané podmínkou

Diferenciál funkce. L Hospitalovo pravidlo. 22. a 23. března 2011


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

CVIČNÝ TEST 13. OBSAH I. Cvičný test 2. Mgr. Zdeňka Strnadová. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Programovani v Maplu Procedura

ELEMENTÁRNÍ KOMPLEXNÍ FUNKCE SPECIÁLNÍ ELEMENTÁRNÍ FUNKCE

Univerzita Karlova v Praze Pedagogická fakulta

Úvod do programu MAPLE

INTEGRÁLY S PARAMETREM

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

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

5.3. Implicitní funkce a její derivace

8. Posloupnosti, vektory a matice

Funkce, podmíněný příkaz if-else, příkaz cyklu for

expression = + I yl ^ 3D 3 ImAx 2 ye + ImAy 3 E + ReAx 3 3 x y 2 E ImAx 3 3 x y 2 E+3 ReAx 2 ye ReAy 3 E

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

0.1 Úvod do matematické analýzy

Jednoduché cykly

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

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

Matematika I pracovní listy

PRIMITIVNÍ FUNKCE DEFINICE A MOTIVACE

PODPROGRAMY PROCEDURY A FUNKCE

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

Numerické metody a programování

Matematika I (KMI/PMATE)

1 Topologie roviny a prostoru

kuncova/, 2x + 3 (x 2)(x + 5) = A x 2 + B Přenásobením této rovnice (x 2)(x + 5) dostaneme rovnost

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

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

Zpracoval: 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

MATURITNÍ TÉMATA Z MATEMATIKY

Funkce pro studijní obory

1 Mnohočleny a algebraické rovnice

Matematická analýza III.

ϵ = b a 2 n a n = a, pak b ϵ < a n < b + ϵ (2) < ϵ, což je spor, protože jsme volili ϵ = b a

Evoluční algoritmy. Podmínka zastavení počet iterací kvalita nejlepšího jedince v populaci změna kvality nejlepšího jedince mezi iteracemi

Text může být postupně upravován a doplňován. Datum poslední úpravy najdete u odkazu na stažení souboru. Veronika Sobotíková

Nyní využijeme slovník Laplaceovy transformace pro derivaci a přímé hodnoty a dostaneme běžnou algebraickou rovnici. ! 2 "

Programování v jazyce JavaScript

Přijímací zkouška na navazující magisterské studium 2018

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

7. Aplikace derivace

c ÚM FSI VUT v Brně 20. srpna 2007

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í

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

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

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

Numerické řešení nelineárních rovnic

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

Transkript:

Math40-3.nb POČÍTAČOVÉ ALGEBRAICKÉ SYSTÉMY: -MATHEMATICA 4.0- Vojtěch Bartík Část 3 Transformační pravidla neboli substituce Algebraické úpravy výrazů Funkce:definování a iterování Elementy programování: testy, podmínky, cykly, lokalizace proměnných a konstant Transformační pravidla neboli substituce à Obecná charakteristika Transformační pravidla jsou výrazy tvaru lhs -> rhs, lhs :> rhs s vnitřní reprezentací Rule[lhs, rhs], RuleDelayed[lhs, rhs]. Levá strana lhs může obsahovat podmínky pro aplikování transformačního pravidla. Pomocí transformačních pravidel a příkazů Replace[expr,rule], Replace[expr,{rule,...}, expr/.rule, expr/.{rule,rule2,...}, expr//.rule, expr//.{rule,rule2,...}, z nichž poslední čtyři mají vnitřní reprezentaci ReplaceAll[expr,rule], ReplaceAll[expr,List[rule,...]], ReplaceRepeated[expr,rule], ReplaceRepeated[expr,List[rule,...]], můžeme počítat hodnoty výrazů pro konkrétní hodnoty proměnných nebo i jejich částí a také je transformovat na jiné výrazy. Možné jsou i příkazy Replace[expr,{rules,...}], expr/.{rules,rules2,...}, expr//.{rules,rules2,...} které vytvoří seznamy Replace[expr,rules],...}, {expr/.rules,expr/.rules2,...}, {expr//.rules,expr//.rules2,...}

2 Math40-3.nb à Replace Replace[expr,rules]... prochází seznam rules a aplikuje na expr první použitelné pravidlo, které najde. Další pravidla už nezkouší a tedy neaplikuje. 8Replace@x + y, x 2D, Replace@x + y, 8x + y 2, x + y 3<D, Replace@x + y, 8x + y 3, x + y 2<D< 8x + y, 2, 3< à ReplaceAll expr/.rules... prochází seznam částí výrazu expr a pro každou část hledá v seznamu rules pravidla, která by bylo možné na tuto část aplikovat. Pokud taková pravidla v seznamu rules existují, aplikuje první, které najde, a další už neaplikuje ani na danou část, ani na její podčásti. Příklady: 8x + x 2 ê. 8x + x 2 a, x b, x 2 c<, x + x 2 ê. 8x b, x 2 c<, x + x 2 ê. x b, x + x 2 ê. x 2 c< 8a, b + c, b + b 2, c + x< 8x + x 2 ê. x b ê. x 2 c, x + x 2 ê. x 2 c ê. x b< 8b + b 2, b + c< à ReplaceRepeated expr//.rules... iteruje příkaz expr/.rules, dokud se výsledek nepřestane měnit nebo dokud počet iterací nepřesáhne maximální hodnotu danou volitelným parametrem MaxIterations. Tento parametr je implicitně nastaven na 65536 Příklady: list = 80, 50, 00<; list êê. n_ ê; n > 0 n General::spell : Possible spelling error: new symbol name "list" is similar to existing symbol "List". 80, 0, 0< ReplaceRepeated@list, n_ ê; n > 0 n, MaxIterations 0D ReplaceRepeated::rrlim : Exiting after 80, 50, 00< scanned 0 times.

Math40-3.nb 3 80, 40, 90< ReplaceRepeated@list, n_ ê; n > 0 n, MaxIterations 50D ReplaceRepeated::rrlim : Exiting after 80, 50, 00< scanned 50 times. 80, 0, 50< ReplaceRepeated@list, n_ ê; n > 0 n, MaxIterations 00D ReplaceRepeated::rrlim : Exiting after 80, 50, 00< scanned 00 times. 80, 0, 0< Clear@trigRulesD; trigrules = 8Sin@n_ x_d ê; n > Sin@Hn L xd Cos@xD + Cos@Hn L xd Sin@xD, Cos@n_ x_d ê; n > Cos@Hn L xd Cos@xD Sin@Hn L xd Sin@xD<; ColumnForm@Table@Expand@Sin@n xd êê. trigrulesd, 8n, 2, 6<DD 2 Cos@xD Sin@xD 3 Cos@xD 2 Sin@xD Sin@xD 3 4 Cos@xD 3 Sin@xD 4 Cos@xD Sin@xD 3 5 Cos@xD 4 Sin@xD 0 Cos@xD 2 Sin@xD 3 + Sin@xD 5 6 Cos@xD 5 Sin@xD 20 Cos@xD 3 Sin@xD 3 + 6 Cos@xD Sin@xD 5 ColumnForm@Expand@Table@Sin@n xd, 8n, 2, 6<D êê. trigrulesdd 2 Cos@xD Sin@xD 3 Cos@xD 2 Sin@xD Sin@xD 3 4 Cos@xD 3 Sin@xD 4 Cos@xD Sin@xD 3 5 Cos@xD 4 Sin@xD 0 Cos@xD 2 Sin@xD 3 + Sin@xD 5 6 Cos@xD 5 Sin@xD 20 Cos@xD 3 Sin@xD 3 + 6 Cos@xD Sin@xD 5 Použijeme-li místo odložených transformačních pravidel RuleDelayed pravidla Rule, mohou nastat potíže: Clear@trigRulesD; trigrules = 8Sin@Hn_ ê; n > L x_d Sin@Hn L xd Cos@xD + Cos@Hn L xd Sin@xD, Cos@Hn_ ê; n > L x_d Cos@Hn L xd Cos@xD Sin@Hn L xd Sin@xD<; Pokud je proměnná v příkazu Table označena symbolem různým od symbolu n použitého v definici pravidel trigrules, potíže nejsou: ColumnForm@Table@Expand@Sin@k xd êê. trigrulesd, 8k, 2, 3<D, CenterD 2 Cos@xD Sin@xD 3 Cos@xD 2 Sin@xD Sin@xD 3 Je-li označena stejným symbolem, dostaneme chybný výsledek:

4 Math40-3.nb SetOptions@ReplaceRepeated, MaxIterations 3D; tt = Table@Expand@Sin@n xd êê. trigrulesd, 8n, 2, 3<D; ReplaceRepeated::rrlim : Exiting after Sin@3 xd scanned 3 times. tt@@dd 2 Cos@xD Sin@xD tt@@2dd 3 Cos@xD 2 Cos@2 xd Sin@xD Cos@2 xd Sin@xD 3 + Cos@xD 3 Sin@2 xd 3 Cos@xD Sin@xD 2 Sin@2 xd SetOptions@ReplaceRepeated, MaxIterations 6D; tt = Table@Expand@Sin@n xd êê. trigrulesd, 8n, 2, 3<D; ReplaceRepeated::rrlim : Exiting after Sin@3 xd scanned 6 times. tt@@dd 2 Cos@xD Sin@xD tt@@2dd 6 Cos@xD 5 Cos@2 xd Sin@xD 20 Cos@xD 3 Cos@2 xd Sin@xD 3 + 6 Cos@xD Cos@2 xd Sin@xD 5 + Cos@xD 6 Sin@2 xd 5 Cos@xD 4 Sin@xD 2 Sin@2 xd + 5 Cos@xD 2 Sin@xD 4 Sin@2 xd Sin@xD 6 Sin@2 xd Potíže ale zmizí, vytvoříme-li napřed celý seznam a potom aplikujeme transformační pravidla: SetOptions@ReplaceRepeated, MaxIterations 3D; ColumnForm@Expand@Table@Sin@n xd, 8n, 2, 3<D êê. trigrulesd, CenterD 2 Cos@xD Sin@xD 3 Cos@xD 2 Sin@xD Sin@xD 3 SetOptions@ReplaceRepeated, MaxIterations 65536D; TableForm@Expand@Table@Sin@n xd, 8n, 2, 3<D êê. trigrulesdd 2 Cos@xD Sin@xD 3 Cos@xD 2 Sin@xD Sin@xD 3

Math40-3.nb 5 Algebraické úpravy výrazů à Obecné výrazy: Expand, ExpandAll, PowerExpand, FunctionExpand, Simplify, FullSimplify Expand Expand[expr]... expanduje mocniny, jejichž exponenty jsou přirozená čísla, a součiny. Operuje pouze na nejvyšší úrovni výrazu. p = x 2 + x + ; p2 = x 2 3 x + 2; p3 = Hy + L 2 ; 8p p2, Expand@p p2d< 8H2 3 x + x 2 L H + x + x 2 L, 2 x 2 x 3 + x 4 < 8p 2, Expand@p 2 D< 9H + x + x 2 L 2, + 2 x + 3 x 2 + 2 x 3 + x 4 = p p2 : p3, Expand p p2 É p3 ÖÑ > : H2 3 x + x2 L H + x + x 2 L H + yl 2, 2 H + yl 2 x H + yl 2 2 x 3 H + yl 2 + x 4 H + yl 2 > x lo x+ + y x y+ x+ + y É y+ o m, Expand } o z + n z + o ÖÑ ~ x lo +x m + y +y o, n + z x H + xl H + zl + y o } H + yl H + zl o ~ Zkusme za x dosadit: ColumnForm@8p p2 ê. x Sin@xD, Expand@p p2 ê. x Sin@xDD<, CenterD H2 3 Sin@xD + Sin@xD 2 L H + Sin@xD + Sin@xD 2 L 2 Sin@xD 2 Sin@xD 3 + Sin@xD 4 ColumnForm@8p Hp2 ê. x yl, Expand@p Hp2 ê. x yld<, CenterD H + x + x 2 L H2 3 y + y 2 L 2 + 2 x + 2 x 2 3 y 3 x y 3 x 2 y + y 2 + x y 2 + x 2 y 2

6 Math40-3.nb Expand[expr, patt]... expanduje mocniny, jejichž exponenty jsou přirozená čísla, a součiny, ale nechá beze změny ty části výrazu expr, které neobsahují žádnou část mající tvar šablony (vzoru) patt. Operuje pouze na nejvyšší úrovni výrazu. ColumnForm@8p p2, Expand@p p2d, Expand@p p2, D<, CenterD H2 3 x + x 2 L H + x + x 2 L 2 x 2 x 3 + x 4 2 3 x + x 2 + x H2 3 x + x 2 L + x 2 H2 3 x + x 2 L ColumnForm@8#, Expand@#D, Expand@#, xd< &@p Hp2 ê. x yld, CenterD H + x + x 2 L H2 3 y + y 2 L 2 + 2 x + 2 x 2 3 y 3 x y 3 x 2 y + y 2 + x y 2 + x 2 y 2 2 3 y + y 2 + x H2 3 y + y 2 L + x 2 H2 3 y + y 2 L Expand má skryté (nepovinné) argumenty: Options@ExpandD 8Modulus 0, Trig False< Při nastavení Modulus -> p, p π 0, redukuje výsledek modulo p, takže např. pro p = 2 každý sudý koeficient bude nahrazen nulou. Při nastavení Trig -> True provede s trigonometrickými funkcemi totéž co TrigExpand. 8Expand@HCos@2 xd + L 2 D, Expand@HCos@2 xd + L 2, Trig TrueD< êê ColumnForm@#, CenterD & + 2 Cos@2 xd + Cos@2 xd 2 3 2 + 2 Cos@xD2 + Cos@xD4 2 2 Sin@xD 2 3 Cos@xD 2 Sin@xD 2 + Sin@xD4 2 8Expand@H3 x + 2L 3 D, Expand@H3 x + 2L 3, Modulus 2D, Expand@H3 x + 2L 3, Modulus 3D< 88 + 36 x + 54 x 2 + 27 x 3, x 3, 2< ExpandAll ExpandAll[expr]... provede Expand na každou část výrazu expr p p2 : p3, ExpandAll p p2 É p3 ÖÑ > : H2 3 x + x2 L H + x + x 2 L H + yl 2, 2 + 2 y + y 2 x + 2 y + y 2 2 x 3 + 2 y + y 2 + x 4 + 2 y + y 2 >

Math40-3.nb 7 ExpandAll[expr,patt]... provede Expand[#,patt]& na každou část výrazu expr p p2 : p3, HExpandAll@#, yd &L p p2 É p3 ÖÑ > : H2 3 x + x2 L H + x + x 2 L H + yl 2, H2 3 x + x2 L H + x + x 2 L + 2 y + y 2 > p p2 : p3, HExpandAll@#, xd &L p p2 É p3 ÖÑ > : H2 3 x + x2 L H + x + x 2 L H + yl 2, 2 H + yl 2 x H + yl 2 2 x 3 H + yl 2 + x 4 H + yl 2 > ExpandAll má stejné skryté argumenty jako Expand. PowerExpand PowerExpand[expr]... expanduje mocniny součinu, mocniny mocnin, logaritmy mocnin a logaritmy součinů. Nutno použivat opatrně vzhledem k mnohoznačnosti všech těchto funkcí v komplexním oboru. Mathematica nehlídá korektnost těchto úprav!!! 8Log@Hx yl n D, PowerExpand@Log@Hx yl n DD< 8Log@Hx yl n D, n HLog@xD + Log@yDL< 8Log@HCos@xD Exp@yDL n D, PowerExpand@Log@HCos@xD Exp@yDL n DD< 8Log@H y Cos@xDL n D, n Hy + Log@Cos@xDDL< 8Log@HCos@xD Exp@yD z L n D, PowerExpand@Log@HCos@xD Exp@yD z L n DD< 8Log@HH y L z Cos@xDL n D, n Hy z + Log@Cos@xDDL< 8HHCos@xD Sin@xDL n L m, PowerExpand@HHCos@xD Sin@xDL n L m D< 8HHCos@xD Sin@xDL n L m, Cos@xD m n Sin@xD m n < FunctionExpand FunctionExpand[expr]... snaží se expandovat speciální a některé další funkce v expr a zjednodušit argumenty FunctionExpand[expr,assum]... totéž s použitím předpokladů assum 8Expand@Abs@x ydd, FunctionExpand@Abs@x ydd, FunctionExpand@Abs@x yd, x > 0D<

8 Math40-3.nb 8Abs@x yd, Abs@xD Abs@yD, x Abs@yD< 8FunctionExpand@Log@x ydd, FunctionExpand@Log@x yd, x > 0D< 8Log@x yd, Log@xD + Log@yD< 9FunctionExpandA è!!!!!! x 2 E, FunctionExpandA è!!!!!! x 2, x > 0E= 9 è!!!!!!!!!! x è!!!!!!! x, è!!!!!!!!!! x è!!!!!!! x= Simplify Simplify[expr]... aplikuje blíže nespecifikovaná transformační pravidla a uvede expr na tvar, který podle jistého kritéria považuje za nejjednodušší Simplify i j k x + y z ì i j x y { k y + y É y z ê. 8x Sin@xD, y Cos@xD< x { ÖÑ Cos@xD + Sin@xD Simplify@Sin@xD 4 + 2 Sin@xD 2 Cos@xD 2 + Cos@xD 4 D Simplify@Exp@xD 2 + 2 Exp@xD Exp@yD + Exp@yD 2 D H x + y L 2 Simplify[expr,assum]... totéž jako Simplify s použitím předpokladů assum 8Simplify@Sin@n πd, n IntegersD, Simplify@Cos@n πd, n IntegersD< 80, H L n < 8Simplify@Sin@x + 2 n πd, n IntegersD, Simplify@Cos@x + 2 n πd, n IntegersD< 8Sin@xD, Cos@xD< 8Simplify@Sin@x + n πd, n IntegersD, Simplify@Cos@x + n πd, n IntegersD< 8Sin@n π + xd, Cos@n π + xd< 8Simplify@Sin@x + 7 πdd, Simplify@Cos@x + 8 πdd<

Math40-3.nb 9 8 Sin@xD, Cos@xD< 9SimplifyA è!!!!!! x 2 E, SimplifyA è!!!!!! x 2, x RealsE, SimplifyA è!!!!!! x 2, x 0E= 9 è!!!!!! x 2, Abs@xD, x= Simplify $%%%%%% x + É è!!!! ê. 88x 2<, 8x <, 8x <, 8x 2<< x ÖÑ 8 è!!! 2, 2, 0, 0< lo m o Simplify $%%%%%% x + É è!!!!, Simplify $%%%%%%% n x x + É o è!!!!, x > 0 } ÖÑ x o ÖÑ ~ lo m o $%%%%%% x + o} è!!! n x, 0 ~ o 8Simplify@ArcSin@Sin@xDDD, Simplify@ArcSin@Sin@xDD, Piê2 x Piê2D< 8ArcSin@Sin@xDD, x< SimplifyAHx + ylê2 è!!!!!!!! x y, x 0fly 0E True Simplify má skryté (nepovinné) argumenty: Options@SimplifyD 8ComplexityFunction Automatic, TimeConstraint 300, TransformationFunctions Automatic, Trig True< 8Simplify@4 Log@0DD, Simplify@4 Log@0D, ComplexityFunction LeafCountD< 84 Log@0D, Log@0000D< HSimplify@#, ComplexityFunction LeafCountD &L ê@ 84 Log@4D, 2 Log@42D, 4 Log@0D, 3 Log@42D, 5 Log@2000D + 7 Log@3000D< 8Log@256D, Log@764D, Log@0000D, Log@74088D, Log@7007833065954769326580933808760537550439003000D< Údajně lze nastavení změnit na TransformationFunctions Automatic

0 Math40-3.nb nebo na TransformationFunctions {Automatic,f,f2,...} TransformationFunctions {f,f2,...}. Neznám, bohužel, ani jeden příklad, jak to udělat, a sám jsem na to nepřišel. FullSimplify FullSimplify[expr]... zjednoduší expr podobně jako Simplify, ale používá širší paletu transformačních pravidel É FullSimplify $%%%%%%%%%%%%%% 2 x 3 + x ì è!!!!!!!!!!! 2 x ÖÑ $%%%%%%%%%%%%%% 3 + x 9FullSimplifyALogAz + è!!!!!!!!!!! z + è!!!!!!!!!!! z EE, FullSimplifyAArcCosA è!!!!!!!!!!! xee= 8ArcCosh@zD, ArcSinA è!!! xe< H Sin@xD 2 L $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ExpandBI + è!!!! 2M 20 F êê 8#, FullSimplify@#D< & : "########################################################## 2269537 + 5994428 è!!! 2 H Sin@xD 2 L, I3363 + 2378 è!!! 2M Cos@xD 2 > FullSimplify[expr,assum]... totéž jako FullSimplify s použitím předpokladů assum a FullSimplify b + b c + c É a 3, a > 0 && b > 0 && c > 0 ÖÑ True Options@FullSimplifyD 8ComplexityFunction Automatic, ExcludedForms 8<, TimeConstraint, TransformationFunctions Automatic, Trig True< Fibonacciova čísla jsou definována rekurentně takto: první dvě čísla jsou, každé další je součtem dvou 2 předcházejících. GoldenRatio je číslo -+ è!!!! U.68033. 5 Fibonacci ê@ Range@, 8D 8,, 2, 3, 5, 8, 3, 2, 34, 55, 89, 44, 233, 377, 60, 987, 597, 2584<

Math40-3.nb 8FullSimplify@Fibonacci@2 nd, n IntegersD, FullSimplify@Fibonacci@2 nd, n Integers, ComplexityFunction HLeafCount@#D + 00 Count@#, _Fibonacci, 80, <D &LD< :Fibonacci@2 nd, GoldenRatio 2 n H + GoldenRatio 4 n L è!!! > 5 H Sin@xD 2 L $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ExpandBI + è!!!! 2M 20 F êê :FullSimplify@#D, FullSimplifyB#, ExcludedForms > "#### _ F> & :I3363 + 2378 è!!! 2M Cos@xD 2, "########################################################## 2269537 + 5994428 è!!! 2 Cos@xD 2 > à Polynomiální výrazy: PolynomialQ, Factor, FactorTerms, Collect, Variables, Length, Exponent, Coefficient, CoefficientList, PolynomialQuotient, PolynomialRemainder, PolynomialGCD, PolynomialLCM Polynom v proměnné x je výraz typu a 0 + a x + a 2 x 2 +... + a n x n Výraz x přitom nemusí být symbol. Podobně je definován polynom v proměnných x, x2,... PolynomialQ PolynomialQ[expr,x]... testuje, zda Mathematica považuje expr za polynom v proměnné x PolynomialQ[expr,{x,x2,...}]... testuje, zda Mathematica považuje expr za polynom v proměnných x,x2,... 8p, p ê. x Cos@xD< 8 + x + x 2, + Cos@xD + Cos@xD 2 < Map@PolynomialQ@p ê. x Cos@xD, #D &, 8x, Cos@xD<D 8False, True< 8p, p ê. x Exp@xD< 8 + x + x 2, + x + 2 x < Map@PolynomialQ@p ê. x Exp@xD, #D &, 8x, Exp@xD<D 8False, True< 8p Exp@yD, Map@PolynomialQ@p Exp@yD, #D &, 8x, y<d< êê Flatten

2 Math40-3.nb 8 y H + x + x 2 L, True, False< Factor Factor[poly]... rozloží polynom s koeficienty typu Integer nebo Rational na součin polynomu stejného typu, které se v tomto smyslu dále rozložit nedají 8p p2, Factor@p p2d< 8H2 3 x + x 2 L H + x + x 2 L, H 2 + xl H + xl H + x + x 2 L< :ExpandBIx è!!!! 2M 2 F, FactorBExpandBIx è!!!! 2M 2 FF> 82 2 è!!! 2 x + x 2, 2 2 è!!! 2 x + x 2 < 8#, Factor@#D< &@p p2 ê. x Cos@xDD êê ColumnForm@#, CenterD & H2 3 Cos@xD + Cos@xD 2 L H + Cos@xD + Cos@xD 2 L H 2 + Cos@xDL H + Cos@xDL H + Cos@xD + Cos@xD 2 L 8#, Factor@#D< &@p p2 ê. x Exp@xDD 8H2 3 x + 2 x L H + x + 2 x L, H 2 + x L H + x L H + x + 2 x L< Options@FactorD 8Extension None, GaussianIntegers False, Modulus 0, Trig False< GaussianIntegers jsou komplexní čísla tvaru a + b, kde a, b jsou celá čísla. 8Factor@x 2 + D, Factor@x 2 +, GaussianIntegers TrueD< 8 + x 2, H + xl H + xl< 9Factor@x 2 + 2D, FactorAx 2 + 2, Extension è!!!! 2 E= 82 + x 2, I è!!! 2 xm I è!!! 2 + xm< 9Factor@Hx 2 2L Hx 2 + 6LD, FactorAHx 2 2L Hx 2 + 6L, Extension 9 è!!!! 2, è!!!! 3 =E= 8H 2 + x 2 L H6 + x 2 L, I è!!! 2 xm I è!!! 6 xm I è!!! 6 + xm I è!!! 2 + xm<

Math40-3.nb 3 FactorTerms FactorTerms[poly]... vytkne společný numerický faktor 8FactorTerms@H2 x 2 2L H3 x 3LD, FactorTerms@ x 3 x 2 x D< 86 H x x 2 + x 3 L, x x 2 x 3 < Jak je vidět, - se za společný faktor nepovažuje! Options@FactorTermsD 8Modulus 0, Trig False< Collect Collect[poly,x]... vyjádří poly jako polynom v jedné proměnné x Collect[poly,{x,y,...}]... vyjádří poly jako polynom v jedné proměnné x, koeficienty jako polynomy v proměnné y atd. p4 = H + x + y + zl 2 ; 8Expand@p4D, Collect@p4, xd, Collect@p4, yd, Collect@p4, 8x, y<d< êê ColumnForm@#, CenterD & + 2 x + x 2 + 2 y + 2 x y + y 2 + 2 z + 2 x z + 2 y z + z 2 + x 2 + 2 y + y 2 + 2 z + 2 y z + z 2 + x H2 + 2 y + 2 zl + 2 x + x 2 + y 2 + 2 z + 2 x z + z 2 + y H2 + 2 x + 2 zl + x 2 + y 2 + 2 z + z 2 + y H2 + 2 zl + x H2 + 2 y + 2 zl Options@CollectD 8Modulus 0, Trig False< Variables, Length, Exponent, Coefficient, CoefficientList Variables[poly]... seznam proměnných polynomu Length[poly]... počet členů polynomu Exponent[poly,x]... stupeň polynomu vzhledem k x Coefficient[poly,expr]... koeficient výrazu expr v poly Coefficient[poly,expr,n]... koeficient výrazu expr v poly Coefficient[poly,expr,0]... člen poly nezávislý na expr CoefficientList[poly, x]... seznam koeficientů u mocnin proměnné x CoefficientList[poly,{x,y,..]}]...??? ColumnForm@8p, p2 ê. x x y, p p2, p4, Expand@p4D<D

4 Math40-3.nb + x + x 2 2 3 x y + x 2 y 2 H2 3 x + x 2 L H + x + x 2 L H + x + y + zl 2 + 2 x + x 2 + 2 y + 2 x y + y 2 + 2 z + 2 x z + 2 y z + z 2 Variablesê@8p, p2 ê. x x y, p p2, p4, Expand@p4D< 88x<, 8x, y<, 8x<, 8x, y, z<, 8x, y, z<< Lengthê@8p, p2 ê. x x y, p p2, p4, Expand@p4D< 83, 3, 2, 2, 0< HExponent@#, xd &Lê@8p, p2 ê. x x y, p p2, p4, Expand@p4D< 82, 2, 4, 2, 2< HExponent@#, yd &Lê@8p, p2 ê. x x y, p p2, p4, Expand@p4D< 80, 2, 0, 2, 2< HCoefficient@#, x, 2D &Lê@8p, p2 ê. x x y, p p2, p4, Expand@p4D< 8, y 2, 0,, < HCoefficient@#, x yd &Lê@8p, p2 ê. x x y, p p2, p4, Expand@p4D< 80, 3, 0, 2, 2< HCoefficient@#, x 2 D &Lê@8p, p2 ê. x x y, p p2, p4, Expand@p4D< 8, y 2, 0,, < 8p, p2 ê. x > x y, p p2, p4, Expand@p4D< êê CoefficientList@#, xd & êê ColumnForm@#, CenterD & 8,, < 82, 3 y, y 2 < 82,, 0, 2, < 8 + 2 y + y 2 + 2 z + 2 y z + z 2, 2 + 2 y + 2 z, < 8 + 2 y + y 2 + 2 z + 2 y z + z 2, 2 + 2 y + 2 z, < H8p, p2 ê. x > x y, p p2, p4, Expand@p4D< ê. x > Exp@xDL êê CoefficientList@#, xd & êê ColumnForm@#, CenterD &

Math40-3.nb 5 8 + x + 2 x < 82 3 x y + 2 x y 2 < 82 x 2 3 x + 4 x < 8 + 2 x + 2 x + 2 y + 2 x y + y 2 + 2 z + 2 x z + 2 y z + z 2 < 8 + 2 x + 2 x + 2 y + 2 x y + y 2 + 2 z + 2 x z + 2 y z + z 2 < PolynomialQuotient, PolynomialRemainder, PolynomialGCD, PolynomialLCM PolynomialQuotient[poly,poly2,x]... částečný podíl polynomů PolynomialRemainder[poly,poly2,x]... zbytek při dělení PolynomialGCD[poly,poly2,...]... největší společný dělitel PolynomialLCM[poly,poly2,...]... nejmenší společný násobek 8PolynomialQuotient@x 5 + 4 x 2 4 x, x 2 +, xd, PolynomialRemainder@x 5 + 4 x 2 4 x, x 2 +, xd< 84 x + x 3, 5 3 x< PolynomialGCD@x 4 + 4 x 2 4 x, x 2 D + x PolynomialLCM@x 4 + 4 x 2 4 x, x 2 D H + x 2 L H + 5 x + x 2 + x 3 L à Racionální výrazy: Numerator, Denominator, ExpandNumerator, ExpandDenominator, Cancel, Factor, Together, Apart Rationální výrazy jsou výrazy typu poly/poly2. Numerator[expr]... čitatel racionálního výrazu Denominator[expr]... jmenovatel racionálního výrazu ExpandNumerator[expr]... aplikuje Expand na čitatele ExpandDenominator[expr]... aplikuje Expand na jmenovatele Cancel[expr]... vykrátí společné činitele čitatele a jmenovatele Factor[expr]... uvede na společného jmenovatele a na čitalele i jmenovatele aplikuje Factor Together[expr]... uvede na společného jmenovatele Apart[expr]... rozloží na součet polynomu a jednoduchých zlomků Apart[expr,x]... rozloží na součet polynomu a jednoduchých zlomků, proměnné různé od x přitom považuje za konstanty expr = Hx L Hx2 4 x + 4L Hx 2 + L Hx 2L Hx 2 L Hx 2 + 2L

6 Math40-3.nb H + xl H + x 2 L H4 4 x + x 2 L H 2 + xl H + x 2 L H2 + x 2 L 8Numerator@exprD, Denominator@exprD< 8H + xl H + x 2 L H4 4 x + x 2 L, H 2 + xl H + x 2 L H2 + x 2 L< expr2 = ExpandNumerator@exprD 4 + 8 x 9 x 2 + 9 x 3 5 x 4 + x 5 H 2 + xl H + x 2 L H2 + x 2 L expr3 = ExpandDenominator@exprD H + xl H + x 2 L H4 4 x + x 2 L 4 2 x 2 x 2 + x 3 2 x 4 + x 5 expr4 = Cancel@exprD H 2 + xl H + x 2 L H + xl H2 + x 2 L Expand@expr4D 2 H + xl H2 + x 2 L + x H + xl H2 + x 2 L 2 x 2 H + xl H2 + x 2 L + x 3 H + xl H2 + x 2 L ExpandAll@expr4D 2 2 + 2 x + x 2 + x 3 + x 2 + 2 x + x 2 + x 3 2 x 2 2 + 2 x + x 2 + x 3 + x 3 2 + 2 x + x 2 + x 3 expr5 = Apart@exprD 2 + x x 2 + x 2 8Together@expr5D, Factor@expr5D< : 2 + x 2 x2 + x 3 H + xl H2 + x 2 L, H 2 + xl H + x2 L H + xl H2 + x 2 L > expr6 = expr4 ê. x 2 y 2 H 2 + xl H + y 2 L H + xl H2 + y 2 L 8Apart@expr6D, Apart@expr6, yd, Apart@expr6, xd<

Math40-3.nb 7 : 2 + x + x + 2 x H + xl H2 + y 2 L, 2 + x + x + 2 x H + xl H2 + y 2 L, + y2 2 + y 2 3 H + y 2 L H + xl H2 + y 2 L > expr7 = expr6 ê. 8x Exp@xD, y Sin@xD< H 2 + x L H + Sin@xD 2 L H + x L H2 + Sin@xD 2 L 8Numerator@expr7D, Denominator@expr7D< 8H 2 + x L H + Sin@xD 2 L, H + x L H2 + Sin@xD 2 L< 8ExpandNumerator@expr7D, ExpandDenominator@expr7D< : 2 + x 2 Sin@xD 2 + x Sin@xD 2 H + x L H2 + Sin@xD 2, L H 2 + x L H + Sin@xD 2 L 2 + 2 x + Sin@xD 2 + x Sin@xD 2 > Apart@expr7D + Sin@xD 2 2 + Sin@xD 2 3 H + Sin@xD 2 L H + x L H2 + Sin@xD 2 L Apart@expr7, Exp@xDD + Sin@xD 2 2 + Sin@xD 2 3 H + Sin@xD 2 L H + x L H2 + Sin@xD 2 L Apart@expr7, Sin@xDD 2 + x + x 2 + x H + x L H2 + Sin@xD 2 L à Trigonometrické výrazy: TrigExpand, TrigFactor, TrigReduce, ExpToTrig, TrigToExp TrigExpand[expr]... trigonometrický polynom vyjádří jako trigonometrický polynom minimálního počtu různých argumentů TrigFactor[expr]... trigonometrický polynom rozloží na součin jednodušších trigonometrických polynomů TrigReduce[expr]... trigonometrický polynom vyjádří jako trigonometrický polynom prvního stupně ExpToTrig[expr]... vyjádří exponenciální funkce pomocí trigonometrických TrigToExp[expr]... vyjádří trigonometrické funkce pomocí exponenciálních K trigonometrickým funkcím se zde počítajít také hyperbolické funkce!! TrigExpand@Cos@2 Pi xd Sin@3 xd + Cos@4 xdd

8 Math40-3.nb Cos@xD 4 + 3 Cos@xD 2 Cos@π xd 2 Sin@xD 6 Cos@xD 2 Sin@xD 2 Cos@π xd 2 Sin@xD 3 + Sin@xD 4 3 Cos@xD 2 Sin@xD Sin@π xd 2 + Sin@xD 3 Sin@π xd 2 TrigFactor@%D H2 Cos@4 xd + Sin@3 x 2 π xd + Sin@3 x + 2 π xdl 2 TrigToExp@%%D 2 4 x + 2 4 x + 4 3 x 2 π x 4 3 x 2 π x + 4 3 x+2 π x 4 Cos@2 Pi xd Sin@3 xd + Cos@4 xd É TrigExpand Sin@Pi x + 3 xd ÖÑ 3 x+2 π x HCos@xD 4 + 3 Cos@xD 2 Cos@π xd 2 Sin@xD 6 Cos@xD 2 Sin@xD 2 Cos@π xd 2 Sin@xD 3 + Sin@xD 4 3 Cos@xD 2 Sin@xD Sin@π xd 2 + Sin@xD 3 Sin@π xd 2 Lê H3 Cos@xD 2 Cos@π xd Sin@xD Cos@π xd Sin@xD 3 + Cos@xD 3 Sin@π xd 3 Cos@xD Sin@xD 2 Sin@π xdl TrigFactor@%D Csc@3 x + π xd H2 Cos@4 xd + Sin@3 x 2 π xd + Sin@3 x + 2 π xdl 2 Cos@2 Pi xd Sin@3 xd + Cos@4 xd É TrigExpand Sin@Pi x + 3 xd + Cos@2 xd ÖÑ HCos@xD 4 + 3 Cos@xD 2 Cos@π xd 2 Sin@xD 6 Cos@xD 2 Sin@xD 2 Cos@π xd 2 Sin@xD 3 + Sin@xD 4 3 Cos@xD 2 Sin@xD Sin@π xd 2 + Sin@xD 3 Sin@π xd 2 Lê HCos@xD 2 + 3 Cos@xD 2 Cos@π xd Sin@xD Sin@xD 2 Cos@π xd Sin@xD 3 + Cos@xD 3 Sin@π xd 3 Cos@xD Sin@xD 2 Sin@π xdl TrigFactor@%D 2 Cos@4 xd + Sin@3 x 2 π xd + Sin@3 x + 2 π xd 2 HCos@ x 2 + π 2 x D + Sin@ x 2 + π 2 x 5 x DL HCos@ 2 + π 2 x D + Sin@ 5 2 x + π 2 x DL TrigReduce@Cos@2 Pi xd 3 Sin@3 xd 2 + Cos@4 xd Sin@xDD H6 Cos@2 π xd + 2 Cos@6 π xd Cos@6 x 6 π xd 3 Cos@6 x 2 π xd 6 3 Cos@6 x + 2 π xd Cos@6 x + 6 π xd 8 Sin@3 xd + 8 Sin@5 xdl Cos@2 Pi xd 2 Sin@3 xd 2 + Cos@4 xd 3 É TrigReduce Sin@Pi x + 3 xd 3 ÖÑ

Math40-3.nb 9 H2 + 6 Cos@4 xd 2 Cos@6 xd + 2 Cos@2 xd + 2 Cos@4 π xd Cos@6 x 4 π xd Cos@6 x + 4 π xdlêh2 H3 Sin@3 x + π xd Sin@9 x + 3 π xdll Cos@2 Pi xd 2 Sin@3 xd 2 + Cos@4 xd 3 É TrigReduce Sin@Pi x + 3 xd 3 Cos@xD 2 ÖÑ H 2 6 Cos@4 xd + 2 Cos@6 xd 2 Cos@2 xd 2 Cos@4 π xd + Cos@6 x 4 π xd + Cos@6 x + 4 π xdlêh8 HCos@xD 2 Sin@3 x + π xd 3 LL Funkce: definování a iterování à Named functions - funkce s vlatním jménem Funkce na množině M je podle matematické definice předpis f, který každému jejímu prvku x přiřazuje jednoznačně nějaký prvek f[x]. Je-li M množina uspořádaných n-tic, říkáme, že f je funkce n proměnných. Z hlediska systému Mathematica je funkce v podstatě transformační pravidlo, které se na některé výrazy aplikuje automaticky. Nejjednodušší definice funkce může mít tvar f[arg_,arg2_,...]:= expr[arg,arg2,...], kde expr[arg,arg2,...] je libovolný výraz nebo i procedura, která může ale nemusí obsahovat argumenty arg, arg2,... Nejsou-li na pravé straně žádné podmínky, je možná i definice tvaru Obecně má definice funkce tvar f[arg_,arg2_,...]= expr[arg,arg2,...]. f[arg_,arg2_,...]:= expr[arg,arg2,...]/;condition, f[arg_,arg2_,...]:= expr2[arg,arg2,...]/;condition2,... Záhlaví f nemusí být symbol a počet argumentů nemusí být ve všech řádcích definice stejný. Příklady: Clear@f0D; f0@x_d := Sin@xD x; Plot@f0@xD, 8x, 4 π, 4 π<d 7.5 5 2.5-0 -5 5 0-2.5-5 -7.5-0

20 Math40-3.nb Graphics Clear@fD; f@x_d := ê; x < NB π 2 F; f@x_d := Sin@xD ê; NB π 2 F x NB π 2 F; f@x_d := ê; x > NB π 2 F; Plot@f@xD, 8x, π, π<, Frame > TrueD; 0.5 0-0.5 - -3-2 - 0 2 3 Binomická formule Clear@f2D; f2@x_, y_, n_d := Expand@Hx + yl n D; TableForm@Table@f2@a, b, nd, 8n, 2, 5<DD a 2 + 2 a b + b 2 a 3 + 3 a 2 b + 3 a b 2 + b 3 a 4 + 4 a 3 b + 6 a 2 b 2 + 4 a b 3 + b 4 a 5 + 5 a 4 b + 0 a 3 b 2 + 0 a 2 b 3 + 5 a b 4 + b 5 Faktoriál Clear@f3D; f3@x_d := x ê; x ; f3@x_d := x f3@x D ê; x > ; Table@f3@xD, 8x,, 0<D 8, 2, 6, 24, 20, 720, 5040, 40320, 362880, 3628800< É Table f3@xd, :x, 2, 9, > ÖÑ : 2, 3 4, 5 8, 05 6, 945 32, 0395, 3535, 2027025, 34459425 > 64 28 256 52 Polynom s danou posloupností koeficientů

Math40-3.nb 2 Clear@f4D; f4@l_list, x_d := Table@x i, 8i, Length@lD<D.l; f4@8, 2, 3, 4<, xd + 2 x + 3 x 2 + 4 x 3 Náhodný výběr prvku seznamu Clear@f5D; f5@l_listd := Part@l, Random@Integer, 8, Length@lD<DD; Table@f5@Range@0DD, 80<D 85, 7, 8, 9, 4, 0, 3, 5, 7, 6< Náhodné matice s prvky 0, Clear@f6D; f6@n_d := Table@Random@IntegerD, 8n<, 8n<D; f6@4d êê MatrixForm Náhodné matice s prvky patřícími do daného seznamu Clear@f7D; f7@n_, l_d := Table@f5@lD, 8n<, 8n<D; f7@3, 8 2,,, 2<D êê MatrixForm k-členné části seznamu i 0 0 0y 0 0 0 0 0 0 0 j k 0 z 0{ i 2 y 2 j z k 2 2{ Clear@f8D; f8@x_list, k_integerd := 8< ê; k < 0fik > Length@xD; f8@x_list, k_integerd := 88<< ê; k == 0; f8@x_list, k_integerd := Partition@x, kd ê; k == ; f8@x_list, k_integerd := Join@Map@Join@Take@x, D, #D &, f8@drop@x, D, k DD, f8@drop@x, D, kdd ê; < k < Length@xD; f8@x_list, k_integerd := 8x< ê; k == Length@xD; f8@x_listd := Join@Table@f8@x, nd, 8n, 0, Length@xD<DD; ColumnForm@Table@f8@8, 2, 3, 4<, nd, 8n, 0, 4<DD

22 Math40-3.nb 88<< 88<, 82<, 83<, 84<< 88, 2<, 8, 3<, 8, 4<, 82, 3<, 82, 4<, 83, 4<< 88, 2, 3<, 8, 2, 4<, 8, 3, 4<, 82, 3, 4<< 88, 2, 3, 4<< f8@8, 2, 3, 4<D 888<<, 88<, 82<, 83<, 84<<, 88, 2<, 8, 3<, 8, 4<, 82, 3<, 82, 4<, 83, 4<<, 88, 2, 3<, 8, 2, 4<, 8, 3, 4<, 82, 3, 4<<, 88, 2, 3, 4<<< à Pure functions - bezejmenné funkce Jsou to výrazy, které se chovají jako funkce, ale nemají jméno. Dalo by se snad také říci, že to jsou konstrukce, kterými můžeme přimět výraz, aby se choval jako funkce. Bezejmenné funkce mají obecně tento tvar: )Function[x,expr]; 2)expr& s agumentem # místo x; 3)Function[{x,x2,...},expr]; 4)expr& s argumenty #, #2,... místo x,x2,... Konstrukce ) a 2) jsou ekvivalentní a totéž platí o konstrukcích 3) a 4). Příklady - bezejmenné funkce jedné proměnné: ff = Function@x, + x + x 2 + x 3 D; 8ff@D, ff@2d, ff@3d, %@4D, %@5D, %@ad, %@bd< 84, 5, 40, 85, 56, + a + a 2 + a 3, + b + b 2 + b 3 < I + # + # 2 + # 3 &Mê@8, 2, 3, 4, 5, a, b< 84, 5, 40, 85, 56, + a + a 2 + a 3, + b + b 2 + b 3 < Select@Range@50, 00D, PrimeQ@#D &D 853, 59, 6, 67, 7, 73, 79, 83, 89, 97< Select@I# + 3 2 + # 3 &Mê@ Range@50D, PrimeQ@#D &D 8, 9, 39, 359, 09, 2767, 5499, 79559, 85237< Příklady - bezejmenné funkce více proměnných: ff2 = Function@8x, y, n<, Expand@Hx + yl n DD; %@a,, 8D + 8 a + 28 a 2 + 56 a 3 + 70 a 4 + 56 a 5 + 28 a 6 + 8 a 7 + a 8

Math40-3.nb 23 ff2@a,, 8D + 8 a + 28 a 2 + 56 a 3 + 70 a 4 + 56 a 5 + 28 a 6 + 8 a 7 + a 8 IExpandAH# + #2L #3 E &M@a,, 8D + 8 a + 28 a 2 + 56 a 3 + 70 a 4 + 56 a 5 + 28 a 6 + 8 a 7 + a 8 à Iterování funkcí: Nest, NestList, FixedPoint, FixedPointList, ComposeList Nest[f,x,n]... dá f[x] pro n=, f[f[x]] pro n=2, f[f[f[x]]] pro n=3, atd. NestList[f,x,n]... vytvoří seznam {x,f[x]} pro n=, seznam {x,f[x],f[f[x]]} pro n=2, atd. Clear@fD; Nest@f, x, 4D f@f@f@f@xdddd NestList@f, x, 4D 8x, f@xd, f@f@xdd, f@f@f@xddd, f@f@f@f@xdddd< Clear@f9D; f9@x_d := Nest@f9, x, 3D + x + + +x 8Nest@f9,, 00D, N@Nest@f9,, 00D, 20D< : 5734784403870840 9273726929307899976, 0.6803398874989484820> NestList@f9,, 3D :, 2, 2 3, 3 5, 5 8, 8 3, 3 2, 2 34, 34 55, 55 89, 89 44, 44 233, 233 377, 377 60 > FixedPoint[f,x]... aplikuje opakovaně funkci f, dokud se výsledek mění a počet iterací nepřekročí hodnotu MaxIterations FixedPoint[f,x,SameTest->comp]... totéž, skončí ale v okamžiku, kdy porovnání dvou po sobě jdoucích výsledků funkcí comp dá True

24 Math40-3.nb FixedPoint@N@f9@#D, 20D &, D 0.680339887498948482 FixedPoint f9,, SameTest i jabs@# #2D < k Clear@f0D; f0@x_, y_d := 2 Jx + y x N 2586269025 203650074 É z ÖÑ 0 &y 20 { 9NA è!!!! 3, 20E, FixedPoint@N@f0@#, 3D, 20D &, D= 8.7320508075688772935,.7320508075688772935< FixedPoint f0@#, 3D &,, SameTest i jabs@# #2D < k É z ÖÑ 0 &y 20 { 20930833870580428782805050497 65888085260580757076628582646656 N@%, 20D.7320508075688772935 FixedPointList[f,x]... vytváří seznam {x,f[x],f[f[x]],...} a skončí, když se prvky tohoto seznamu přestanou měnit FixedPointList[f,x,SameTest->comp].. totéž, skončí ale v okamžiku, kdy porovnání dvou po sobě jdoucích výsledků funkcí comp dá True FixedPointList@N@f9@#D, 20D &, D êê Length 49 FixedPointList@N@f9@#D, 20D &, D êê Drop@#, 84, 4<D & 8, 0.50000000000000000000, 0.66666666666666666667, 0.6803398874989484822, 0.6803398874989484820, 0.680339887498948482< FixedPointList f9,, SameTest i jabs@# #2D < k 50 É z ÖÑ 0 &y 20 { êê Length

Math40-3.nb 25 FixedPointList f9,, SameTest i jabs@# #2D < k É z ÖÑ 0 &y 20 { :, 2, 2 3, 4807526976 7778742049, 7778742049 2586269025, 2586269025 203650074 > êê Drop@#, 84, 4<D & FixedPointList@N@f0@#, 3D, 20D &, D 8, 2.0000000000000000000,.7500000000000000000,.7324285742857429,.73205080047275405,.7320508075688772953,.7320508075688772935,.7320508075688772935< FixedPointList f0@#, 3D &,, SameTest i jabs@# #2D < k FixedPointList f0@#, 3D &,, SameTest i jabs@# #2D < k 8 É z ÖÑ 0 &y 20 { É z ÖÑ 0 &y 20 { êê Length :, 2, 7 4, 97 56, 887 0864, 70858977 408855776, 0029782734373057 57906977645402304, 20930833870580428782805050497 65888085260580757076628582646656 > ComposeList[{f,f2,...},x]... vytvoří seznam prvků x,f[x], f2[f[x]],f3[f2[f[x]]],... H Unprotect@FunctionD; SetAttributes@Function,HoldAllD; L functions = Map Function@u, Together@uD &D, Table ÉÉ # + i, 8i,, 0< ÖÑ ÖÑ :TogetherB + # F &, TogetherB 2 + # F &, TogetherB 3 + # F &, TogetherB 4 + # F &, TogetherB 5 + # F &, TogetherB 6 + # F &, TogetherB 7 + # F &, TogetherB 8 + # F &, TogetherB 9 + # F &, TogetherB 0 + # F &> ComposeList@functions, xd :x, + x, + x 3 + 2 x, 3 + 2 x 0 + 7 x, 0 + 7 x 43 + 30 x, 43 + 30 x 225 + 57 x, 225 + 57 x 393 + 972 x, 393 + 972 x 9976 + 696 x, 9976 + 696 x 820 + 56660 x, 820 + 56660 x 740785 + 5690 x, 740785 + 5690 x 748905 + 5225670 x >

26 Math40-3.nb Elementy programování: testy, podmínky, cykly, lokalizace proměnných a konstant à Některé testy nabývající pouze hodnot True a False: IntegerQ, EvenQ, OddQ, PrimeQ, NumberQ, NumericQ, PolynomialQ, VectorQ, MatrixQ, SameQ, UnsameQ, TrueQ, MatchQ IntegerQ, EvenQ, OddQ, PrimeQ, NumberQ, NumericQ IntegerQ[expr]... True, je-li expr celé číslo, jinak False EvenQ[expr]... True, je-li expr sudé číslo, jinak False OddQ[expr]... True, je-li expr liché číslo, jinak False PrimeQ[expr]... True, je-li expr prvočíslo, jinak False NumberQ[expr]... True, je-li expr číslo, jinak False NumericQ[expr]... True, je-li expr číslo nebo matematická konstanta jako např. π nebo hodnota funkce s atributem NumericFunction na jejíchž argumentech nabývá NumericQ hodnoty True Clear@xD; 8IntegerQ@xD, EvenQ@xD, OddQ@xD, PrimeQ@xD< 8False, False, False, False< 8IntegerQ@πD, EvenQ@πD, OddQ@πD, PrimeQ@πD< 8False, False, False, False< 8IntegerQ@2.2D, EvenQ@2.2D, OddQ@2.2D, PrimeQ@2.2D< 8False, False, False, False< 8EvenQ@2D, OddQ@2D, PrimeQ@2D, EvenQ@9D, OddQ@9D, PrimeQ@9D< 8True, False, True, False, True, False< Clear@x, yd; NumberQê@ 82, 2.3, 3ê4, π, x, Sin@ D< 8True, True, True, False, False, False< NumericQê@82, 2.3, 3ê4, π, x, Sin@ D<

Math40-3.nb 27 8True, True, True, True, False, True< PolynomialQ, VectorQ, MatrixQ PolynomialQ[expr,{x,x2,...}]... True, je-li expr polynom v x,x2,..., jinak False VectorQ[expr]... True, je-li expr vektor, jinak False MatrixQ[expr]... True, je-li expr matice, jinak False 8PolynomialQ@x + x 4 D, PolynomialQ@x + Sin@xD, xd, PolynomialQ@ + Sin@xD 2, Sin@xDD, PolynomialQ@ + 2 x, x D, PolynomialQ@ + 2 x, x D, PolynomialQ@ + 2 x, x D< 8True, False, True, True, False, False< 8VectorQ@8a, b, c<d, VectorQ@88a<, b, c<d< 8True, False< 8MatrixQ@88a, b, c<, 8a, b, c<<d, MatrixQ@88a, b, c<, 8a, b<<d, MatrixQ@888a<, b, c<, 8a, b, c<<d< 8True, False, False< SameQ, UnsameQ, TrueQ, MatchQ SameQ[lhs,rhs], lhs===rhs... výsledek je True, jestliže výrazy lhs, rhs jsou identické (trochu jinak je to u čísel typu Real), jinak je výsledek False UnsameQ[lhs,rhs], lhs=!=rhs... Not[lhs===rhs] TrueQ[expr]... True, jestliže výraz expr je pravdivý, jinak False MatchQ[expr,form]... True, jestliže expr má tvar form, jinak False Clear@x, yd; 8SameQ@x, yd, TrueQ@x === yd, TrueQ@x yd, x y, TrueQ@x yd, x y< 8False, False, False, x == y, False, x y< 82 === 2., TrueQ@2 === 2.D, TrueQ@2 == 2.D, 2 2., TrueQ@2 2.D, 2 2.< 8False, False, True, True, False, False< 8MatchQ@2, _IntegerD, MatchQ@2, _RationalD, MatchQ@2, _RealD< 8True, False, False<

28 Math40-3.nb 8MatchQ@a 3, u_ v_ D, MatchQ@a, u_ v_ D, MatchQ@a, u_ v_. D< 8True, False, True< 8MatchQ@a 3, u_ v_ D, MatchQ@2 a, u_ v_?numberq D< 8True, False< AtomQ, MemberQ, FreeQ Atom[expr]... True, nemá-li expr žádné podvýrazy MemberQ[expr,form]... True, jestliže expr obsahuje část tvaru form, jinak False MemberQ[expr,form,level]... True, jestliže expr obsahuje část tvaru form na úrovních level, jinak False FreeQ[expr,form]... True, jestliže expr neobsahuje žádnou část tvaru form, jinak False FreeQ[expr,form,level]... True, jestliže expr neobsahuje žádnou část tvaru form na úrovních level, jinak False AtomQê@82, π, 2 π, x y, x 2, f@d@d< 8True, True, False, False, False, False< 8MemberQ@f@x, x yd, xd, MemberQ@f@x, x yd, x yd< 8True, True< 8MemberQ@f@x, x yd, x y, 8<D, MemberQ@f@x, x yd, x y, 82<D< 8True, False< 8FreeQ@f@x, x yd, yd, FreeQ@f@x, x yd, y, 8<D< 8False, True< à Podmínky: If, Which, Switch If[test,then,else]... je-li test pravdivý, výstupem je then; je-li test nepravdivý, výstupem je else; nelze-li rozhodnout, výstupem je If[test,then,else]. If[test,then,else,unknown]... je-li test pravdivý, výstupem je then; je-li test nepravdivý, výstupem je else; nelze-li rozhodnout, výstupem je unknown

Math40-3.nb 29 If Clear@a, condd; cond := If@a 2, x = True, x = FalseD; 8a = 2; cond, a = ; cond, a = True; cond< 8True, False, If@True == 2, x = True, x = FalseD< Clear@a, condd; cond := If@a 2, x = True, x = False, x = IndeterminateD; 8a = 2; cond, a = ; cond, a = True; cond< 8True, False, Indeterminate< Which Which[test,f,test2,f2,...]... výstupem je výraz fi příslušný k prvnímu pravdivému testu testi Clear@a, condd; cond := Which@a <,, a, 0, a >,, True, IndeterminateD; 8a = 0; cond, a = ; cond, a = 2; cond, a = Indeterminate; cond< 8, 0,, Which@Indeterminate <,, a ==, 0, a >,, True, IndeterminateD< Clear@a, condd; cond := Which@a < === True,, a === True, 0, a > === True,, True, IndeterminateD; 8a = 0; cond, a = ; cond, a = 2; cond, a = Indeterminate; cond< 8, 0,, Indeterminate< Clear@a, condd; cond := Which@TrueQ@a < D,, TrueQ@a D, 0, TrueQ@a > D,, True, IndeterminateD; 8a = 0; cond, a = ; cond, a = 2; cond, a = Indeterminate; cond< 8, 0,, Indeterminate< Clear@a, condd; cond := Which@ NumericQ@aD, Indeterminate, a <,, a, 0, a >,, True, IndeterminateD; 8a = 0; cond, a = ; cond, a = 2; cond, a = Indeterminate; cond< 8, 0,, Indeterminate<

30 Math40-3.nb Switch Switch[expr,v,f,v2,f2,...]... porovnává hodnotu výrazu expr s v,v2,..., dokud nenajde shodu. Výstupem je výraz fi příslušný k první shodě Clear@a, condd; cond := Switch@a,, x, 2, x 2, 3, x 3, _, IndeterminateD; 8a = ; cond, a = 2; cond, a = 3; cond, a = Indeterminate; cond< 8Indeterminate, Indeterminate, Indeterminate, Indeterminate< à Cykly: Do, While, For Do Do[expr,{n}]... vyhodnotí expr n-krát Do[expr,{i,imax}]... vyhodnotí expr pro i probíhající od do imax s krokem Do[expr,{i,imin,imax}]... vyhodnotí expr pro i probíhající od imin do imax s krokem Do[expr,{i,imin,imax,di}]... vyhodnotí expr pro i probíhající od imin do imax s krokem di Vytvoření náhodného seznamu celých čísel: Do@Random@Integer, 80, 00<D, 820<D Vidíme, že Do nedává žádný výstup. Musíme proto postupovat složitěji: list = 8<; Do@AppendTo@list, Random@Integer, 80, 00<DD, 820<D; list 863, 8, 62,, 58, 95, 39, 63, 74, 9, 34, 29, 3, 56, 24, 0, 6, 59, 57, 0< Iterace konvergující k è!!!! 3 : Clear@xD; Do If i ==, x@id = 2, x@id = N i 3 ÉÉ É jx@i D + y z, 20 2 k x@i D { ÖÑ ÖÑ, 8i, 0< ÖÑ ; Array@x, 0D 82,.7500000000000000000,.7324285742857429,.73205080047275405,.7320508075688772953,.7320508075688772935,.7320508075688772935,.7320508075688772935,.7320508075688772935,.7320508075688772935< Zastavení výpočtu po dosažení požadované přesnosti (Mathematica považuje dvě přibližná čísla za sobě rovná, liší-li se nejvýše na posledních dvou desetinných místech):

Math40-3.nb 3 Do If i ==, x@id = 2, x@id = N i 3 ÉÉ jx@i D + y z, 20 2 k x@i D { ÖÑ ÖÑ ; É If@x@i D == x@id, Break@8i, x@id<d D, 8i, 0< ÖÑ 86,.7320508075688772935< Jiný požadavek na přesnost dává jiný výsledek: Do If i ==, x@id = 2, x@id = N i 3 ÉÉ y jx@i D + z, 20 2 k x@i D { ÖÑ ÖÑ ; É If@Abs@x@i D x@idd < 0 20, Break@8i, x@id<d D, 8i, 0< ÖÑ 87,.7320508075688772935< While While[test,body]... opakovaně vyhodnocuje body dokud test = True Opět iterace konvergující k è!!!! 3 : x0 = ; While x = N i jx0 + 3 É É y z, 20 2 k x0 { ÖÑ ; x x0, x0 = x ÖÑ ; x.7320508075688772935 Náhodné matice s prvky patřícími do daného seznamu a determinantem rovným : Clear@fD; f@n_, l_d := Hmatrix = 0 IdentityMatrix@nD; While@Det@matrixD =!=, matrix = Table@f5@lD, 8n<, 8n<DD; matrixl; f@4, 8 3,, 2, 4<D êê MatrixForm i j k 2 4 y 4 2 2 3 4 2 2 2 z { Det@%D Odstranění opakujících se prvků ze seznamu při zachování pořadí:

32 Math40-3.nb Clear@f2D; f2@x_listd := Module@8x = 8<, x2 = x, x3<, While@x2 =!= 8<, x3 = First@x2D; 8x, x2< = 8Append@x, x3d, DeleteCases@x2, x3d<d; xd; list = Table@Random@Integer, 80, 3<D, 850<D 83, 0, 3, 3, 3, 2, 0,,, 2, 3,,, 0,,, 2, 0,, 3, 0, 3, 0,,, 2, 2,, 0, 3, 0, 0, 3, 0, 2, 0, 2, 2,, 0, 0, 2, 0, 3, 3,, 0, 0,, 3< f2@listd 83, 0, 2, < list = Table@f5@8a, b, c, d, e, f, g, h<d, 850<D 8d, g, e, b, h, c, Indeterminate, d, h, f, c, d, Indeterminate, f, b, g, Indeterminate, Indeterminate, Indeterminate, Indeterminate, e, c, c, g, Indeterminate, g, c, f, b, c, h, c, h, c, g, g, f, d, g, d, e, d, c, Indeterminate, e, c, c, g, Indeterminate, d< f2@listd 8d, g, e, b, h, c, Indeterminate, f< For[start,test,incr,body]... vyhodnotí start, potom opakovaně vyhodnocuje body a incr, dokud neselže test For Faktoriál: Clear@f3D; f3@n_d := Hn0 = n; For@i = n0, i >, i =, n0 = n0 id; n0l Map@f3, Range@0DD 8, 2, 6, 24, 20, 720, 5040, 40320, 362880, 3628800< n0 3628800

Math40-3.nb 33 à Lokalizace proměnných a konstant: Block, Module, With Block Module[{x,y,...},body]... provede body s použitím lokálních hodnot proměnných x,y,... Module[{x=x0,y=y0,...},body]... totéž, ale proměnným x,y,... nejprve přiřadí počáteční hodnoty x0,y0,... Clear@aD; expr = x 2 + 3 3 + x 2 8expr, Block@8x<, x = a + ; exprd, Block@8x = a + <, exprd, expr< 83 + x 2, 3 +H + al 2, 3 +H + al 2, 3 + x 2 < 8expr, Block@8expr = a 2 + a + <, exprd, expr< 83 + x 2, + a + a 2, 3 + x 2 < Opět faktoriál: Clear@n, f3d; f3@n_d := Block@8n = n<, For@i = n, i >, i =, n = n Hi LD; nd f3 ê@ Range@0D 8, 2, 6, 24, 20, 720, 5040, 40320, 362880, 3628800< n n Module Module[{x,y,...},body]... modul s lokálními proměnnými x,y,... Module[{x=x0,y=y0,...},body]... modul s počátečními hodnotami pro proměnné x,y,... x,y,... A znovu faktoriál: Clear@f4D; f4@n_d := Module@8nn = n<, For@i = nn, i >, i =, nn = nn Hi LD; nnd Map@f4, Range@, 5, ê2dd

34 Math40-3.nb :, 3 5 05 945, 2,, 6,, 24, 4 8 6 32, 20> With With[{x=x0, y=y0,...},body]... definuje lokální konstanty x,y,... Clear@f5D; f5@x_d := With@8t = x + <, t + t 3 D f5@xd + x +H + xl 3 Clear@f6D; f6@n_d := With@8n = n<, For@i = n, i >, i =, n = n Hi LD; nd 8f6@D, f6@2d< Set::setraw : Cannot assign to raw object 2. 8, 2<