clear all;
Symbolic Math Toolbox
Aquest tutorial utilitzarà la Symbolic Math Toolbox. Aquest breu tutorial explicarà algunes de les funcionalitats bàsiques que s’utilitzaran en tutorials futurs.
La Symbolic Math Toolbox és una eina potent per fer càlculs, ja que ens permet utilitzar variables en lloc de nombres. Això pot ser útil per reutilitzar matrius o equacions complexes i substituir valors quan sigui necessari.
Activeu "Output inline" a la dreta de la barra de desplaçament.

Crear una variable simbòlica
Per crear una variable simbòlica, pots utilitzar l’ordre syms seguida de les variables desitjades.
syms var
Si només treballes amb nombres reals, com serà el cas en aquest tutorial, afegeix real a syms per reduir els càlculs simbòlics amb nombres imaginaris.
syms var real
Pots crear múltiples variables alhora; si hi afegeixes un número, es mostrarà com un índex en la visualització.
syms var1 var2 var3 real real
MyVars = [var1 var2 var3]
$$ \displaystyle \left(\begin{array}{ccc} {\textrm{var}}_1 & {\textrm{var}}_2 & {\textrm{var}}_3 \end{array}\right) $$
Quan escrius lletres gregues com a variables, es converteixen en els seus símbols en la visualització:
syms alpha beta gamma Delta delta
MyVars = [alpha, beta, gamma, Delta, delta]
$$ \displaystyle \left(\begin{array}{ccccc} \alpha & \beta & \gamma & \Delta & \delta \end{array}\right) $$
Substituir variables
Utilitzant la funció subs(), podem substituir variables simbòliques per valors, fent que sigui fàcil reutilitzar, per exemple, equacions:
syms alpha beta x y z real
Equation1 = x^2 ;
Equation2 = 2 * x + y;
Value1 = subs(Equation1, x, 3)
Value2 = subs(Equation2, [x, y], [3, 1])
Podem combinar funcions com:
Equation3 = Equation1 + Equation2
Equation4 = Equation1 * Equation2
Equation5 = subs(Equation4, [x, y], [alpha, beta])
També pots substituir vectors per variables, obtenint una sortida vectorial en què cada fila correspon a la fila d’entrada corresponent.
timevec= linspace(0,10,5)' %this creates an equally spaced row vector from 0 to 10 in 5 steps.
timevec = 5x1
0
2.5000
5.0000
7.5000
10.0000
EquationVector = subs(Equation4,x,timevec)
$$ \displaystyle \left(\begin{array}{c} 0\newline \frac{25\,y}{4}+\frac{125}{4}\newline 25\,y+250\newline \frac{225\,y}{4}+\frac{3375}{4}\newline 100\,y+2000 \end{array}\right) $$
Convertir variables simbòliques
De vegades apareixen missatges d’error quan s’intenta combinar variables numèriques i simbòliques. Evita-ho convertint-ne una:
Després de substituir, la variable del Workspace encara es considera una variable simbòlica. Encara que la nova variable només contingui nombres, MATLAB la considerarà una variable simbòlica, cosa que pot causar dificultats. La pots convertir a numèrica així:
ValueDouble = double(Value2)
ValueDouble = 7
Si intentes inserir variables simbòliques dins de variables numèriques, cal convertir la matriu numèrica en una matriu simbòlica:
Matrix_1 = ones(3)
Matrix_1 = 3x3
1 1 1
1 1 1
1 1 1
Matrix_symb = [alpha, beta;
gamma, delta]
$$ \displaystyle \left(\begin{array}{cc} \alpha & \beta \newline \gamma & \delta \end{array}\right) $$
Matrix_combined = sym(Matrix_1)
$$ \displaystyle \left(\begin{array}{ccc} 1 & 1 & 1\newline 1 & 1 & 1\newline 1 & 1 & 1 \end{array}\right) $$
Matrix_combined(1:2,1:2) = Matrix_symb
$$ \displaystyle \left(\begin{array}{ccc} \alpha & \beta & 1\newline \gamma & \delta & 1\newline 1 & 1 & 1 \end{array}\right) $$
Treballar amb variables simbòliques
La Symbolic Math Toolbox ens dona eines potents per fer càlcul diferencial.
Derivar amb variables simbòliques
Podem derivar una expressió com:
Equation = x^2 + x * y^2 + y^3 + 5
diff_Eq1 = diff(Equation, x)
També pots derivar respecte de múltiples variables alhora:
diff_Eq2 = diff(Equation, x, y)
diff_Eq3 = diff(Equation, x, x)
diff_Eq4 = diff(Equation, y, y)
Això també es pot utilitzar en una matriu, on cada element
MatrixEquation = [x^2, x*y, x*y*z;
x*y, y^2, y*z ;
x*y*z, y*z, z^2 ]
$$ \displaystyle \left(\begin{array}{ccc} x^2 & x\,y & x\,y\,z\newline x\,y & y^2 & y\,z\newline x\,y\,z & y\,z & z^2 \end{array}\right) $$
diff_Matrix1 = diff(MatrixEquation, x)
$$ \displaystyle \left(\begin{array}{ccc} 2\,x & y & y\,z\newline y & 0 & 0\newline y\,z & 0 & 0 \end{array}\right) $$
diff_Matrix2 = diff(MatrixEquation, x,y)
$$ \displaystyle \left(\begin{array}{ccc} 0 & 1 & z\newline 1 & 0 & 0\newline z & 0 & 0 \end{array}\right) $$
diff_Matrix3 = diff(MatrixEquation, x,y,z)
$$ \displaystyle \left(\begin{array}{ccc} 0 & 0 & 1\newline 0 & 0 & 0\newline 1 & 0 & 0 \end{array}\right) $$
Reescriure equacions
Podem reescriure expressions utilitzant la toolbox simbòlica:
Eq = (x + 1) * (x + y)
La funció collect() retorna una equació on totes les expressions s’agrupen segons la variable desitjada i les seves potències idèntiques.
Eq_collect_x = collect(Eq, x)
La funció simplify() ens permet factoritzar una expressió i aplicar regles de cancel·lació.
Simple_Eq = simplify(Eq_collect_x)
Resoldre equacions
La toolbox simbòlica també ens permet resoldre variables:
syms a b real
Eq1 = a * 5 + b == 0
Eq2 = a * 15 + b == 4
solutions = solve([Eq1, Eq2], [a, b])
solutions = struct with fields:
a: 2/5
b: -2
També podem fer que resolgui una variable que depèn d’altres:
parameter_solution_a = solve(Eq1, a)