El toolbox de matemática
simbólica es una colección de herramientas para MATLAB que se usan para
manipular y resolver expresiones simbólicas.
Las expresiones simbólicas son
cadenas de caracteres, o arreglos de cadenas de caracteres que representan
números, funciones, operadores y variables.
Algunos ejemplos de
expresiones simbólicas son:
f1 =
'1/(2*x^2n)'
f2 =
'1/sqrt(2*x)'
f3 =
'cos(x^2) - sen(2*x)'
M =
sym('[a, b; c, d]')
f =
int('x^3/sqrt(1-x)', 'a', 'b')
Para efectuar la derivada de una función utilizamos
el comando diff.
diff('cos(x)')
como resultado tenemos
ans
= -sin(x)
Nota: Las expresiones simbólicas deberán ser escritas
sin espacios.
Para definir matrices hacemos:
M =
sym('[a, b; c, d]')
Y el cálculo
del determinante lo hacemos :
determ(M)
Después de la ejecución tenemos...
M =
[ a, b]
[ c, d]
ans =
a*d-b*c
Las expresiones simbólicas sin variables son llamadas
constantes simbólicas. Cuando se visualizan constantes simbólicas, a menudo son
difíciles de distinguir de los enteros.
f =
symop('(3*4-2)/5+1')
numeric(f)
Variables simbólicas.
El comando symvar, se utiliza para averiguar la variable
simbólica en la expresión.
symvar('a*x+y')
symvar('a*t+s/(u+3)')
symvar('sin(omega)')
symvar('3*i+4*j')
symvar('y+3*s', 't')
Muchos comandos dan la opción, si se desea, de
especificar las variables independientes:
diff('x^n')
diff('x^n', 'x')
diff('x^n', 'n')
ans = x^n*n/x
ans = x^n*n/x
ans = x^n*log(x)
Extracción de numeradores y denominadores.
El comando numden() se utiliza para determinar el
denominador y numerador de expresiones racionales.
clear;
a =
sym('a');
b =
sym('b');
x = sym('x');
f =
a*x^2/(b-x)
[n m] = numden(f)
Otro ejemplo es:
clear;
x =
sym('x');
f =
3/2*x^2+2/3*x-3/5
[n m] = numden(f)
Operaciones algebraicas estándar.
Las cuatro operaciones de suma, resta, multiplicación y división
se realizan de manera similar, como ejemplo consideremos:
clear;
x =
sym('x');
f =
2*x^2+3*x-5
g =
x^2-x+7
display('suma'); f+g
display('resta');f-g
display('multiplicacion');f*g
display('division'); f/g
La respuesta que produce es:
suma
3*x^2+2*x+2
resta
x^2+4*x-12
multiplicacion
(2*x^2+3*x-5)*(x^2-x+7)
division
(2*x^2+3*x-5)/(x^2-x+7)
Sustitución de variables.
Para remplazar el valor de una variable por otra variable
o número utilizamos el comando subs()
a =
sym('a');
b =
sym('b');
c =
sym('c');
x =
sym('x');
f =
a*x^2+b*x+ c
subs(f,
's', 'x')
subs(f,
'A', 'a')
Ejemplo 1.
Resolver x –
cos(x) =0 utilizando matemática simbólica y el método de Newton.
clear
;
p=
2.5;
x =
sym('x');
fx = x- cos(x);
h =
fx/diff(fx);
while abs(numeric(subs(fx, num2str (p), 'x'))) > 0.001
p = p - numeric(subs(h, num2str (p), 'x'))
end;
z =
p;
Ejemplo 2.
Calcular los ceros del conjunto de funciones
f1(x,y) = x2 - 2x – y + 0.5
f2(x,y) = x2 + 4y2 - 4
Utilice el método de Newton Raphson y considere como
punto inicial p=[1,1]
La implementación en MATLAB queda:
p =
[1; 1]
x =
sym('x');
y = sym('y');
f = [x^2-2*x-y+0.5;
x^2+4*y^2-4]
ezplot(f(1),[-3,3]);
hold
on;
ezplot(f(2),[-3,3]);
grid
on;
J = [diff(f(1),x),
diff(f(1), y); diff(f(2),x), diff(f(2), y)]
for k=1:100
k
Ji = subs(subs(J, x, num2str(p(1))), y,
num2str(p(2)))
fi = subs(subs(f, x, num2str(p(1))), y,
num2str(p(2)))
p = p - numeric(inv(Ji)*fi)
pause
if(max(abs(numeric(fi)))
< 0.001) break; end;
end;
Integración.
La función de integración int(f), donde f es una
función simbólica, intenta obtener otra expresión simbólica F tal que diff(F) =
f.
Cuando MATLAB no puede encontrar la antiderivada,
devuelve el comando sin evaluar.
Por ejemplo
int('log(x)/exp(x^2)')
Regresa.
Warning: Explicit integral could not be found.
> In C:\MATLABR11\toolbox\symbolic\@sym\int.m at
line 58
In
C:\MATLABR11\toolbox\symbolic\@char\int.m at line 9
In
C:\MATLABR11\work\eje133.m at line 1
ans =
int(log(x)/exp(x^2),x)
Cuando se realiza la derivada podemos decir respecto a
que variable deseamos hacer la integración, en el caso de no expresarlo, por
default se hará con respecto a x.
x =
sym('x');
s =
sym('s');
f =
sin(s + 2*x)
int(f)
int(f,s)
Regresara.
f =
sin(s+2*x)
ans =
-1/2*cos(s+2*x)
ans
=
-cos(s+2*x)
Ejemplo 3.
Bart ha salido de excursión con su clase a la cima del
edificio Skiley en el centro de Springfield. Coge un tomate maduro de la bolsa
de comida, se apoya en el borde del tejado, y lo lanza hacia arriba. El tomate
sale recto, con una velocidad inicial de v0 = 64 pies por
segundo. El tejado esta a y0 = 96 pies por encima del suelo. ¿Dónde
está el tomate t segundos más tarde?. ¿Cuándo alcaza su máxima altura?. ¿Qué altura
máxima sobre el suelo alcanza el tomate?. ¿Cuándo golpea el tomate el suelo?.
Suponer que no hay resistencia del aire y que la aceleración debida a la gravedad
es una constante g = -32 pies por segundo por segundo en Springfield.
clear;
g =
sym('g')
t =
sym('t')
g = -32 %
aceleracion de la gravedad.
v = int(g, t) %
calcula la velocida como función del tiempo
v = symadd(v, 64) % en t=0
la velocidad en 64
y = int(v, t) %integra
la velocidad respecto a t para calcular el desplazamiento
fprintf('El valor de desplazamiento en funcion de t es \n');
y = symadd(y, 96) % en t=0
la altura es 96 pies
fprintf('La pelota alcnza la altura máxima cuando\n');
t_max = solve(v) % calcula
v(t) = 0
fprintf('La altura máxima es \n');
y_max = subs(y, t_max)
fprintf('El tiempo para que el tomate golpe el suelo es\n')
t_fin = solve(y)
La solución que entrega MATLAB es:
g = -32
v = -32*t
v = -32*t+64
y = -16*t^2+64*t
El
valor de desplazamiento en funcion de t es
y = -16*t^2+64*t+96
La
pelota alcnza la altura máxima cuando
t_max
= 2
La
altura máxima es
y_max
= 160
El
tiempo para que el tomate golpe el suelo es
t_fin
= [ 2+10^(1/2)]
Para
tener una idea más clara de lo que le paso al tomate, vamos a dibujar el
resultado del lanzamiento del tomate. Para ello utilizamos el comando ezplot(y)
Simplificación
de expresiones.
Las expresiones simbólicas pueden ser presentadas de
muchas formas equivalentes. En situaciones diferentes algunas formas pueden ser
preferibles a otras. MATLAB usa un número de comandos para simplificar la forma
de las expresiones simbólicas.
» f = sym('(x^2-1)*(x-2)*(x-3)')
f =
(x^2-1)*(x-2)*(x-3)
»
collect(f)
ans =
x^4-5*x^3+5*x^2+5*x-6
» horner(ans)
ans =
-6+(5+(5+(-5+x)*x)*x)*x
» factor(ans)
ans =
(x-1)*(x-2)*(x-3)*(x+1)
» expand(f)
ans =
x^4-5*x^3+5*x^2+5*x-6
simplify es una herramienta potente, de propósito general,
que intenta simplificar una expresión mediante la aplicación de muchas clases
diferentes de identidades algebraicas involucrando sumas, integrales y
potencias fraccionales, así como trigonometría, fórmulas exponenciales,
funciones logarítmicas, etc.
Algunos de ejemplos de uso de este comando son
x =
sym('x')
y = sym('y')
f = log(2*x/y)
simplify(f)
La respuesta a estos comandos es:
f =
log(2*x/y)
ans =
log(2)+log(x/y)
Otro ejemplo es
x =
sym('x')
g = sin(x)^2+3*x+cos(x)^2-5
simplify(g)
La
respuesta en este caso es:
g =
sin(x)^2+3*x+cos(x)^2-5
ans =
-4+3*x
Otro es
x =
sym('x')
h =
(1/x^3+6/x^2+12/x+8)^(1/3)
simplify(h)
Solución de ecuaciones algebraicas simples.
Para calcular la solución de una ecuación algebraica
simple se utiliza el comando solve()
solve('a*x^2+b*x+c')
solve('x=cos(x)')
solve('exp(x)=tan(x)')
La respuesta a estos comandos es:
ans =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
ans =
.73908513321516064165531208767387
ans =
1.3063269404230792361743566584407
Solución de ecuaciones diferenciales.
En la solución de ecuaciones diferenciales utilizamos el
comando dsolve así por ejemplo
se soluciona haciendo
dsolve('Dy=1+y^2')
ans =
tan(t+C1)
Vamos
a probar una ecuación diferencial de segundo orden.
y = dsolve('D2y=cos(2*x)-y', 'Dy(0)=0',
'y(0)=1')
También el comando dsolve puede resolver sistemas de
dos ecuaciones diferenciales simultaneas.
[f,
g] = dsolve('Df=3*f+4*g', 'Dg=-4*f+3*g')