Základy programování v Matlabu - část 6
Ing. Petr Pokorný, Ph.D.
Symbolické výpočty
Kromě numerických výpočtů Matlab umožňuje řadu analytických operací - tzv. symbolických výpočtů. Jedná se např. o derivace, integrace, řešení soustav rovnic, apod. Symbolické výpočty jsou umožněny, jestliže je nainstalován Symbolic Math Toolbox.
Pro práci se symbolickými proměnnými je třeba je nejprve deklarovat (definovat).
Matlab umožňuje definici symbolických proměnných, vektorů, matic nebo funkcí (viz doc syms).
Základní operace, derivace, integrace
% Deklarace symbolickych promennych
% Zakladni algebraicke operace
diff( cos(b) )
ans = 
diff( sin(a*b)*exp(c), b ) % parcialni derivace podle b
ans = 
int( cos(b) )
ans = 
int( sin(a)^2, a , 0 , 1 ) % urcity integral podle a od 0 do 1
ans =

Řešení soustav rovnic
syms x y real % deklarace realnych symbolickych promennych
rovnice = [ 2*x + 3*y^2 == 1; -x + 2*y == 2 ]; % zapis symbolickych rovnic do matice
reseni = solve( rovnice, [x y] ); % reseni soustavy pomoci funkce solve, ta ulozi reseni do struktury
reseni.x % vypis prvku struktury
ans =

reseni.y
ans =

Symbolické rovnice
syms z(x,y) % deklarace symbolicke rovnice dvou promennych
z(x,y) = x + 3*x^2*y + y^2; % definice rovnice
% priklad dvojne integrace
Ix = int( z, x ) % priklad integrace podle x
Ix(x, y) =

Ixy_varianta_1 = int( Ix, y ) % priklad integrace podle y
Ixy_varianta_1(x, y) =

Ixy_varianta_2 = int( int( z, x ), y ) % integrace v jednom radku
Ixy_varianta_2(x, y) =

Ixy_num = Ixy_varianta_2( 1, 2 ) - Ixy_varianta_2( 0, 0 ) % vycisleni pro x in [0 1] a y in [0 2]
Ixy_num =

Ixy_num_varianta_2 = int( int( z, x, 0, 1 ), y, 0, 2 ) % primy vypocet urciteho integralu
Ixy_num_varianta_2 =

Úpravy symbolických výrazů
Výsledné symbolické výrazy lze upravovat, zjednodušovat, řadou funkcí, např.:
- collect,
- simplify,
- expand,
- apod.
f_taylor = taylor( f, x, 'order', 8 )
f_taylor =

simplify( f_taylor )
ans =

% uprava podle koeficientu
collect( f_taylor, x )
ans =

% nalezeni koeficientu rozvoje, ulozeni do matice C, vypis zjednodusenych
C = coeffs( f_taylor, x );
end
ans = 
ans = 
ans =

ans =

ans =

ans =

Substituce, vyčíslení
V symbolických proměnných lze provádět substituce (funkce subs). Pomocí funkce eval dále můžeme provést vyhodnocení vypočteného symbolického výrazu, jako bychom příkaz zapsali do příkazové řádky.
p_num = [ 0.1 0.02 0.03 0.04 0.005 ]; % vytvoreni vektoru koeficientu p,
% kterym nahradime hodnoty koeficietnu p1, ..., p5
C_num = subs( C, p, p_num ) % vycisleni koeficientu C
C_num =

Vyvoření in-line funkce pomocí matlabFunction
Z odvozených symbolických výrazů můžeme vytvořit in-line funkci pomocí matlabFunction, a tu dále použít např. pro numerické vyčíslení.
fun_m = matlabFunction( fun )
t = linspace( 0, 1, 100 );
Příklady
Příklad 1
Nechť X a Y jsou reálné symbolické proměnné (sym, syms, real, …). Zapište následující vztahy, výsledky zjednodušte (simplify) a zobrazte (pretty):
,
,
,
.
Příklad 2
Symbolicky zjednodušte výraz V pro reálná X a Y (simplify, collect, …):
.Dosaďte do symbolického výrazu V za X = 1 a Y = 2 a určete výslednou hodnotu (subs).
Příklad 3
Vyjádřete x a y z rovnice kružnice pomocí symbolických výpočtů a funkce solve:
.Příklad 4
Vypočtěte následující integrál pomocí symbolických výpočtů (int), funkce solve a dosazení subs:
.Vypočtěte také integrál v jednom řádku.
Příklad 5
Určete analytický tvar derivace funkce f(x) pomocí symbolických výpočtů (diff) a hodnotu derivace v bodě x = 2 (subs, eval, …):
.