% Symbolic toolbox

% rozdíl mezi numerickým a symbolickým počítáním
a = 1/3
b = 2/5
a + b % = 0.7333

as = sym('1/3')
bs = sym('2/5')
as + bs % = 11/15

% vytvoření symbolické proměnné
as = sym('1/3')
x = sym('x')
syms x % stejné jako x = sym('x')

% symbolická matice
R = sym('[cos(t), sin(t); -sin(t), cos(t)]')

% převod matice do symbolické formy
A = [1, 2.1; -0.3 5]
As = sym(A)

% determinant, inverzní matice, ...
det(R)
inv(R)
eig(R)

% rozdíl mezi det a sym/det (podobně inv, ...)
help det
help sym/det

% zjednodušení výrazu
r = det(R)
simplify(r)
simple(r)

% výpis výrazu v "čitelné" podobě
pretty(r)

% konverze výrazu do formátu LaTeXu
latex(r)

% velmi přesná aritmetika - vpa
vpa(pi, 100) % výpis pi na 100 desetiných míst
vpa('19/81', 200) % výpis zlomku na 200 desetiných míst

% výpočet derivací a integrálů
diff('2*x^3 - x*y + 1/x') % derivace podle x
diff('2*x^3 - x*y + 1/x', 'x') % derivace podle x
diff('2*x^3 - x*y + 1/x', 'y') % derivace podle y
diff('2*x^3 - x*y + 1/x', 'x', 2) % druhá derivace podle x

int('2*x^3 - x*y + 1/x') % neurčitý integrál
int('2*x^3 - x*y + 1/x', 1, 10) % určitý integrál v mezích <1,10>

% výpočet limit
syms x
limit(1/x, x, inf) % = 0
limit(1/x, x, 0) % = NaN
limit(1/x, x, 0, 'left') % = -Inf
limit(1/x, x, 0, 'right') % = Inf
limit(sin(x)/x, x, 0) % = 1

% tayloruv rozvoj
taylor(sin(x), 6) % rozvoj sin(x) v okolí 0, řád 6
taylor(sin(x), 6, pi) % rozvoj sin(x) v okolí pi, řád 6

% fourierova transformace
syms x w
fourier(1/x) %= pi*i*(2*heaviside(-w) - 1)
% inverzní fourierova transformace
ifourier(pi*i*(2*heaviside(-w) - 1)) % = 1/x

% laplaceova transformace
syms t s
laplace(t^5) % = 120/s^6
ilaplace(120/s^6) % = t^5

% řešení soustavy algebraických rovnic

% příklad:
% najít průsečík kružnice a přímky
%   rovnice kružnice: x^2 + y^2 = r^2
%   rovnice přímky: y = a*x + b

% řešení soustavy vzhledem k proměnným x, y
[res_x, res_y] = solve('x^2 +  y^2 = r^2', 'y = a*x + b', 'x, y')
% vyčíslení řešení pro konkrétní hodnoty a, b, r
r = 5
a = 0.8
b = 1
eval(res_x)
eval(res_y)
% nebo
subs(res_x, {'r', 'a', 'b'}, {5, 0.8, 1})
subs(res_y, {'r', 'a', 'b'}, {5, 0.8, 1})

% řešení soustavy diferenciálních rovnic
dsolve('Dy = a * y') % y'(t) = a*y(t)
dsolve('Df = f + sin(t)') % f'(t) = f(t) + sin(t)
dsolve('D2f = f + t') % f''(t) = f(t) + t

% příklad:
% kmitání 1D lineárního harmonického oscilátoru
%   rovnice: m * x''(t) + b * x'(t) + k * x(t) = 0
%   počáteční podmínky: x(0) = x0, x'(0) = 0
x = dsolve('m * D2x + b * Dx + k * x = 0', 'x(0) = x0', 'Dx(0) = 0')
m = 1
b = 0.4
k = 2
x0 = 1
t = 0:0.1:40;
xt = eval(x);
plot(t, real(xt))