Mathematica

APP

Tomáš Novotný
Katedra Elektroenergetiky
novotnt@feld.cvut.cz

Základní vlastnosti

Kernel                     ⟺             FrontEnd

Mathematica není User-Friendly   \[FreakedSmiley] ☹ 😐 ☺

např. LaplaceTransform, FourierTransform, Factorial, Plot ListPlot, ...

např. Solve, Rule, Sin, Cos, Tan, Integrate, D, DSolve, Plot, Plot3D, N, Sum,Random, Pi, E, ...

např. Solve[ ], Rule[ ], Integrate[ ], N[ ], Sin[ ], Cos[ ],Sqrt[ ], Log[ ],Abs[ ]...

např. {1, 2, 3, ahoj, }

např. (a * b) + (c-1) /d

např.
 ℧ µ ℼ j e ∑ ∫  ∮   ∲  ∯  ∃  ⋃  ⊙ ∨ ≡  ≥  → ↓ ⟺ ↧ Esc  \[MathematicaIcon] \[KernelIcon] ☑
α β γ δ ϵ ε ζ η 𝒜 ℬ ã ö ü ç

Vlastní funkce začínat malým písmenem

Map[
      Head, {Pi, 3, 3.1, 1/2, 3 + I 2, a + b, a*b, 
        a/b}]

FullForm /@ {Pi, 3, 3.1, 1/2, 3 + I 2, a + b, a*b, 
        a/b}

www . wolfram . com

Heat

Help

?Příkaz

např.

?Sqrt

?Plus

?? Solve

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

Shift-F1 nebo označení příkazu+F1

Solve,Integrate, D, Sin, ...

Mathematica jako kalkulátor

Výpočet se provede odesláním Kernelu (Shift-Enter ⇧|⌤ nebo pravý Enter - numerická klávesnice)

12 + 8

159*365

23^69

23. ^69

5^2

Sqrt[%]

N[E]

N[E, 25]

{Sqrt[5], Sqrt[5. ]}

{Sin[5], Sin[5. ]}

Levá strana: In[číslo], Out[číslo], pravá strana: Cell (sdružování do cell)
%  - použije se poslední výstup (Out[] s nejvyšším číslem)

2 + x + a^2 + 3  x + 5 (a^2 + x)

Simplify[%]

Expand[{(a - b)^2, (a - b)^3}] // TableForm

Log[E]

Log[b, a]

Sin[x]^2 + Cos[x]^2

Simplify[%]

Mathematica jako kalkulátor

Integrace

Integrate[ArcTan[x], x]

Při použití z palety

∫ArcTan[x] \[DifferentialD]x

Derivace

D[%, x]

Mathematica jako kalkulátor

Limita

Limit[ArcTan[x], x -> ∞]

Plot[{ArcTan[x], (π/2)}, {x, -30, 30}, 
        PlotStyle -> {{Thickness[0.01],  
              RGBColor[0, 0, 0]}, {Thickness[0.01], Hue[1]}}, 
        Ticks -> {Automatic, {-(π/2), -(π/4), 
              0, (π/4), (π/2)}}, 
        PlotLabel -> "Funkce Tangens \n\n", 
        AxesLabel -> {{"x"}, {"y=f[x]"}}];

Vše je notebook

\(SimpleClock[] := 
      Module[{d = Date[], h, m, s, tick}, 
        s = π\/2 - \(2\ π\ d[\([6]\)]\)\/60. ; 
        m = π\/2 - \(2\ π\ d[\([5]\)]\)\/60.  - \(2\ π\ \ d[\([6]\)]\)\/3600. ; 
        h = π\/2 - \(2\ π\ Mod[d[\([4]\)], 12]\)\/12.  - \(2\ π\ d[\([5]\)]\)\/720. ; 
        Graphics[{{RGBColor[0, 0, 0], 
              Rectangle[{\(-1\), \(-1\)}, {1, 1}]}, {RGBColor[1, 1, 0], 
              Disk[{0, 0}, 1]}, 
            Text["Quartz", {0, 0.5}, {0, 1}], 
Table[
              tick = \(\(\ \)\(2  π\ i\)\)\/12. ; 
              Text[\ ToString[i], {0.8  Sin[tick], 
                  0.8  Cos[tick]}, {0.8  Cos[tick], 0.8  Sin[tick]}], {i, 
                12}], Table[tick = \(2\ π\ i\)\/12. ; 
              Line[{ .88\ {Cos[tick], Sin[tick]}, {Cos[tick], 
                    Sin[tick]}}], {i, 12}], 
            Table[tick = \(2\ π\ i\)\/60. ; 
              Line[{ .95\ {Cos[tick], Sin[tick]}, {Cos[tick], 
                    Sin[tick]}}], {i, 60}], {Thickness[0.03], 
              Line[{{0, 0}, 0.6\ {Cos[h], Sin[h]}}]}, {Thickness[0.02], 
              Line[{{0, 0},  .95\ {Cos[m], Sin[m]}}]}, {Hue[1], 
              Thickness[0.01], Line[{{0, 0}, 0.96\ {Cos[s], Sin[s]}}]}}, 
          AspectRatio -> Automatic]]\)

Show[SimpleClock[]]; Pause[0.7]; 
    SelectionMove[EvaluationNotebook[], Previous, Cell, 2]; 
    FrontEndTokenExecute["Evaluate"];

Vše je notebook

nb = 
        NotebookCreate[WindowToolbars -> {EditBar, LinksBar, RulerBar}, 
          WindowMovable -> False, 
          WindowTitle -> "A Pulsating Window", 
          WindowSize -> {640, 640}, Background -> Hue[ .3  .5]];Pause[3];Do[{SetOptions[nb, Background -> Hue[t/10,  .5]],NotebookWrite[nb," Vše je notebook  ",None]},{t, 0. , 4. ,  .1}];Pause[2];Do[
        SetOptions[nb, 
          WindowSize -> 
            N[200 (2.4 + {Sin[(t/10)], Sin[(t/15)]})]], {t, 350}];Pause[2];Do[
        SetOptions[nb, 
          First[Map[If[NumberQ[#], # + Random[Real, {-40, 40}], #] &, 
              Options[nb, WindowMargins], {-1}]]], {100}];Pause[2];NotebookClose[nb];Clear[nb]

Základem je List   { } - vektor

Přímý zápis

{a, b, c}

Zápis pomocí funkce

List[a, b, c]

Skalární součin dvou vektorů

{1, 2, 3}  .  {a, b, c}

Vektorový součin dvou vektorů

{1, 2, 3} {a, b, c}

(({{a, b}, {c, d}}))

Det[{{a, b, c}, {d, e, f}, {1, 2, 3}}]

MatrixForm[{{a, b, c}, {d, e, f}, {1, 2, 3}}]

Násobení matic

(({{a, b}, {c, d}})).(({{a, b}, {c, d}}))//MatrixForm

Násobení matic prvek po prvku

(({{a, b}, {c, d}}))*(({{a, b}, {c, d}}))//MatrixForm

Inverzní matice

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

Pravidla   ->

Funkce

Rule[a, b]

Přímý zápis

a -> b

a -> b

Levé straně se přiřadí pravá strana bez znečištění proměnných

Náhrada    /.

Funkce

ReplaceAll[1 + x, x -> a]

Přímý zápis (Slash-Dot notation)

1 + x /. x -> a

?x

?a

1 + x^2 + x^4 + x^5 /. x -> a + b

{a, b, c} /. a -> b /. b -> d

{a, b, c} /. {a -> b, b -> d}

Opakované použití

{a, b, c} //. {a -> b, b -> d}

Options /@ {Integrate, Solve, Plot}

Příkaz přiřazení   =

Do proměnné x se přiřadí číslo 3

x = 3;

x + a + 3

x

y + a + 3 /. y -> 3

y

?@

y = x + a;

y

; lze oddělit několik příkazů a zapsat je na jeden řádek

z = x + y; z + b

Vyčištění proměnné

Clear[x, z, y]

x

a = 1; b = 3;
If[a == b, 
      
      a + b, 
      
      a - b
]

Formy zobrazení

ee={Limit[ff[u], u -> 1],Derivative[2, 3][g],Zeta[z],Binomial[j, k],Sin[π x]^2,(1/(v + (1/w))),HoldForm@Integrate[x, x]};

TableForm[{InputForm[#], OutputForm[#], StandardForm[#], 
            TraditionalForm[#]} & /@ ee, 
      TableHeadings -> {None, StyleForm[#, 
                FontFamily -> "Times New Roman", FontSize -> 12, 
                FontWeight -> "Bold"] & /@ {InputForm, OutputForm, 
              StandardForm, TraditionalForm}}, 
      TableSpacing -> {3, 1}]

Znovu Listy { }

Tvorba Listu

Table[x + 1, {x, 3, 6, 0.2}]

Table[
      StyleForm[TraditionalForm[Mathematica], FontFamily -> "Times", 
        FontSize -> i, FontColor -> Hue[0.02*i]], {i, 5, 50, 
        3}]

Table[(Subscript[a, i]) + x^i + 1, {i, 5}]

Range[5, 10]

Listy a jejich části

Příkaz Part, First, Last

v = {a, b, c, ahoj, Pi, e, f, h, E, 2, 5}

Length[v]

Part[v, 2]

Zkrácený zápis předchozího

v[[2]]

První položka

First[v]

Poslední položka

Last[v]

v

Table[v[[i]], {i, 1, 8, 2}]

Grafy funkcí

Funkce Sin[x]

Plot[Sin[ahoj], {ahoj, 0, 6.25}, 
        AxesLabel -> {"x", "y"}, 
        PlotLabel -> "Tohle je graf Sin[x]"];

Funkce Sin[x] a Cos[x] - obě musí být v Listu !!!!

Plot[{Sin[x], Cos[x]},{x, 0, 6.25},AxesLabel -> {"x", "y"},PlotLabel -> "Tohle je graf Sin[x] a Cos[x]"];

Funkce Sin[x] a Cos[x] 3D zobrazení

Plot3D[
        Sin[x]*Cos[y], {x, -5, 5}, {y, -4, 
          4}  , 
        ViewPoint -> {-1.019,  -0.862,  2.871}];

Grafy bodů

Funkce Sin[x]

deleni = 0.01;
body = Table[{x, Sin[x]}, {x, 0, 3  Pi, deleni}];

ListPlot[body, AxesLabel -> {"x", "y"}, 
        PlotStyle -> PointSize[0.02], 
        PlotLabel -> "Tohle je graf Sin[x] slo\:017eený z bod\:016f\
"];

Funkce Sin[x] a Cos[x] ve 3D

deleni = 0.3;
body3D = 
        Table[Sin[x*y], {x, 0, 2  Pi, deleni}, {y, 0, 2  Pi, 
            deleni}];

ListPlot3D[body3D, AxesLabel -> {"x", "y", "z"}, 
        PlotLabel -> "Tohle je graf Sin[x*y] "];

Tvorba vlasních funkcí  =   :=

Příkaz přiřazení      =

Odložený příkaz přiřazení     : =

ran1 = Random[]; rand2 := Random[];
{ran1, ran1, ran1}

{rand2, rand2, rand2}

f[x_] := x^2*Sin[x] /; x > 0
f[x_] := x^2 /; x ≤ 0

f[3]

Plot[f[x], {x, -6, 2  Pi}];

data = Table[{x, x + Random[] + 1/2}, {x, 0, 5, 0.2}];

p1 = ListPlot[data, PlotStyle -> PointSize[0.01]];

metodaNejmensichCtvercu[body_] := Fit[body, {1, x^2}, x]

fce1 = metodaNejmensichCtvercu[data]

Plot[fce1, {x, 0, 5}, Epilog -> p1[[1]]];

fce2 = FindFit[data, {a x + b}, {a, b}, x]

Plot[{a x + b} /. fce2, {x, 0, 5}, 
        Epilog -> p1[[1]]];

Rovnice

Řešení algebraických rovnic nebo soustav rovnic

Rovnítko  = =

Funkce Equal[ ]

Equal[a, b]

Solve[{rovnice},{nezname}]

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

Soustavy rovnic

Solve[{x^2 - k^2 == 0, y^2 == x^2}, {x, y}]

NSolve[x^3 + x + 1 == 0, x]

x /. %

Rovnice

Pokud rovnice nejsou polynom

FindRoot[3  Cos[x] == Log[x], {x, 1}]

Plot[{3  Cos[x], Log[x]}, {x, 0, 5}, 
        PlotRange -> {{0, 5}, {-4, 4}}, 
        Epilog -> {Hue[1], PointSize[0.03], 
            Point[{x, Log[x]} /. %]}];

Rovnice - Diferenciální rovnice

rovnice = {y''[x] == a y[x] + 1, 
          y[0] == 0, y'[0] == 0};

res = y[x] /. DSolve[rovnice, y[x], x]

Plot[Evaluate[res /. a -> -x], {x, -0.5, 20}, 
        PlotRange -> All];

?LaplaceTransform

LaplaceTransform[rovnice[[1]], x, p]

% /. LaplaceTransform[y[x], x, p] -> Y[p]

% /. {y[0] -> 0, y'[0] -> 0}

Solve[%, Y[p]]

Y[p] /. %

InverseLaplaceTransform[%, p, x]

res

Rovnice - Diferenciální rovnice

Diferenciální rovnice - numerické řešení (výsledek je ve formě Interpolační funkce)

result = 
      NDSolve[{y''[t] + 0.1 y'[t] == -Sin[y[t]], 
          y[0] == 1, y'[0] == 0}, y, {t, 0, 50}]

Plot[y[x] /. result, {x, 0, 30}];

Animace (s Table a Do)

max = 2  Pi;
Table[
        Plot[Sin[x], {x, 0, max}, AxesLabel -> {"x", "y"}, 
          PlotLabel -> "Tohle je graf Sin[x]", 
          Epilog -> {Hue[0.9], PointSize[0.03], 
              Point /@ {{i, Sin[i]}}}], {i, 0, max, 
          max/20}];
SelectionMove[EvaluationNotebook[], All, GeneratedCell];
FrontEndTokenExecute[CellGroup]; 
    FrontEndTokenExecute[OpenCloseGroup];

FindRoot[3  Cos[x] == Log[x], {x, 1}]

Do[
        Plot[{3  Cos[x], Log[x]}, {x, 0, 5}, 
          PlotRange -> {{0, 5}, {-4, 4}}, 
          Epilog -> {Hue[1], PointSize[0.03], 
              Point /@ {{i, Log[i]}, {i, 3  Cos[i]}}}], {i, 0.1, 5, 
          0.2}];

Grafika

n = (π/128); 
    Show[Graphics[({Hue[#(1/(2 π - n))], 
                Disk[{0, 0}, 1, {#1, #1 + n}]} &) /@ 
          Range[0, 2 π - n, n], AspectRatio -> Automatic]]; 
    Clear[n];

Grafika ve 2D

Show, Graphics,  Point,  Line, Circle,  ...

Konvexní a konkávní fce

f[x_] := Cos[x]
tecna[x_, x0_] := f'[x0] (x - x0) + 
        f[x0]
x1 = -2 Pi;  x2 = 2  Pi;
y1 = -1.5;  y2 = 1.5;
NN = 40;
eps = 0.9;
epsik = 2*eps;

plotsin = 
        Plot[f[x], {x, x1, x2}, 
          DisplayFunction -> Identity];
tec = 
        Table[Plot[tecna[x, x0], {x, x0 - eps, x0 + eps}, 
            DisplayFunction -> Identity], 
{x0, x1, 
            x2, (x2 - x1)/NN}];
body = 
        Table[{x, f[x]}, {x, x1, 
            x2, (x2 - x1)/NN}];
grafbody = 
        Table[ListPlot[{body[[i]]}, 
            PlotStyle -> {PointSize[ .02], Hue[((1 - i)/10)]}, 
            DisplayFunction -> Identity], {i, 1, 
            Length[body]}];

popis[
        x_] := (If[(f[x - epsik] > tecna[x, x - epsik] && 
                    f[x + epsik] > tecna[x, x + epsik]), 
                tex = "Konvexní"] || 
              If[(f[x - epsik] < tecna[x, x - epsik] && 
                    f[x + epsik] < tecna[x, x + epsik]), 
                text = "Konkávní"] || 
              If[(f[x - epsik] > tecna[x, x - epsik] && 
                      f[x + epsik] < 
                        tecna[x, x + epsik]) || (f[x - epsik] < 
                        tecna[x, x - epsik] && 
                      f[x + epsik] > tecna[x, x + epsik]), 
                text = "Inflexní bod"] // 
            Cases[#, _String] &)[[1]]

textik = 
        Table[Graphics[Text[popis[x], {x, f[x]}, {0, -3}]], {x, x1, 
            x2, (x2 - x1)/NN}];

Table[
Show[plotsin, tec[[i]], 
          grafbody[[i]], textik[[i]], 
          DisplayFunction -> $DisplayFunction, 
          PlotRange -> {{x1 - 1.5, x2 + 1.5}, {y1 - 0.5, y2 + 0.5}}, 
          ImageSize -> 500], {i, 1, 
          Length[tec]}];
SelectionMove[EvaluationNotebook[], All, GeneratedCell];
FrontEndTokenExecute[CellGroup]; 
    FrontEndTokenExecute[OpenCloseGroup];

Funkce Sinus

plotsin = 
        Plot[Sin[x], {x, 0, 2  π}, 
          Ticks -> {{0, (π/2), π, ((3 π)/2), 2 π}, 
              Automatic}, AspectRatio -> Automatic, 
          DisplayFunction -> Identity];
stickplotsin[x_] := 
        Graphics[{PointSize[ .03], Hue[1], Point[{x, Sin[x]}], 
            Line[{{x, 0}, {x, Sin[x]}}]}];
plotkruh = 
        ParametricPlot[{Cos[t], Sin[t]}, {t, 0, 2  π}, 
          AspectRatio -> Automatic, 
          DisplayFunction -> Identity];
stickkruh[x_] := 
      Graphics[{PointSize[ .03], Hue[1], Point[{Cos[x], Sin[x]}], 
          Line[{{0, 0}, {Cos[x], Sin[x]}}], 
          Line[{{Cos[x], 0}, {Cos[x], Sin[x]}}]}]

graf = 
      Table[Show[
          GraphicsArray[{Show[plotkruh, stickkruh[x]], 
              Show[plotsin, stickplotsin[x]]}], 
          DisplayFunction -> Identity, ImageSize -> 600], {x, 0, 
          2  π, 0.08  π}]; i = 1;

Show[graf[[i]], DisplayFunction -> $DisplayFunction]; 
    Pause[0.1]; i++; If[i > Length[graf], i = 1;]; 
    SelectionMove[EvaluationNotebook[], Previous, Cell, 2]; 
    FrontEndTokenExecute["Evaluate"]

Table[
      Show[GraphicsArray[{Show[plotkruh, stickkruh[x]], 
            Show[plotsin, stickplotsin[x]]}], 
        DisplayFunction -> $DisplayFunction, ImageSize -> 600], {x, 
        0, 2  π, 0.08  π}]; 
    SelectionMove[EvaluationNotebook[], All, GeneratedCell];
FrontEndTokenExecute[CellGroup]; 
    FrontEndTokenExecute[OpenCloseGroup];