Principy fungování systému Mathematica

Vnitřní reprezentace

Vechno jsou výrazy

Výrazy

Vekeré formule jsou v Mathematice vnitřně reprezentované pomocí výrazů. Výraz má formu hlavička[argument, argument, ...]. Jak hlavička, tak argumenty mohou být opět výrazy nebo atomární objekty.

Formule bývají zadávány pomocí jednoduí a efektivnějí syntaxe a stejně tak jsou reprezentovány v ucelenějí formě výsledky výpočtů. Mathematica vdy nejdříve přeloí zadávanou sekvenci znaků do své reprezentace výrazu a po jeho vyčíslení přeloí výsledek do poadovaného vnějího formátu.

Vnitřní formu výrazu si můeme prohlédnout pomocí funkce FullForm.

a + b c    // FullForm

{(Sqrt[a]), (a^b), (a/b)}   // FullForm

fce[x_] -> x - period  /;  x >  period     // FullForm

Atomární výrazy

Atomární objekty jsou reprezentovány té výrazy, jejich obsah vak není přímo přístupný — je přístupný pouze skrze význam přísluných objektů. Atomární výrazy můeme rozdělit podle jejich hlavičky na několik druhů. 
({{Symbol, \(symbol\ slouící\ k\ reprezentaci\ 
                    objektů\ 
                    \((proměnných, \ funkcí, \ 
                      poříkazů, \  ... )\)\)}, {String, \(řetězec\ znaků\)}, {Integer, celé číslo}, {Real, \(přibliné\ reálné\ 
                    číslo\)}, {Rational, racionální číslo}, {Complex, komplexní číslo}})

Zadávání obecných výrazů

Obecný výraz lze vedle jeho standardní formy zadat i jiným způsobem. 
({{f[x, y], standardní tvar výrazu}, {f @ x, prefixová forma výrazu f[x]}, {x  //  f, postfixová forma výrazu f[x]}, {x ~f~ y, infixová forma výrazu f[x, y]}})

Vstupní a výstupní formáty

Vstupní a výstupní formát formulí lze vybrat z několika alternativ. Při zadání formule Mathematica provede automaticky konverzi ze vstupního formátu do své reprezentace a po vyčíslení výrazu převede výsledek do poadovaného výstupního tvaru.

Vstupní formáty

Vstupní formáty umoňují větinou snadnějí a přehlednějí zadávání výrazů.

({{FullForm, \(plná\ vnitřní\ forma\ 
                  výrazů\)}, {InputForm, jednodimenzionální syntax vhodná 
                  pro zadávání z klávesnice
                  }, {StandardForm, \(dvoudimenzionální\ forma\ 
                  zadávání\ výrazaů\)}, {TraditionalForm, \(dvoudimenzionální\ forma\ 
                  imitující\ kniní\ 
                  matematické\ značení\)}})

FullForm je podmnoinou InputForm a ta je podmnoinou StandardForm. TraditionalForm nemusí být vdy jednoznačná.

Výstupní formáty

Výstupní formáty zpřehledňují grafickou reprezentaci výrazů a umoňují export do jiných aplikací. Výstupní forma výrazu funguje jako obal — vnitřně si Mathematica pamatuje plnou verzi výrazu a pouze pro grafickou reprezentaci ho zabalí do přísluného formátování.

({{FullForm, \(plná\ vnitřní\ forma\ 
                  výrazů\)}, {InputForm, jednodimenzionální syntax }, {StandardForm, \(dvoudimenzionální\ forma\ 
                  výrazaů\)}, {TraditionalForm, \(dvoudimenzionální\ forma\ 
                  imitující\ kniní\ 
                  matematické\ značení\)}, {OutputForm, dvoudimenzionální forma 
                  exportovatelná do textové podoby}, {TeXForm, výstup v TeXovském formátu}, {CForm, výstup ve formátu vhodném pro C
                  }, {FortranForm, výstup ve formátu vhodném pro 
                  Fortran}, {TableForm, \(reprezentuje\ vnořené\ seznamy\ jako\ tabulku
                  \)}, {MatrixForm, \(reprezentuje\ vnořené\ seznamy\ jako\ matici
                  \)}})

Vedle těchto formátů existují jetě dalí formáty ovlivňující např. zobrazování čísel.

Příklady

StandardForm je nejvhodnějí reprezentace pro běnou práci, InputForm je vhodná reprezentace pokud máme k dispozici pouze lineární terminál, TraditionalForm se snaí co nejvíce napodobit běnou matematickou notaci. TeXForm, CForm a FortranForm slouí k exportu do jiných aplikací.

((1 + (a^b))/2) + f[α]

% // FullForm

%  //  InputForm

%  //  TraditionalForm

%  //  OutputForm

%  //  TeXForm

% // FortranForm

TableForm a MatrixForm jsou vhodné při práci s tabulkami a maticemi.

{{1, 3, 1}, {2, 3, 1}}

% // TableForm

% // MatrixForm

Zkrácení výstupu

V případě velmi dlouhých výsledků nás někdy zajímá pouze struktura výsledku. Zkrácený výstup umoňuje speciální formátování. 
({{Short[výraz, n], ukáe pouze n-\(řádkovou\ verzi\ výrazu\)}, {Shallow[výraz, {hloubka, délka}], \(ukáe\ výraz\ do\ 
                    určité\ hloubky\ a\ délky\)}})

Shallow[
      Solve[b (x^3) + c (x^2) + d x  +  e  ==  0, x], {9, 2}]

Short[%, 3]

Manipulace s výrazy

Podvýrazy

K manipulaci s částmi výrazu sloí následující funkce: Part, Head, First, Last, Extract, Take, Drop a Rest.

({{Part[výraz,pozice]  nebo  výraz[[pozice]], Vrací podvýraz výrazu na 
                  určené pozici . }, {Head[výraz], Vrací hlavičku výrazu . }})

Příklady

{a, b, c, d}[[2]]

(a + b + c + d)[[-2]]

Head[a + b + c + d]

Aplikování funkce na podvýrazy

Často je potřeba aplikovat funkci na různé pozice výrazu. K tomu slouí funkce Apply, Map, MapAll, MapAt, MapIndexed, MapThread a Scan.

({{Map[f,výraz]   nebo  f /@ výraz, Aplikuje f na argumenty výrazu . }, {Apply[f,výraz]  nebo  f @@ výraz, Změní hlavičku výrazu na f.}})

Příklady

f /@ {1, 2, 3, 4}

old[a, b, c, d]

new @@ %

Formální funkce

Formální funkce jedné proměnné

Někdy chceme pouít výraz jako funkci bez toho, abychom funkci explicitně definovali a pojmenovali. K tomuto účelu slouí formální funkce Function[výraz] či zkráceně výraz&. Znak # (nebo #1) ve výrazu definujícím funkci odkazuje na formální argument.

\(a\ \  // \ \((1 + # + #\^2)\)&\)

\(\(#\^2&\)\ \ /@\ {a, b, c}\)

Sin'

%[x]

Formální funkce více proměnných

Argumety formální funkce více proměnných se značí #1, #2, .... Zápis ##n odkazuje na sekvenci vech argumentů počínající n-tým argumentem.

\(\(\((#1 + #2)\)\^#3&\)[a, b, c]\)

(#1[##2])& [c, 1, 2, 3]

Standardní postup vyčíslení výrazu

Po odeslání výrazu Mathematica provede jeho vyčíslení a vrátí výsledek. Vyčíslení probíhá podle předdefinovaných pravidel a pravidel definovaných uivatelem. Pravidal jsou asociována s jednotlivými symboly. Mathematica vyčísluje opakovaně výraz dokud nalézá aplikovatelná pravidla.

Standardní postup

Větina výrazů je vyčíslovana v tzv. standardním pořadí vyčíslení. Níe je uvedeno (zkrácené) pořadí kroků při standardním vyčíslení výrazu h[(Subscript[a, 1]),(Subscript[a, 2]),...]. Kdykoli se výraz změní, vyčíslení se opakuje.

◆  Pokud je výraz atomární, zůstává nezměněn.

◆  Vyčíslí se hlavička h výrazu.

◆  Vyčíslují se jednotlivé argumenty (Subscript[a, 1]), (Subscript[a, 2]), ... výrazu.

◆  Pouijí se uivatelem definované transformační pravidla asociované se symbolem h.

◆  Pouijí se předdefinované transformační pravidla asociované se symbolem h.

Nestandardní postup

Vyčíslení některých výrazů vak můe probíhat v trochu jiném pořadí. Příkladem jsou ji diskutované pozdrené přiřazení.

Přiřazení x:= a je zkrácenou formou příkazu SetDelayed[x,a]. Při vyčíslení této funkce se její argumenty nevyčíslují.

Pořadí vyčíslení můe být ovlivněno nastavením jistých atributů pro symbol h (např. Hold, HoldAll, Orderless, Flat, Listable, ...) či pouitím příkazů přímo ovlivňujících vyčíslení (např. Hold, HoldPattern, Unevaluated, Evaluate, ReleaseHold, ...).

Vedle toho existují příkazy způsobující např. podmíněné či opakované vyčíslení jako jsou např. If, Switch, While, For, ....

Sledování vyčíslení

Pořadí vyčíslení lze sledovat pomocí funkce Trace.

(a^(x + x)) (1 + 2)         // FullForm // HoldForm

Trace[(a^(x + x)) (1 + 2) , TraceOriginal -> True]