Základy práce se systémem Mathematica

Zdeněk Buk

Katedra počítačů, FEL, ČVUT v Praze
bukz1@fel.cvut.cz
http://cig.felk.cvut.cz

ELKAN, spol. s r.o.

Certifikovaný distributor produktů Wolfram Research Inc.
vzak@elkan.cz
http://www.mathematica.cz

Úvod   Základní pojmy, prostředí

Kernel, FrontEnd

Notebook

Buňka

vstupní, výstupní, textová, grafická, atd.

hierarchické členění dokumentu

Ukázka:

Nadpis kapitoly

Zde je text kapitoly...

Podkapitola

Toto je ukázkový text ukázkové podkapitoly ukázkové kapitoly ukázkového dokumentu.

f(x)=(1/(1+(e^(-λx))))

Do technického textu se často hodí vkládat různé vzorce, výše uvedený je ukázkou císlovaného matematického výrazu. Text a ostatní prvky dokumentu lze neomezeně kombinovat a hierarchicky členit,  lze ho samozřejmě prokládat také výpočty :

Solve[a x^2+b x+c==0,x]

Expand[(a+b)^2]

Ukázka jednoduché vizualizace :

Plot[{x,x^2,x^3},{x,-1,1},PlotStyle->Thick]

Druhá podkapitola

Toto je text druhé podkapitoly pro ukázku hierarchického členění dokumentu. Text lze prokládat výpočty a grafy, ale tyto nemusí být pouze statické. Lze vytvářet plně interaktivní dokumenty...

Manipulate[Plot[{Sin[x],Sin[a x+b]},{x, 0,2π},PlotStyle->Thick],{{a,1,"Frekvence"},1,8},{{b,0,"Fáze"},0,2π}]

Úvod   Ovládání

Základní dva typy buněk jsou "vstupní" (input) a "výstupní" (output). Vstupní buňky obsahují uživatelem zadané (vyhodnotitelné) příkazy - tyto se vyhodnotí stiskem Shift+Enter (nebo samotný Enter na numericke klávesnici). Výsledek vyhodnocení se zobrazí v následující výstupní buňce, viz příklad:

1+1

Do kódu (příkazu) je možné vkádat komentář pomocí "(*" a "*)".

1+1 (* Velmi jednoduchý příklad pro začátek *)

Úvod   Syntaxe

( )

Základní matematické výrazy mají klasickou syntaxi (+ - * /), závorky se píší stejně jako v matematice - "()". Priority operátorů jsou interpretovány správně, tak jak jsme z matematiky zvyklí.

3+4/2

V jedné vstupní buňce je možné kombinovat více příkazů, ty se oddělí koncem řádku.

4/2
(5+7)/3

%

Lze se také odkazovat na předchozí výsledek pomocí znaku "%".

1+1

%*5

%+1

[ ]

Argumenty funkcí se zapisují do hranatých závorek "[ ]". Mathematica je case-sensitive systém a všechny vestavěné funkce začínají velkým písmenem (to ulehčuje odlišení vlastních funkcí od vestavěných).

Sin[3.14]

Veškeré výpočty probíhají (implicitně) v absolutní přesnosti - to znamená, že všechny výsledky jsou zcela přesné (neřekneme-li jinak).

Sin[Pi/3]

Funkcí "N" můžeme každý výraz převést do číselného vyjádření (za cenu ztráty přesnosti).

N[Sin[Pi/3]]

Je možné zadat počet desetinných míst.

500!

N[Pi,1000]

//

Často používaný je postfixový zápis.

Sin[Pi/3]//N

Cokoliv je možné ukládat do proměnných ...

x=Pi/3

Sin[x]

;

Pomocí znaku středník ";" je možné potlačit výstup příkazu.

x=Pi/3; (* Přiřazení, bez výpisu na obrazovku *)

Sin[x]

{ }

Další důležitou strukturou jsou seznamy ...
Zadávají se do složených závorek "{}" a mohou mít zcela libovolnou strukturu (seznam seznamů apod.)

{1,2,3,4}

{{1,2,3},{4,5,6}}

MatrixForm[{{1,2,3},{4,5,6}}]

Na seznamy je možné aplikovat různé funkce ...

seznam={Pi/4,Pi/3,Pi/2,Pi}

Sin[seznam]

[[ ]] , [[ ]]

Vybírání prvků ze seznamu (indexace) se provádí pomocí dvojitých složených závorek "[[" a "]]".

seznam[[1]]

Osnova   Jednotlivá témata

Výpočty

Numerické výpočty

Symbolické výpočty

Definice vlastních funkcí

Grafika

Vizualizace funkcí, 2D, 3D

Parametrické grafy

Nastavení zobrazení/grafů

Výpočty   Numerické

245124221

Sqrt[2/4]

3443^32423

(2342^234234)

(Sqrt[43243(44/33)])

(Sqrt[(2/4)])

Sin[(π/3)]

Sin[(π/3)]//N

10!

200!

Sin[π+I]

Clear[x]

Solve[(x^2)-3x+2==0,x]

NSolve[(x^5)-3x-1==0,x]

Reduce[Abs[z]-z==1+2I,z]

ln[x_]:=Log[x]

p={#,0}&/@Cases[x/.%,_Real]

p2=Graphics[{PointSize[Large],Red,Point[#]}]&/@p;

Plot[(x^5)-3x-1,{x,-2,2}]

Show[%,p2]

Řešení soustavy rovnic - pomocí matic :

mat=(({{2.0, 3.1, -1.1}, {0.2, -0.29, 3.3}, {-1.5, 4.2, 4.7}}))
b={-1.0,2.2,0.5};

xvec=LinearSolve[mat,b]

Kontrola ...

mat.xvec

Plot[{Tan[x],x},{x,0,8},PlotStyle->Thick]

FindRoot[Tan[x]==x,{x,4}]

Reduce[x^2>3,x]

Reduce[x^2+1>0,x]

Reduce[x^2+1<0,x]

Výpočty   Symbolické

Stejný příklad jako v předchozí kapitole, tentokrát pomocí funkce solve :

Solve[{
2.0x+3.1y-1.1z==-1.0,
0.2x-0.29y+3.3z==2.2,
-1.5x+4.2y+4.7z==0.5
},{x,y,z}]

Řešení je symbolické, přidejme parametr 'a':

sol=Solve[{
2.0x+3.1y-1.1z==a,
0.2x-0.29y+3.3z==2.2,
-1.5x+4.2y+4.7z==0.5
},{x,y,z}]

Clear[b]

Expand[(((a+b))^5)]

Simplify[(a^5)+5 (a^4) b+10 (a^3) (b^2)+10 (a^2) (b^3)+5 a (b^4)+(b^5)]

Simplify[(a^5)+5 (a^4) b+10 (a^3) (b^2)+10 (a^2) (b^3)+5 a (b^4)+(b^5)]

Simplify[(a^5)+5 (a^4) b+10 (a^3) (b^2)+10 (a^2) (b^3)+5 a (b^4)+(b^5)]

Simplify[((Sin[a])^2)+((Cos[a])^2)]

Solve[a (x^2)+b x+c==0,x]

Clear[b]

Inverse[(({{a, b}, {c, d}}))]//TraditionalForm

Výpočty   Definice vlastních funkcí

f[x_]:=Sin[x]+Cos[x]^2

f[a]

f[0.5]

S vlastní definovanou funkcí můžeme samozřejmě provádět veškeré operace, jako s vestavěnými funkcemi ...

D[f[x],x]

Integrate[f[x],x]

Plot[f[x],{x,0,2π}]

g[x_,y_]:=Cos[(x^2)+(y^2)](E^((-(x^2)-(y^2))/3))

g[0.1,0.4]

Plot3D[g[x,y],{x,-π,π},{y,-π,π},PlotRange->All]

Grafika   Vizualizace funkcí, 2D, 3D, ...

Plot[(x^2)+Sin[5x],{x,-π,π}]

Plot[(x^2)+Sin[5x],{x,-π,π},PlotStyle->Thick]

Plot[(x^2)+Sin[5x],{x,-π,π},PlotStyle->{Thick,Red}]

Plot[{(x^2),Sin[5x],(x^2)+Sin[5x]},{x,-π,π},PlotStyle->{{Thick,Blue},{Thick,Green},{Thick,Red}}]

Plot[{(x^2),Sin[5x],(x^2)+Sin[5x]},{x,-π,π},PlotStyle->{{Thick,Blue},{Thick,Green},{Thick,Red}},AxesLabel->{"x","y"}]

Plot[{(x^2),Sin[5x],(x^2)+Sin[5x]},{x,-π,π},PlotStyle->{{Thick,Blue},{Thick,Green},{Thick,Red}},AxesLabel->{Style["x",Italic,22],Style["y",Italic,22]}]

Plot3D[(x^2)+Sin[5x+(y^2)],{x,-π,π},{y,-π,π}]

ContourPlot[(x^2)+Sin[5x+(y^2)],{x,-π,π},{y,-π,π}]

DensityPlot[(x^2)+Sin[5x+(y^2)],{x,-π,π},{y,-π,π}]

ParametricPlot[{Cos[u]/(u+1),Sin[u]/(u+1)},{u,π,4π},PlotStyle->Thick]

ParametricPlot3D[{Cos[u]/u,Sin[u]/u,u/400},{u,π,20π},PlotStyle->Thick]

Grafika   Nastavení zobrazení/grafů

f[x_]:=Sin[20x]*Sin[x]+Sin[2x]

Plot[f[x],{x,0,2π}]

Plot[f[x],{x,0,2π},PlotStyle->Thick]

Plot[f[x],{x,0,2π},PlotStyle->Thickness[0.015]]

Plot[f[x],{x,0,2π},PlotStyle->{Thick,Red}]

Plot[f[x],{x,0,2π},PlotStyle->{Thick,Red,Dashing[0.02]}]

Plot[f[x],{x,0,2π},PlotStyle->{Thick,Red,Dashing[{0.005,0.02}]}]

Plot[f[x],{x,0,2π},PlotStyle->Thick,AxesLabel->{"x","f(x)"}]

Plot[f[x],{x,0,2π},PlotStyle->Thick,AxesLabel->{Style["x",Bold,25],Style["f(x)",Bold,25]}]

Plot[f[x],{x,0,2π},PlotStyle->Thick,PlotLabel->Style["Popis grafu...",Italic,25,Red]]

Plot[f[x],{x,0,2π},PlotStyle->Thick,TicksStyle->Directive[Bold,Italic,20]]

Plot[f[x],{x,0,2π},PlotStyle->Thick,Filling->Axis]

Plot[{f[x],Sin[x]},{x,0,2π},PlotStyle->Thick,Filling->Axis]

Plot[{f[x],Sin[x]},{x,0,2π},PlotStyle->Thick,Filling->{1->{2},2->Axis}]

Plot[{f[x]},{x,0,2π},PlotStyle->Thick,Filling->Axis,FillingStyle->Orange]

Plot[{f[x]},{x,0,2π},PlotStyle->Thick,Filling->Axis,FillingStyle->Orange,GridLines->Automatic]

Plot[{f[x]},{x,0,2π},PlotStyle->Thick,GridLines->{{(π/2),π,(3/2)π,2π},Automatic}]

Seznamy   Vytváření

Výčtem

{a,b,c,d}

{a,b,{c,d}}

{{a,b},{c,d}}//TraditionalForm

{a,{b,{c,{d}}}}

Table

Table[i,{i,10}]

Table[i,{i,1,10}]

Table[i,{i,4,10}]

Table[i,{i,4,10,2}]

Table[i^2,{i,5}]

Table[{i,i^2},{i,5}]

Table[i+j,{i,5},{j,5}]

Array

Clear[f]

Array[f,10]

Array[f,{10}]

Array[f,{4,2}]

Array[f,{4,2},{10,20}]

Array[f,{4,2},{a,b}]//TraditionalForm

Range

Range[10]

Range[10,20]

Range[10,20,2]

NestList - rekurze

NestList[f,a,4]

NestList[Subsuperscript[#,#,#]&,x,4]

SparseArray, řídké matice

SparseArray[{{1,1}->a,{3,2}->b,{3,4}->c}]

MatrixForm[%]

SparseArray[{{1,1},{3,2},{3,4}}->{a,b,c}]

MatrixForm[%]

Manipulátory   Interaktivní dynamické prvky

Expand[(a+b)^2]

Manipulate[n,{n,1,10}]

Manipulate[Expand[(a+b)^n],{n,1,10,1}]

Manipulate[Plot[Sin[a x+b],{x,0,2π}],{a,1,10},{b,1,10}]

Reference   Další zdroje

http : // www.wolfram.com/services/education/

http : // www.mathematica.cz

http : // demonstrations.wolfram.com/