Mathematica

Související informace naleznete také v článku Wolfram Language.
Mathematica
Logo
VývojářWolfram Research
Aktuální verze13.3 (28. června 2023)
Operační systémMicrosoft Windows
Linux
macOS
Vyvíjeno vC, C++, Java a Wolfram Language
Typ softwaruprogramovací jazyk, počítačový algebraický systém, matematický software, array programming language, funkcionální programovací jazyk, software pro analýzu dat, vizualizační software a interpretovaný jazyk
Licenceproprietární licence
Webwww.wolfram.com/mathematica/
Některá data mohou pocházet z datové položky.

Wolfram Mathematica (dříve Mathematica, vyslovuj [matematika], dále též „editor“) je počítačový program původně určený pro provádění matematických, vědeckých a technických výpočtů. V současnosti se jedná o vývojové prostředí programovacího jazyka Wolfram Language, jenž nabízí funkcionalitu z mnoha oblastí jako jsou matematické výpočty, numerické simulace, zpracování a vizualizace dat, strojové učení, tvorba webových stránek, úprava videa a zvuku, generování dokumentů atd. Tento program je od roku 1988[1] vyvíjen jako komerční produkt americkou softwarovou společností Wolfram Research, spoluzaloženou a vedenou Stephenem Wolframem.

Samotné jméno „Mathematica“ navrhl Steve Jobs[2] a zpočátku toto jméno označovalo jak program, který slouží pro vyhodnocování uživatelem zadaných příkazů, tak i sadu příkazů samotnou. S verzí 10.0.0 došlo k oddělení těchto dvou konceptů[3] — zatímco editor samotný se stále jmenuje Mathematica, programovací jazyk, který tento program implementuje, se nazývá Wolfram Language. Přesné rozdělení nebylo nicméně společností Wolfram Research jasně vymezeno, což vedlo k jistému zmatení v názvosloví, pro podrobnosti viz oddíl „Pojmenování“ v článku Wolfram Language. Popis programovacího jazyka Wolfram Language lze nalézt na jeho vlastní stránce, tato stránka se věnuje především uživatelskému prostředí editoru Mathematica.

Editor neslouží pouze k vývoji a vyhodnocování kódu. Lze v něm přehrávat zvuk, sledovat video, kreslit dvourozměrnou grafiku a interagovat s grafikou trojrozměrnou. Kód lze seskupovat do hierarchicky uspořádaných celků, z nichž některé lze skrýt pro zvýšení čitelnosti ostatního kódu. V Mathematice lze dále psát textové dokumenty, kde lze text dělit do kapitol s různými úrovněmi nadpisů, dodávat číslování stránek a nastavovat prvky známé z textových procesorů. Lze v ní i vytvářet prezentace ve stylu programu PowerPoint. Od verze 13 lze v Mathematice automaticky analyzovat zdrojový kód a vytvářet pro něj dokumentaci.

Mathematica je dostupná pro operační systémy Microsoft Windows, macOS a Linux. Přibližně od roku 2017 se vlajkovým produktem společnosti Wolfram Research pro nové uživatele postupně stává systém Wolfram One, přičemž Mathematica získává roli produktu pro stávající uživatele[4][5]. Pokud má uživatel založený účet u společnosti Wolfram Research, může editor propojit se svým cloudovým účtem a kód vyvíjený lokálně na svém počítači může nahrát přímo z editoru na cloud. V následujícím je popisována verze Mathematicy 13, pokud není vysloveně uvedeno jinak.

Podobný a konkurenční software

Související informace naleznete také v článku Wolfram Language#Vývojová prostředí.

Pro práci s jazykem Wolfram Language existuje kromě Mathematicy několik dalších programů, většinou vyvíjených společností Wolfram Research. Alternativou k Mathematice, která je jí nicméně velmi podobná, je program Wolfram|One[6]. Omezenější možnosti nabízí Wolfram Cloud, který je přístupný přímo z webového prohlížeče. V prostředí příkazové řádky lze s Wolfram Language pracovat pomocí programů WolframKernel či wolframscript. Pro profesionální práci slouží pak plugin Wolfram Workbench pro vývojové prostředí Eclipse, který je vyvíjen společností Wolfram Research, a plugin pro Wolfram Language ve vývojovém prostředí IntelliJ IDEA, vyvíjený společností JetBrains.

Silnou stránkou Wolfram Language jsou symbolické výpočty. V tomto ohledu je přímým konkurentem Mathematicy program Maple s podobným zaměřením, jenž je vyvíjen firmou Maplesoft. Open-sourceovými alternativami k těmto dvěma komerčním produktům jsou pak Maxima a SageMath. Wolfram Language ale nabízí i numerické výpočty, a v tomto ohledu je Mathematica často srovnávána s programem MATLAB vyvíjeným společností MathWorks, jehož původním zaměřením byla práce s numerickými maticemi. V oblasti numerických výpočtů je MATLAB často zřetelně rychlejší než Mathematica[7]. Oba tyto produkty se také často srovnávají s numerickými a symbolickými knihovnami jazyka Python, jehož výhodou je široká uživatelská základna a to, že se jedná o otevřený software.

Koncept notebooků jako výpočetního prostředí byl z Mathematicy převzat dalšími projekty, přičemž nejvýraznějším představitelem je patrně Jupyter[8][9], což je open source projekt umožňující zobrazovat notebook ve webovém prohlížeči a výpočty zasílat do výpočetního jádra v různých programovacích jazycích. V Jupyteru lze pracovat i s jazykem Wolfram Language[10], ačkoli s omezenou funkcionalitou.

Struktura programu

Uživatelské prostředí

Související informace naleznete také v článku Wolfram Language.

Vývojové prostředí má podobu prázdného okna, označovaného jako notebook (viz níže), na jehož horním okraji je hlavní menu obsahující nabídky s různou funkcionalitou. Rozesazení ovládacích prvků tak má podobné uspořádání jako např. v programech balíku Microsoft Office. Takto nabízená funkcionalita je rozebrána v základních obrysech níže v oddíle „Přehled funkcionality“. Do prázdného okna se vypisují příkazy psané v jazyce Wolfram Language, čímž se vytvářejí skripty, které jsou při vyhodnocení interpretovány výpočetním jádrem Mathematicy. Velikost písma v okně lze přizpůsobit nastavením odpovídajícího zoomu. Pro vyvolání nápovědy lze kromě odpovídající nabídky využít i klávesyF1.

V Mathematice existují tři způsoby rozvržení vývojového prostředí, kde každé z nich zobrazí tentýž kód odlišně[11][12] — výchozím rozvržením je prostředí working (to jest pracovní), které klade důraz na přehlednost kódu. Pro tvorbu prezentací, viz níže, je použito prostředí slideshow, kde je kód rozdělen do jednotlivých snímků, jež se mají zobrazit jeden po druhém. Konečně pro tisk je určeno prostředí printout, jež bere v potaz rozměry stránky, na níž se má tisknout, její okraje apod. Kód lze v rámci daného rozvržení dále zobrazovat a zadávat v různých formátech — vstupní kód se obyčejně vkládá ve formátu InputForm, výstup je formátován ve formě StandardForm, apod. Pro podrobnosti viz oddíl „Formátování kódu“.

V minulosti se pojmem Mathematica označoval i programovací jazyk implementovaný programem Mathematica. Od verze 10.0.0 se jazyk nazývá Wolfram Language a pro jeho popis proto čtenáře odkážeme na odpovídající článek. K většině funkcionality popsané v tomto článku lze přistupovat jednak přes uživatelské rozhraní, jak rozebráno níže, jednak i programově pomocí nejrůznějších příkazů[13][14]. Například nový notebook lze vytvořit z již existujícího notebooku příkazem CreateNotebook či CreateDocument, globální volby lze nastavit příkazem SetSystemOptions. Příkazy uživatele lze zabalit do výrazů s hlavičkou FrontEndToken a ty poté provést voláním funke FrontEndExecute[15]. Popřípadě lze rovnou použít příkaz FrontEndTokenExecute. Styl textu jako barvu, řez, font apod. lze programově upravit pomocí výrazu Style atd.

Koncept notebooků

Výchozím pracovním prostředím pro psaní kódu v Mathematice je tak zvaný notebook, kde je kód strukturován do hierarchie elementárních částí zvaných buňky (angl. cells). Příkazy jsou psány do vstupních buněk a po vyhodnocení vstupní buňky je výsledek výpočtu vrácen do výstupní buňky, která se automaticky pod tou vstupní vytvoří[16]. Buňky lze dále seskupovat do větších celků a utvářet tak strukturu kódu podobnou kapitolám a podkapitolám známým z psaných knih. Buňky plní různé role, lze vkládat i čistě textové buňky či nadpisy. Tyto buňky nejsou při běhu chodu vyhodnoceny a mohou tak zastupovat funkci komentářů. Viz též oddíl „Struktura notebooků“ níže.

Koncept notebooku jako druhu pracovního prostředí rozděleného do buněk vynalezl Theodore Gray[17], spoluzakladatel společnosti Wolfram Research. Toto pracovní prostředí umožňuje flexibilní interakci uživatele s kódem a jeho výstupem. Notebook je při uložení zapsán do textového souboru s příponou .nb, kterému se také může říkat notebook. Tento textový soubor obsahuje kromě metadat především výraz s hlavičkou Notebook, v jehož těle je uložen samotný kód, výstup a doprovodné informace. Konečně, na otevřený notebook se dá odkazovat přímo v kódu pomocí výrazu NotebookObject. Notebook jako pracovní prostředí je implementován front endem[18]. Bližší podrobnosti k notebookům jsou podány dále v článku.

Notebooků existuje několik druhů[19]. Kromě základní verze lze uzpůsobovat vzhled i chování prvků daného notebooku a vytvářet tak knihy, seznam poznámek, vědecké články apod. Speciální notebook je určen pro tvorbu prezentací. Mathematica dále nabízí notebooky pro tvorbu dotazníků, notebooky pro jednotkové testy, či notebooky pro tvorbu šablon, kde je do předpřipravených polí programově dodán obsah. Dále lze využít notebooků s více vývojářsky orientovanou podobou pro tvorbu balíků a nízkoúrovňových skriptů. Dokumentace pro funkce a symboly v Mathematice má také formu notebooků, kde lze přímo v dokumentaci interagovat s kódem či ho rovnou přepisovat. V neposlední řadě se k tomu určené notebooky používají pro tvorbu zdrojů a funkcí určených do online repozitářů.

Jádro a front end

Na tuto kapitolu je přesměrováno heslo WSTP.

Výpočetní systém je rozdělen do dvou částí – jádra a front endu. Jádro (angl. kernel) se stará o samotné vyhodnocování kódu a provádění výpočtů, zatímco front end slouží k interakci s uživatelem a poskytuje grafické uživatelské rozhraní[18]. Interakcí se přitom nemyslí jen vypisování číselných a jiných výsledků, ale i podpora náročných interaktivních widgetů, přehrávání videa a zvuku, apod. Například vykreslovaná 3D grafika reaguje rotací na tažení kurzoru uživatelem, v případě 2D grafiky lze tuto kreslit myší přímo do uživatelského rozhraní atd. Změny ve front endu se neprojeví ve výpočtech dokud nejsou tyto odeslány do jádra. Příkazy se přitom vyhodnocují v pořadí ve kterém byly do jádra zaslány, ne tedy nutně ve stejném pořadí, ve kterém jsou vypsány ve front endu. S tím souvisí i fakt, že při úpravě kódu, např. při změně definice nějaké funkce, nemusí aktuální verze kódu odpovídat definicím, které jsou v jádře uloženy z předchozího provedení kódu. To může z pohledu uživatele občas vést k neočekávaným výsledkům.

Vypíše-li uživatel do front endu kód, je tento kód předzpracován a v upravené formě zaslán front endem do jádra pomocí protokolu WSTP (Wolfram Symbolic Transfer Protocol[20], dříve známý pod jménem MathLink). Po skončení výpočtu zašle stejným protokolem poté jádro výsledek zpět do front endu, který tento výsledek vhodně naformátuje a vykreslí uživateli[21]. Tento model tak připomíná klient–server síťovou architekturu, ačkoli se od ní odlišuje, viz níže. Protokol WSTP slouží i pro předávání vstupů a výstupů mezi výpočetním jádrem a externí aplikací, která může být napsána v jiném jazyce. Součástí Mathematicy jsou například takováto propojení s jazyky Java (knihovna J/Link[22]), R (knihovna RLink[23]) či s .NET frameworkem (knihovna .NET/Link[24])[pozn. 1]. Z jednoho front endu lze kontrolovat více výpočetních jader a podobně jedno jádro může obsluhovat vícero front endů.

Přesněji vzato, mezi front endem a jádrem existují tři propojení[27] — hlavní (angl. main link), preemptivní (angl. preemptive link) a servisní (angl. service link). Hlavní spojení se stará o zasílání příkazů zadaných uživatelem do jádra a následné navrácení výsledků zpět do front endu. Front end udržuje frontu čekajících žádostí o vyhodnocení, které mají být poslány do jádra. Mezitím přitom zůstává front end plně funkční a lze s ním pracovat — uživatel do něj může psát, může otevírat a ukládat soubory apod. Výpočet zaslaný do jádra hlavním propojením může trvat libovolně dlouho, není zde nastaven žádný limit na dobu vyhodnocování[pozn. 2]. Preemtivní spojení funguje odlišně — na straně front endu není žádná fronta čekajících příkazů. Místo toho zasílá toto spojení příkazy do jádra rovnou a po zaslání jednoho příkazu vždy čeká, dokud neobdrží výsledek. Mezitím je front end uzamčen a žádná interakce s uživatelem není možná. Na straně jádra pak je příkazům přicházejícím z preemtivního spojení dána přednost před příkazy ze spojení hlavního. Pokud požadavek na vyhodnocení přijde do jádra v době, kdy zrovna zpracovává úlohu z hlavního spojení, je tato úloha na potřebnou dobu přerušena. Preemtivního spojení je užíváno pro implementaci interaktivních prvků jazyka Wolfram Language, především pak výrazu Dynamic a jeho nadstaveb jako Manipulate. Konečně servisní spojení slouží pro zasílání požadavků z jádra do front endu.

Struktura notebooků

Příklad notebooku otevřeného v okně Mathematicy. Notebook se skládá z buněk obsahující kód ve Wolfram Language.

Buňky

Při vyhodnocování zdrojového kódu jsou příkazy ze vstupních buněk zasílány do výpočetního jádra, jednu buňku po druhé. Při vyhodnocení dostane daná buňka pořadové číslo, které si ponechává až do konce běhu výpočetního jádra. Daná vstupní buňka je pak uvozena řetězcem "In[n]:=", kde n je její pořadové číslo. Výstup kódu obsaženého v takové buňce je vypsán pod tuto buňku do nové výstupní buňky, jež je uvozena řetězcem "Out[n]=". Tyto řetězce připomínají prompt z příkazové řádky a je-li místo Mathematicy pro vývoj kódu použita právě příkazová řádka, tak promptem tyto řetězce skutečně jsou[pozn. 3].

V těle funkce a podobných konstruktů se musí každý příkaz zakončit středníkem. Toto však není nutností, jsou-li příkazy psány jednotlivě po řádcích rovnou do editoru. V takovém případě se za vstupní buňku vypíše ve stejném pořadí výsledek každého řádku. Konkrétní kód v editoru pak může vypadat následovně:

In[1]:= promenna = 0.2
Out[1]= 0.2
In[2]:= obsahKruhu = Pi*polomer^2;
In[3]:= 1 + 2*3
Out[3]= 7

Všimněme si, že napsáním středníku za příkaz se zamezí vypsání jeho výsledku. Tento výsledek je ale i přesto uložen do Out výrazu, v případě výše tedy Out[2] = 0.125664. Každá buňka je uvozena takovýmito značkami. Ve zbytku článku jsou tyto nicméně pro přehlednost vynechávány.

Interně je každá buňka představována konstruktem Cell[obsah, styl, volby][13], kde obsah může být buď čistý text, anebo strukturovanější data zabalená do výrazu s hlavičkou BoxData; styl označuje styl buňky, jako například vstupní ("Input"), výstupní ("Output"), textová ("Text"), titul ("Title") apod.; a volby jsou dodatečná nastavení buňky, jakým může být například barva pozadí, čas poslední změny dané buňky či identifikační číslo buňky. Buňka tedy obsahuje více informací, než které jsou uživateli v editoru přímo přístupné a z tohoto pohledu nelze kód notebooku označit jako WYSIWYG. Buňkám lze dále nastavovat různé vlastnosti[28]. Lze nastavit, zda je buňka upravovatelná, čímž se uzamkne pro dodatečné úpravy, či zda je vyhodnotitelná, čímž není zasílána do výpočetního jádra, či zda je určená pro koncové použití uživatelem bez možnosti některých druhů interakce. Pořadí vyhodnocení buněk lze změnit jednoduše tak, že uživatel vybere a pošle k vyhodnocení jednotlivé buňky ručně. Jiným, systematičtějším, způsobem je označit některé buňky jako inicializační buňky (angl. initialization cells)[29]. Tyto buňky jsou vyhodnoceny jako první při spuštění výpočetního jádra a až po nich je vyhodnocen zbytek buněk jedna po druhé.

Strukturování kódu

Buňky lze sdružovat do větších celků, kterým lze dávat nadpisy, a vytvořit tak hierarchickou strukturu buněk, která může sloužit k přehlednějšímu rozdělení kódu[30]. Nadpisy v hierarchii lze navíc formátovat různým způsobem. Editor dále umožňuje jednotlivé sekce kódu zavřít tak, že se kód v této sekci skryje aniž by došlo k jeho smazání. Lze tak skrýt buňky v různých úrovních hierarchie a vždy ponechat jen právě používanou sekci. Tímto způsobem lze do jednoho souboru vložit velké množství zdrojového kódu bez toho, aniž by se neúměrně zvýšila těžkopádnost práce s kódem. Související informace lze nalézt v oddíle „Tvorba psaných dokumentů“ níže.

Dvě a více buněk lze v případě potřeby sloučit od jedné anebo lze část kódu z již existující buňky vydělit a udělat z něj buňku novou. Namísto slučování lze buňky pouze seskupit. Příslušnost dané buňky do skupiny se pozná podle tzv. buňkové závorky (angl. cell bracket)[31], což je dekorovaná svislá čára na pravé straně okna, která se táhne přes výšku celé buňky, celé podskupiny, skupiny atd. jak je ukázáno na obrázku vpravo výše. Danou skupinu lze přitom zavřít poklepáním na její závorku tak, že je viditelný pouze nadpis dané skupiny anebo jen jedna konkrétní buňka. Zavřenou skupinu lze opětovným poklepáním na její závorku znovu otevřít.

Pro ilustraci použijme následující příklad, kde podbarvený text níže připomíná formátovaný text a zdrojový kód v Mathematice:

Toto je titul
První sekce
Spočti výsledek následujícího výrazu:

Další sekce

a = 2

Text a kód jsou sdruženy pod titulem, jenž zní „Toto je titul“ a jenž je dále rozdělen do dvou sekcí, z nichž první má nadpis „První sekce“ a druhá zní „Další sekce“. V první sekci je použit prostý text „Spočti výsledek následujícího výrazu:“, jenž je ohraničen rámečkem. Pod tímto textem je jako vstupní kód vložen zlomek 12/3, který je formátován tak, že čitatel je vykreslen nad vodorovnou zlomkovou čárou a jmenovatelem přesně tak, jaká je zvyklost v matematice. Dále je tento kód nastaven tak, aby se vyhodnotil před ostatním kódem jako inicializační buňka. Konečně ve druhé sekci se nachází kód a = 2, který jako inicializační buňka nastavený není.

Přehled funkcionality

Následující rozdělení do tematických okruhů je jen orientační, mnoho funkcí z jednoho okruhu lze použít i v okruzích ostatních. Dále není v následujícím příliš rozlišováno mezi Mathematicou a jazykem Wolfram Language — v mnoha případech je tatáž funkčnost dostupná jednak z nabídky editoru, jednak jako příkaz programovacího jazyka.

Vývoj kódu

Editor umožňuje komentovat kód, dynamicky doplňovat rozepsaný výraz, zobrazit nízkoúrovňovou variantu vypsaného kódu či výsledku atd. Tlačítko „zpět“ vrací pouze změny provedené ve front endu a změny, které byly již odeslány do jádra, tak nejsou tímto tlačítkem ovlivněny. Dále lze zobrazit historii úprav notebooku[32] či okno, do nějž se vypisují chybová hlášení, která nejsou běžně vypisována přímo do notebooku. Vybrané buňce lze přiřadit dodatečný popisek (angl. cell tag)[33], který může sloužit k vytváření skupin stejně označených buněk, což může dále usnadňovat jejich manipulaci. Mathematica nabízí debugger a od verze 13 analýzu kódu[34], jež sleduje například, zda jsou využity všechny deklarované lokální proměnné, zda nelze kód zjednodušit apod. Od verze 13 lze dále uzpůsobit formátování kódu a je možno vytvářet dokumentaci způsobem typickým pro vestavěné funkce[35][pozn. 4]. Je k dispozici též speciální druh notebooků určený pro tvorbu jednotkových testů[36]. Nastavení nejrůznějších voleb prostředí lze provádět buď pomocí příkazů vepsaných do notebooku nebo ručně výběrem v nástroji option inspector[37][38].

Historicky byla Mathematica, jak ostatně její název napovídá, určena především pro práci s matematickými výrazy a funkcemi. Z tohoto důvodu obsahuje tento editor dodatečnou funkcionalitu vztahující se právě k matematice. Vyvolat lze palety nástrojů pro zadávání speciálních symbolů, operátorů nebo písmen alfabety. Dále lze pomocí klávesových zkratek vkládat matice, horní a dolní indexy[39][40], či matematické vzorce ve značkovacím jazyce TeX[pozn. 5]. Podporována je široká škála speciálních znaků, jež lze vkládat pomocí aliasů či jejich jmen[41][11].

Pokud má sloužit za vstup obrázek, lze tento buď načíst z externího souboru, anebo ho přímo uložit do notebooku a přiřadit ho nějaké proměnné. Mathematica umožňuje „drag and drop“ a obrázek tak lze do notebooku vložit čistě tak, že ho uživatel myší přetáhne z daného souboru přímo do okna editoru.

Dodatečnou funkcionalitu lze do Mathematicy doplnit různými způsoby. Lze nahrát do aktuálního běhu jádra balík s kódem, lze k samotnému jádru připojit dynamické knihovny pomocí sady funkcí LibraryLink[42], lze ale též instalovat externí aplikace, které s jádrem komunikují protokolem WSTP. Dále je podporováno vkládání kódu v jiných jazycích přímo do notebooku[43]. Takto lze například do speciální buňky vložit kód v Pythonu. Při vyhodnocení buňky je tento kód zpracován externím programem, v tomto případě výpočetním jádrem Pythonu, a výsledek je navrácen do notebooku už jako výraz interpretovaný v jazyce Wolfram Language[44][pozn. 6].

Vyhodnocování kódu

Kód lze vyhodnocovat po jednotlivých buňkách. Stisknutím kláves⇧ Shift +↵ Enter je kód z dané buňky zaslán do výpočetního jádra[16]. Výsledek je pak vepsán pod danou buňku. Alternativně lze kód nahradit jeho výsledkem v dané buňce, což je označováno jako evaluate in place[45] a provede se klávesamiCTRL +⇧ Shift +↵ Enter. Trvá-li výpočet dané buňky dlouhou dobu a uživatel potřebuje v mezičase vyhodnotit nějaký jiný krátký úsek kódu, lze toto provést vybráním daného kódu a stisknutím klávesyF7, čímž se na chvíli přeruší probíhající výpočet a jádro spočte daný úsek kódu. Po navrácení výsledku se jádro automaticky vrátí k původnímu výpočtu. Tento druh vyhodnocení kódu se nazývá evaluate in subsession[46]. Výpočet lze též předčasně ukončit či přerušit. V případě dlouhých notebooků s mnoha buňkami umožňuje editor najít právě vyhodnocovanou buňku.

Někdy může provádění dynamických výrazů neúnosně zatěžovat jádro, což může vést k zamrzání front endu. V takových případech lze vypnout vyhodnocování dynamických prvků v notebooku[47]. Notebook obsahuje nejen vstupní kód, ale vypisují se do něj i odpovídající výsledky výpočtu jako jsou čísla, seznamy či obrázky. Velikost souboru s kódem tak může tímto způsobem značně vzrůst a klást tak větší nároky na pamět. Editor tak umožňuje smazat naráz veškerý výstup všech buněk v notebooku[48]. Pokud je naopak žádoucí, aby byl daný kus kódu či výsledek v notebooku uložen, lze tento zabalit do výrazu Iconize, což lze provést i klávesovou zkratkou[49].

Z nabídek editoru lze konfigurovat výpočetní jádro[50] a v případě potřeby ho vypnout či zapnout bez nutnosti zavření okna notebooku. Lze nastavit, jaké jádro se má pro daný notebook použít, protože jedno jádro může například obsluhovat několik různých notebooků a definice provedené v jednom notebooku se tak projeví v notebooku druhém. Pro oddělení funkčnosti obou notebooků lze buď každému nastavit jiné jádro, anebo lze místo toho každému notebooku přiřadit unikátní jmenný prostor (v Mathematice označovaný jako kontext, angl. context) tak, že symbol definovaný v daném notebooku je automaticky kvalifikován odpovídajícím kontextem. V případě paralelizovaných výpočtů pak lze nastavit způsob, jakým mají být paralelní jádra použita, a lze sledovat jejich aktuální činnost a zátěž[51].

Formátování kódu

Ve výchozím nastavení umožňuje Mathematica uživateli nastavit vzhled různých částí uživatelského prostředí tak, že informace o tomto vzhledu je uložena přímo do souboru obsahujícího zdrojový kód. Hranice mezi specifikací vzhledu a zdrojovým kódem je navíc tenká, protože zdrojový kód samotný může tyto nízkoúrovňové specifikace měnit[13][52]. Vzhled lze buď měnit globálně pro všechny buňky daného typu pomocí stylopisů uvedených ve volbě StyleDefinitions[53][54], anebo lokálně na úrovni buněk či jednotlivých částí kódu. Takto lze měnit například barvu, velikost či řez písma, barvu pozadí buňky či její ohraničení, atd.

Dále umožňuje Mathematica zobrazovat buď zdrojový kód nebo jeho výstup různým způsobem pomocí příkazů jako TraditionalForm, StandardForm, OutputForm, a další[55]. Tak například InputForm odpovídá klasickému formátování zdrojového kódu známého z dalších jazyků, StandardForm je běžně určen pro vykreslování výstupů způsobem připomínající matematickou notaci. Pro zobrazení výrazu způsobem totožným matematické notaci lze použít TraditionalForm. Výsledek připomíná výstup systémů pro sazbu matematiky jako LaTeX, není již ale nutně jednoznačně interpretovatelný nazpět do zdrojového kódu. Pro zobrazení výsledků způsobem známým z příkazové řádky lze použít OutputForm. Formátování daných symbolů lze navíc definovat či změnit uživatelem pomocí funkcí Format či MakeBoxes[56][pozn. 7].

Grafika se vykresluje ve výchozím nastavením ve formátu StandardForm, čímž se v pracovním okně skutečně zobrazí odpovídající obrázek či grafická scéna. Zavoláme-li ovšem na tutéž grafiku funkci InputForm, obdržíme zdrojový kód, který tuto grafiku generuje. Podobně, máme-li kód odpovídající matematické operaci, řekněme třeba integrál funkce f od meze a do meze b, je jeho formát InputForm tvaru Integrate[f[x], {x,a,b}]. Pokud tento výraz ale pošleme do funkce TraditionalForm, obdržíme výraz vysázený v matematické notaci podobný tvaru .

Interakce

Příklad uživatelského interaktivního prvku s posuvníky, jenž byl vygenerován z kódu vepsaného nad ním.

Mathematica nabízí velkou míru interaktivity s uživatelem. Kromě práce s grafikou, jež je rozvedena v oddíle níže, lze přehrávat zvuk a video přímo z notebooku. Je podporováno i nahrávání zvuku pomocí mikrofonu, nahrávání videa z webkamery či snímání obrazovky — screenshoty a screencasty. Uživatel sám může programově vytvářet interaktivní objekty podobné widgetům či Java appletům, kde je při stisknutí tlačítka či tažení kontrolky dynamicky aktualizován obsah daného objektu. Na obrázku vpravo je příklad jednoho takového objektu vytvořeného pomocí kódu zabaleného do výrazu Manipulate[58][59]. Například pro vykreslení grafu sinusoidy o „frekvenci“ f lze zadat příkaz Plot[Sin[f x], {x, 0, 2 Pi}]. Výsledný graf je zcela statický, kde je nejprve nutno zadat hodnotu proměnné f. Pro jeho přetvoření do dynamicky se měnícího grafu reagujícího na vstup uživatele stačí zapsat Manipulate[Plot[Sin[f x], {x, 0, 2 Pi}], {f, 0, 10}]. Mathematica na základě tohoto kódu sama vybere odpovídající ovládací prvek (v tomto případě posuvník určující hodnotu proměnné f) a v notebooku vytvoří interaktivní applet. Ovládání kontrolek prostředí Manipulate se přitom neomezuje jen na myš či klávesnici. Toto prostředí podporuje i napojení dalších periferií jako třeba gamepadů[60][61].

Větší kontrolu nad dynamickými prvky umožňuje výraz Dynamic[62] a bloková struktura DynamicModule. Dynamické výrazy jsou v Mathematice obecně aktualizovány pouze tehdy, jsou-li viditelné na obrazovce počítače. Pokud je tedy notebook dostatečně dlouhý a uživatel sjede až na místo, kde už není daný prvek viditelný, jeho aktualizace se přeruší. Aktualizován je přitom veškerý kód, který je zabalen do výrazu Dynamic. Výpočetní systém si interně udržuje tabulku závislostí, aby věděl, jaká proměnná závisí dynamicky na jaké další proměnné[27]. Aby se předešlo kolizím při aktualizaci stejně pojmenovaných proměnných, lze použít lokalizaci blokovou strukturou DynamicModule[63]. Tento přístup je ale určen spíše pro pokročilé uživatele a začátečník si vystačí s příkazem Manipulate[64][pozn. 8].

Další způsob interakce představuje přístup do systému zpracovávajícího přirozený jazyk, čehož lze dosáhnout tak, že se kurzor nastaví na začátek řádku a poté je stisknuta klávesa pro rovnítko. Tím se aktivuje zadávací pole, do nějž lze psát dotazy v přirozené angličtině[66]. Výsledkem je pak v optimálním případě odpovídající kód v jazyce Wolfram Language. Pokud je rovnítko stisknuto na začátku řádky ne jednou, ale dvakrát, tak je výstupem na zadaný dotaz sada dat získaná ze systému Wolfram Alpha[67][pozn. 9]. Zpracování jednoduchých požadavků lze i uvnitř kódu a to stisknutím klávesové zkratkyCTRL +=, po jejímž zadání se na místo kurzoru vloží malé zadávací pole, do nějž lze opět vepisovat požadavky. Takto lze například elegantně vkládat fyzikální jednotky pomocí jejich zkratek, kdy Mathematica automaticky vygeneruje odpovídající výraz Quantity se správnou jednotkou[68].

Tvorba grafiky

Příklad 3D animace vytvořené v Mathematice.

Editor umožňuje pokročilou práci s 2D i 3D grafikou, a to jak vektorovou, tak rastrovou. Trojrozměrná grafika, a to jak vektorová představovaná výrazem Graphics3D, tak rastrová představovaná výrazem Image3D, podporuje základní interakci s uživatelem. Lze jí tak pomocí kurzoru s případným stiskem dodatečné klávesy otáčet, přibližovat, oddalovat, případně jí posouvat střed scény[69][70]. Podobně lze 2D grafiku interaktivně zvětšovat, zmenšovat či měnit její okraje[71]. Dvourozměrná grafika nabízí dodatečnou funkčnost[72]. Do rasterové verze, představované výrazem Image, lze vykreslovat grafická primitiva, které mohou posléze sloužit jako maska, jíž se vybere jen část obrázku, na níž lze následně uplatnit některou z grafických funkcí ve Wolfram Language. Vektorová verze, představovaná výrazem Graphics, pak umožňuje plnohodnotné kreslení s jednoduchým rozhraním známým z grafických programů[73].

2D vektorovou grafiku lze vytvářet dvěma způsoby a to buď skriptováním, kde daný kód ve Wolfram Language vygeneruje odpovídající grafiku[74][75], anebo přímo kreslením kurzorem pomocí různých kreslicích nástrojů. Při manuálním kreslení je nejprve nutné vyvolat plátno, a to buď klávesovou zkratkou, zapsáním odpovídajícího výrazu či vyvoláním z nabídky programu. Do plátna se posléze kreslí kurzorem. Do verze 12.1 se nejprve otevřela prázdná grafika představovaná výrazem Graphics a dané kreslicí nástroje se vybíraly s palety kreslicích nástrojů. Od verze 12.2 se nejprve otevře prázdné plátno představované výrazem Canvas a dané nástroje jsou přístupné z nabídek pod plátnem. Dané grafické primitivy jako kružnice, mnohoúhelníky, obdélníky, text apod. lze následně přesouvat, otáčet, seskupovat či pozměňovat[76][77]. Skupinu objektů lze kromě zarovnávání i rovnoměrně rozesadit a to jak ve vodorovném tak i svislém směru. Daný grafický objekt lze dále přesouvat více do pozadí či naopak do popředí. Pro grafické primitivy existují klávesové zkratky, což zjednodušuje samotné kreslení.

Primárním účelem mnoha příkazů je vykreslování grafů matematických funkcí a dat. Barevnou škálu použitou pro vykreslení grafů lze mimo jiné vybrat pomocí odpovídající palety. Odlišnou paletu lze použít v případě sloupcových a podobných grafů. Wolfram Language prostřednictvím Mathematicy ale podporuje i mnoho grafických primitivů a dodatečných funkcí, které přímo s vykreslováním matematických funkcí nesouvisejí. Lze tak vytvářet 2D obrázky či 3D animace. Ve verzi 13 byly možnosti 3D vektorové grafiky dále rozšířeny o pokročilejší a realističtější renderování v čele s výrazem MaterialShading[78][pozn. 10]. Pro ilustraci je na obrázku napravo příklad 3D grafiky a níže jemu odpovídající kód ve Wolfram Language, který tento obrázek vygeneroval:

Zátiší vytvořené v Mathematice pomocí kódu vypsaného nalevo v hlavním textu.
svetla = {DirectionalLight[Yellow, {{0,-1,0}, {0,0,0}}], PointLight[Yellow, {-1.2,.2,.2}, {0,0,5}]};

drevo = ImageMultiply[ExampleData[{"Texture", "Bark"}], Brown];
deska = {MaterialShading[<|"BaseColor"->Texture[drevo]|>], Cuboid[-1/2{1,1,.1}, 1/2{1,1,.1}]};
noha  = Translate[Scale[deska, {.2,.2,10}], {.2,-.2,-.5}];

ubrus   = {MaterialShading[{"Satin",Red}], Polygon[1/2{{.8,1,.11}, {-1,1,.11}, {-1,-1,.11}, {.3,-1,.11}}]};
zraseni = Plot3D[.01 Sin[6\[Pi] x] Log[1+5 y], {x,0,1}, {y,0,1}, PlotStyle->MaterialShading[{"Satin",Red}], Mesh->None, Lighting->svetla];
zraseni = First@Cases[InputForm[zraseni], _GraphicsComplex, Infinity, 1];
zraseni = Rotate[Translate[zraseni, {-.5,-.5,0}], -\[Pi]/2, {1,0,0}, {-.5,-.5,0}];
zraseni = Translate[Scale[zraseni, {.65,1,1}, {-.5,-.5,0}], {0,-.01,.06}];

vazafun = Interpolation[BSplineFunction[{{0,.5}, {1,1.5}, {2,.1}, {2.3,.1}, {3,.7}}] /@ Range[0, 1, .1]];
vaza = RevolutionPlot3D[vazafun[x], {x,0,3}, RevolutionAxis->{1,0,0}, PlotStyle->{Thickness[.2], MaterialShading["Gold"]}, Mesh->False, Lighting->svetla];
vaza = First@Cases[InputForm[vaza], _GraphicsComplex, Infinity, 1];
vaza = Translate[Rotate[Scale[vaza, .2, {0,0,0}], -\[Pi]/2, {0,1,0}], {.1,.1,.06}];

zatisi = Graphics3D[{EdgeForm[], deska, noha, zraseni, ubrus, vaza}, Lighting->svetla, Boxed->False];
zatisi = Graphics[{RadialGradientFilling[{Darker@Orange, Black}, ImageScaled[{.5,.7}]], Rectangle[-{1,1}, {1,1}], Inset[zatisi, {0,0}, ImageScaled[{.5,.5}], 2.1]}, PlotRange->{{-.8,.8}, {-.7,1}}]

Tvorba psaných dokumentů

Prostředí notebooků lze využít nejen pro vývoj kódu, ale i pro tvorbu psaných dokumentů[pozn. 11]. Editor umožňuje členit text do kapitol, sekcí apod. s odpovídajícími nadpisy, viz též oddíl „Strukturování kódu“. Do textu lze vkládat obrázky, úryvky kódu, odrážky, číslované seznamy, vodorovné čáry jako předěly, citace, číslované rovnice atd. Je podporována kontrola pravopisu v angličtině a pro potřeby psaní textu je k dispozici několik dodatečných nástrojových lišt, které např. mohou zobrazit pravítka na okraj okna editoru či měnit formát textu. Uživatel má mnoho možností, jak uzpůsobit vzhled a chování různých částí textu. Lze nastavit font písma, stejně jako jeho řez, velikost či barvu. Podobně jako v textových procesorech typu Microsoft Word lze nastavit zarovnání textu, barvu pozadí, šířku stránky či styl odrážek. Sady stylů pro různé úrovně textu lze sdružovat do stylopisů (angl. stylesheets)[53]. Místo nastavování jednotlivých stylů tak lze jednoduše například propojit daný notebook se souborem, který obsahuje celou sadu k sobě ladících stylů. Stylopis pro daný notebook lze vyvolat a upravovat z okna editoru. Formátování konkrétní části textu lze i manuálně smazat.

Tvorba prezentací

V Mathematice lze vytvářet i prezentace[82] připomínající ty z programu PowerPoint, kde je obsah daného notebooku rozdělen do stránek, mezi kterými lze přecházet pomocí tlačítek na dodatečné nástrojové liště. Výhodou těchto prezentací je to, že mohou obsahovat kód, který se naživo vyhodnocuje. Prezentace tak může obsahovat interaktivní prvky. Pro usnadnění tvorby prezentací je v Mathematice dostupná odpovídající paleta nástrojů. Příklady prezentací vytvořených v Mathematice lze nalézt například na oficiálních stránkách vývojáře[83].

Komunikace

Daný notebook lze uložit do mnoha dalších formátů jako např. PDF pro snazší komunikaci výpočtů, textu a kódu i s lidmi, kteří Mathematicou nedisponují. Notebook lze i přímo vytisknout, či zaslat celý či jen jeho část přímo z editoru na zadaný email. Při práci více uživatelů na jednom projektu lze využít chatu, který je součástí Mathematicy[84]. Některá funkčnost je přístupná jen tehdy, je-li uživatel registrován u společnosti Wolram Research. Důležitým příkladem jsou v tomto ohledu cloudové služby. Lokální objekty lze přímo z notebooku poslat na cloud a zpřístupnit dalším uživatelům[85]. Lze též v samostatném okně sledovat aktivitu přístupu Mathematicy ke cloudu. Mnoho funkcí v Mathematice využívá dat, která je nejprve nutno stáhnout z internetu, příkladem budiž např. mapové podklady pro funkci GeoGraphics. Připojení k internetu je tedy v těchto případech nutností, lze ho však vypnout[86].

Nízkoúrovňová reprezentace výrazů v buňkách může být velmi komplikovaná a při kopírování části kódu do externí aplikace jako třeba textového editoru tak překopírovaný výraz nemusí být totožný s tím, o kterém se uživatel domnívá, že z notebooku zkopíroval. Z tohoto důvodu umožňuje Mathematica kopírovat daný kód či prvek z notebooku různými způsoby. Lze kopírovat výraz jako čistý text, jako vzorec v jazyce TeX či reprezentaci MathML. Lze též daný výraz přetvořit na bitmapový obrázek a tento uložit či vložit do jiné aplikace.

Struktura souborů

Ve výchozím nastavení je zdrojový kód jazyka Wolfram Language ukládán v textovém souboru s příponou .nb. Tento typ souboru podporuje vykreslování grafiky, interaktivní prvky či pokročilé uzpůsobení vzhledu pomocí stylopisů. Tato funkcionalita umožňuje uživateli flexibilní práci s daty a kódem, na druhou stranu si však vynucuje mnoho dodatečného kódu, který sice není uživateli přímo přístupný, je ale obsažen ve výsledném souboru. Pokud je cílem uživatele čistě práce s kódem způsobem známým z ostatních programovacích jazyků, je vhodnější ukládat kód do balíčkových souborů s příponou .wl (v dřívějších verzích .m). Tyto textové soubory ukládají jen samotný zdrojový kód a nezbytné formátovací údaje. Další možností je ukládat zdrojový kód do souborů s příponou .wls, jejímž účelem je působit jako skripty prováděné bez zásahu uživatele programem wolframscript.

Notebook jako výraz

Podobně jako jiné konstrukty ve Wolfram Language lze i samotný notebook vyjádřit jako výraz. A sice jako výraz s hlavičkou Notebook[87], který ve svém těle sdružuje veškerý kód. Pro ilustraci vezměme formátovaný podbarvený kód ve stylu notebooku ze sekce „Strukturování kódu“. Tento notebook lze ve Wolfram Language programově zapsat jako výraz ve tvaru:

Notebook[{

Cell["Toto je titul", "Title"],

Cell["První sekce", "Section"],
Cell["Spočti výsledek následujícího výrazu:", "Text", CellFrame->True],
Cell[BoxData[FractionBox["12", "3"]], "Input", InitializationCell->True],

Cell["Další sekce", "Section"],
Cell["a = 2", "Input"]

}]

Kód je rozdělen do buněk, kde každá buňka může mít různé vlastnosti a vzhled v závislosti na svém typu. První buňka má jako druhý parametr "Title", což označuje titul. Buňka druhá má namísto toho "Section", což označuje sekci. Následující, textová, buňka má jednak druhý parametr "Text", jednak má dodatečnou volbu CellFrame->True, čímž se dává na srozuměnou, že daná buňka má mít kolem sebe vykreslený rámeček. Buňka se zlomkem je typu "Input", tedy vstupní kód, s dodatečnou volbou InitializationCell->True, což jí nastavuje jako inicializační buňku. Samotný obsah této buňky je navíc obalen do výrazu BoxData, který umožňuje pokročilejší formátování. Výraz FractionBox umožňuje vykreslení zlomku způsobem známým z matematické notace.

Interní struktura notebooku

Pokud je výše uvedený výraz s hlavičkou Notebook vložen do nově otevřeného .nb souboru, je tento výraz vyhodnocen a editor do souboru vloží dodatečné údaje, které se uživateli nezobrazí. Jejich podobu lze však zjistit, otevřeme-li takový soubor v běžném textovém editoru jako Notepad či Gedit. Výsledný soubor obsahuje mnoho metadat vložených jako komentáře a samotný kód je dále rozšířen o další podrobnosti tak, že výše uvedený kód je po vyhodnocení přetvořen zhruba do následujícího tvaru:

Notebook[{

Cell[CellGroupData[{
Cell["Toto je titul", "Title"],

Cell[CellGroupData[{
Cell["Prvn\[IAcute] sekce", "Section"],

Cell["Spo\[CHacek]ti v\[YAcute]sledek n\[AAcute]sleduj\[IAcute]c\[IAcute]ho v\[YAcute]razu:", "Text", CellFrame->True],
Cell[CellGroupData[{
Cell[BoxData[FractionBox["12", "3"]], "Input", InitializationCell->True, CellLabel->"In[1]:="],
Cell[BoxData["4"], "Output", CellLabel->"Out[1]="]
}, Open  ]]

}, Open  ]],

Cell[CellGroupData[{
Cell["Dal\[SHacek]\[IAcute] sekce", "Section"],

Cell[CellGroupData[{
Cell[BoxData[RowBox[{"a", "=", "2"}]], "Input", CellLabel->"In[2]:="],
Cell[BoxData["2"], "Output", CellLabel->"Out[2]="]
}, Open  ]]

}, Open  ]]
}, Open  ]]
},
StyleDefinitions->"Default.nb"
]

kde v každé buňce byly pro zvýšení přehlednosti vynechány volby CellChangeTimes a ExpressionUUID, a podobně na konci výrazu Notebook byly vynechány dodatečné volby jako WindowSize. Mathematica do kódu dodala informace o hierarchickém seskupení buněk pomocí výrazu CellGroupData, kde parametr Open značí, že je daná buňka otevřená. Vstupní data jsou nyní uvozena volbou CellLabel->"In[1]:=" atd. a dále přibyly výsledky vyhodnocení vstupního kódu v buňkách typu "Output", které navíc obsahují volbu CellLabel->"Out[1]=" atd. Všechny znaky s diakritikou jsou nahrazeny svými názvy ve Wolfram Language — např. "í" je změněno na \[IAcute] — a vstupní kód ve druhé kapitole "a = 2" je rozparseován do nízkoúrovňového výrazu BoxData[RowBox[{"a", "=", "2"}]]. V neposlední řadě byla na konec výrazu Notebook dodána volba StyleDefinitions->"Default.nb", která specikuje daný stylopis, podle něhož se mají vykreslovat jednotlivé typy buněk.

Interní struktura balíku

Jak vidno, takto upravený kód uchovávaný v souborech typu .nb obsahuje značné množství údajů, které nejsou nezbytné pro chod samotného zdrojového kódu. Pro přimou práci s kódem je tak vhodnější používat soubory typu .wl, které uchovávají jen nezbytné informace. Výše uvedený výraz Notebook s veškerým obsahem je při uložení jako .wl soubor přetvořen do následujícího tvaru:

(* ::Package:: *)

(* ::Title:: *)
(*Toto je titul*)

(* ::Section:: *)
(*Prvn\[IAcute] sekce*)

(* ::Text:: *)
(*Spo\[CHacek]ti v\[YAcute]sledek n\[AAcute]sleduj\[IAcute]c\[IAcute]ho v\[YAcute]razu:*)

(* ::Input::Initialization:: *)
12/3

(* ::Section:: *)
(*Dal\[SHacek]\[IAcute] sekce*)

(* ::Input:: *)
(*a=2*)

Téměř veškerý kód, až na původně inicializační buňky, je vložen do komentáře. Typ každé buňky je vypsán před její obsah a obložen dvojitými dvojtečkami ::, přičemž pro inicializační buňky je dodán text ::Initialization::. Dále jsou vymazány výstupní buňky a veškeré formátování, jako např. to pro zlomek v první sekci, který je nyní vypsán na jednom řádku doslova jako 12/3.

Na závěr uveďme, že pokud místo .wl použijeme příponu .wls určenou pro wolframscript, je výsledný soubor shodný s tím výše až na to, že na první řádek je přidána shebang formule #!/usr/bin/env wolframscript, která je využívána UNIXovými operačními systémy.

Odkazy

Poznámky

  1. Využít výpočetní jádro Mathematicy lze i z Jupyter notebooků, open sourcové technologie původně inspirované Mathematicou. Kromě oficiálního projektu[10] existují i iniciativy programátorských nadšenců[25][26] s různou mírou podpory vykreslování a interakce.
  2. Pokud ovšem dopředu nestanoví uživatel jinak. Omezit délku vyhodnocování lze např. funkcí TimeConstrained.
  3. Symboly In a Out se chovají jako indexovaná proměnná, kde Out[n] obsahuje výsledek n-té vstupní buňky a In[n] obdobně obsahuje odpovídající vstupní kód.
  4. Tvorba dokumentace byla do verze 13 možná pouze s použitím Wolfram Workbench.
  5. Výsledný vzorec ale není přímo interpretován do jazyka Wolfram Language a slouží spíše jen jako statický výpis matematického vzorce.
  6. V případě složitějších výstupních hodnot je do notebooku vrácen symbolický výraz, který reprezentuje odpovídající objekt v Pythonu.
  7. Možnosti formátování pak dále rozšiřuje balík Notation[57], který lze vyvolat příkazem Needs["Notation`"].
  8. Na oficiálních stránkách[65] je udržována kolekce interaktivních prostředí vytvořených pomocí výrazu Manipulate, do které přispívají jednotliví uživatelé.
  9. Pro programový přístup k datům lze užít funkce WolframAlpha.
  10. Přesto Mathematica nepodporuje metodu sledování paprsku, základní renderování využívá Phongova modelu.
  11. Příklady volně dostupných knih napsaných v Mathematice lze nalézt například na [79] či [80]. Součástí Mathematicy je i balík AuthorTools[81] poskytující rozšířenou funkčnost. Viz též oddíl "Externí odkazy" níže.

Reference

  1. Mathematica Turns 20 Today—Wolfram Blog. blog.wolfram.com [online]. [cit. 2022-10-17]. Dostupné online. (anglicky) 
  2. Steve Jobs: A Few Memories—Stephen Wolfram Writings. writings.stephenwolfram.com [online]. [cit. 2022-10-05]. Dostupné online. (anglicky) 
  3. Something Very Big Is Coming: Our Most Important Technology Project Yet—Stephen Wolfram Writings. writings.stephenwolfram.com [online]. [cit. 2022-10-05]. Dostupné online. (anglicky) 
  4. Compare/contrast Wolfram|One, Development Platform, Mathematica Online, etc - Online Technical Discussion Groups—Wolfram Community. community.wolfram.com [online]. [cit. 2022-10-17]. Dostupné online. (anglicky) 
  5. What's the difference: Wolfram One vs Wolfram Development Platform? - Online Technical Discussion Groups—Wolfram Community. community.wolfram.com [online]. [cit. 2022-10-17]. Dostupné online. (anglicky) 
  6. Wolfram|One: Cloud-Desktop Computation Platform. www.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. (anglicky) 
  7. GUSTAVO, Michael Freitas; TÓTH, János. Comparing Computational Speed of MATLAB and Mathematica Across a Set of Benchmark Number Crunching Problems. Annales Universitatis Scientiarum Budapestinensis [online]. Eötvös L. University, 2019-07-21 [cit. 2022-10-08]. Dostupné online. 
  8. SOMERS, James. The Scientific Paper Is Obsolete. The Atlantic [online]. 2018-04-05 [cit. 2022-09-17]. Dostupné online. (anglicky) 
  9. HORTON, William. A Brief History of Jupyter Notebooks. av.tib.eu [online]. [cit. 2022-09-18]. Dostupné online. (anglicky) 
  10. a b Wolfram Language kernel for Jupyter notebooks. github.com [online]. 2022-10-05 [cit. 2022-10-05]. Original-date: 2019-01-18T19:37:06Z. Dostupné online. 
  11. a b Input and Output in Notebooks—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 
  12. ScreenStyleEnvironment—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 
  13. a b c Manipulating Notebooks—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. 
  14. Programmatic Notebook & Interface Customization—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. 
  15. Front End Tokens—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 
  16. a b Using a Notebook Interface—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-18]. Dostupné online. 
  17. Touch Press: The Second Book—Stephen Wolfram Writings. writings.stephenwolfram.com [online]. [cit. 2022-10-17]. Dostupné online. (anglicky) 
  18. a b front end - What is the FrontEnd?. Mathematica Stack Exchange [online]. [cit. 2022-10-18]. Dostupné online. (anglicky) 
  19. Special Types of Notebooks—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 
  20. WSTP: Wolfram Symbolic Transfer Protocol. www.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. (anglicky) 
  21. Global Aspects of Wolfram System Sessions—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. 
  22. J/Link User Guide—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-09-21]. Dostupné online. 
  23. RLink—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-09-21]. Dostupné online. 
  24. .NET/Link User Guide—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-09-21]. Dostupné online. 
  25. JWLS. github.com [online]. 2021-05-14 [cit. 2022-10-08]. Original-date: 2019-02-01T17:23:36Z. Dostupné online. 
  26. IWolfram. github.com [online]. 2022-07-20 [cit. 2022-10-08]. Original-date: 2016-09-20T18:50:38Z. Dostupné online. 
  27. a b Advanced Dynamic Functionality—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. 
  28. Cell > Cell Properties—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 
  29. Cell > Cell Properties > Initialization Cell—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 
  30. Notebooks as Documents—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 
  31. Identify Different Cell Brackets—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-16]. Dostupné online. 
  32. Notebook History Dialog—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  33. CellTags—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  34. Evaluation > Analyze Cells—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  35. Documentation Tools Quick Start—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  36. Write Unit Tests—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  37. Format > Option Inspector...—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. 
  38. Set Detailed Properties of a Notebook—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-08]. Dostupné online. 
  39. Two-Dimensional Expression Input—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  40. Mathematical Typesetting—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  41. Mathematical and Other Notation—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  42. Wolfram LibraryLink User Guide—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-14]. Dostupné online. 
  43. ExternalEvaluate—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  44. Connecting to External Software—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  45. Evaluate an Expression in Place—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  46. Evaluation > Evaluate in Subsession—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  47. Evaluation > Dynamic Updating Enabled—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  48. Remove All Output from a Notebook—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  49. Shorten Long Inputs with Iconize—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  50. Evaluation > Kernel Configuration Options...—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  51. Evaluation > Parallel Kernel Status...—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  52. Apply a Function to Cells in a Notebook—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-26]. Dostupné online. 
  53. a b Stylesheets—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  54. Working with Stylesheets—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  55. Textual Input and Output—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  56. Defining Custom Notation—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  57. Notation Package—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  58. Build a Manipulate—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  59. Introduction to Manipulate—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  60. Control Interactive Content with a Gamepad—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  61. ControllerManipulate—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  62. Introduction to Dynamic—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  63. DynamicModule Scoping—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  64. Use the Manipulate Interface—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  65. Wolfram Demonstrations Project. demonstrations.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. (anglicky) 
  66. Enter Free-Form Input—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  67. Use Wolfram|Alpha inside a Notebook—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  68. Units & Quantities—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  69. Interacting with 3D Graphics—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  70. Interactive 3D Control—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  71. Resizing, Cropping, and Adding Margins to Graphics—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  72. Editing Wolfram Language Graphics Overview—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  73. Drawing Tools—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  74. Symbolic Graphics Language—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  75. The Structure of Graphics and Sound—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  76. Introduction to Editing Wolfram Language Graphics—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  77. Reshaping Graphics Objects—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  78. Physically Based Rendering—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  79. Mathematica programming - an advanced introduction. www.mathprogramming-intro.org [online]. [cit. 2022-10-19]. Dostupné online. 
  80. Notebook Archive—Books And Supplements. notebookarchive.org [online]. [cit. 2022-10-20]. Dostupné online. 
  81. AuthorTools—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  82. Create a Slide Show Presentation—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  83. Notebook Archive—Wolfram Technology Conference 2020. notebookarchive.org [online]. [cit. 2022-10-20]. Dostupné online. 
  84. Using Chat—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  85. Cloud Functions & Deployment—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  86. Wolfram System Internet Connectivity—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-20]. Dostupné online. 
  87. Notebook—Wolfram Language Documentation. reference.wolfram.com [online]. [cit. 2022-10-21]. Dostupné online. 

Literatura

  • ABELL, Martha L. Mathematica by example. Fifth edition. vyd. London, United Kingdom: [s.n.] 1 online resource s. Dostupné online. ISBN 978-0-12-812482-6, ISBN 0-12-812482-2. OCLC 991595787 
  • HASTINGS, Cliff. Hands-on start to Wolfram Mathematica and programming with the Wolfram language. Third edition. vyd. Champaign: [s.n.] ix, 561 pages s. Dostupné online. ISBN 978-1-57955-037-0, ISBN 1-57955-037-1. OCLC 1203143322 
  • WELLIN, Paul R. Essentials of programming in Mathematica®. Cambridge: [s.n.] 1 online resource (xvi, 422 pages) s. Dostupné online. ISBN 978-1-316-33773-8, ISBN 1-316-33773-1. OCLC 944303026 
  • MANGANO, Sal. Mathematica cookbook. 1st ed. vyd. Sebastopol, Calif.: O'Reilly 1 online resource (xxiv, 800 pages) s. Dostupné online. ISBN 978-1-4493-8200-1, ISBN 1-4493-8200-2. OCLC 619242859 
  • NAPOLITANO, Jim. A Mathematica primer for physicists. First edition. vyd. Boca Raton, FL: [s.n.] 1 online resource (xiv, 215 pages) s. Dostupné online. ISBN 978-1-315-26948-1, ISBN 1-315-26948-1. OCLC 1023837660 

Související články

Externí odkazy

Média použitá na této stránce

Mathematica Logo.svg
Mathematica Logo
Mathematica logistic bifurcation.png
Autor: HolyCookie, Licence: CC0
The image shows the Mathematica 8.0.0 (GNU/Linux) frontend, in which the bifurcation diagram of the logistic map is calculated.
3D Pressure (Longitudinal) Wave.gif
Autor: Ibrahim S. Souki, Licence: CC BY-SA 4.0
The simulated effect of a three dimensional pressure wave, produced by a point source emitter, on a random distribution of "point particles". This simulation was created using Mathematica 8.0.4.0 on Mac OS X.
Mathematica dinis surface.png
Autor: Quchen, Licence: CC0
Dini's surface with adjustable parameters, created with Mathematica 8.0.0/Linux.
Still life in Mathematica.png
Autor: JozumBjada, Licence: CC BY-SA 4.0
Příklad 3D grafiky vytvořené krátkým skriptem napsaným ve Wolfram Language a renderované v Mathematice.