Você está na página 1de 10

Matemtica Simblica con matlab

El toolbox de matemtica simblica es una coleccin de herramientas para MATLAB que se usan para manipular y resolver expresiones simblicas. Las expresiones simblicas son cadenas de caracteres, o arreglos de cadenas de caracteres que representan nmeros, funciones, operadores y variables. Algunos ejemplos de expresiones simblicas 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 funcin utilizamos el comando diff.


diff('cos(x)')

como resultado tenemos


ans = -sin(x)

Nota: Las expresiones simblicas debern ser escritas sin espacios. Para definir matrices hacemos:
M = sym('[a, b; c, d]')

Y el clculo del determinante lo hacemos :


determ(M)

Despus de la ejecucin tenemos...


M = [ a, b] [ c, d] ans = a*d-b*c

Las expresiones simblicas sin variables son llamadas constantes simblicas. Cuando se visualizan constantes simblicas, a menudo son difciles de distinguir de los enteros.
f = symop('(3*4-2)/5+1') numeric(f)

Variables simblicas. El comando symvar, se utiliza para averiguar la variable simblica en la expresin.
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 opcin, 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)

Extraccin 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 estndar. Las cuatro operaciones de suma, resta, multiplicacin y divisin 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)

Sustitucin de variables. Para remplazar el valor de una variable por otra variable o nmero utilizamos el comando subs()
a b c x = = = = sym('a'); sym('b'); sym('c'); 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 matemtica simblica y el mtodo 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 mtodo de Newton Raphson y considere como punto inicial p=[1,1]
x 2+4 y 2-4 = 0 3

-1

-2

-3 -3

-2

-1

0 x

La implementacin 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;

Integracin. La funcin de integracin int(f), donde f es una funcin simblica, intenta obtener otra expresin simblica 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 integracin, 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 excursin 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. Dnde est el tomate t segundos ms tarde?. Cundo alcaza su mxima altura?. Qu altura mxima sobre el suelo alcanza el tomate?. Cundo golpea el tomate el suelo?. Suponer que no hay resistencia

del aire y que la aceleracin 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 funcin 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 mxima cuando\n'); t_max = solve(v) % calcula v(t) = 0 fprintf('La altura mxima 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 solucin 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 mxima cuando t_max = 2 La altura mxima es y_max = 160 El tiempo para que el tomate golpe el suelo es t_fin = [ 2+10^(1/2)]

Para tener una idea ms clara de lo que le paso al tomate, vamos a dibujar el resultado del lanzamiento del tomate. Para ello utilizamos el comando ezplot(y)
-16 t 2+64 t+96 200

-200

-400

-600

-800

-1000 -6 -4 -2 0 t 2 4 6

Simplificacin de expresiones.
Las expresiones simblicas pueden ser presentadas de muchas formas equivalentes. En situaciones diferentes algunas formas pueden ser preferibles a otras. MATLAB usa un nmero de comandos para simplificar la forma de las expresiones simblicas.
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 propsito general, que intenta simplificar una expresin mediante la aplicacin de muchas clases diferentes de identidades algebraicas involucrando sumas, integrales y potencias fraccionales, as como trigonometra, frmulas exponenciales, funciones logartmicas, 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)

Solucin de ecuaciones algebraicas simples.

Para calcular la solucin de una ecuacin 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

Solucin de ecuaciones diferenciales. En la solucin de ecuaciones diferenciales utilizamos el comando dsolve as por ejemplo
dy 1 y2 dx

se soluciona haciendo
dsolve('Dy=1+y^2') ans = tan(t+C1)

Vamos a probar una ecuacin diferencial de segundo orden.

d2y cos(2 x) y dx 2 dy(0) 0 dx y (0) 1


y = dsolve('D2y=cos(2*x)-y', 'Dy(0)=0', 'y(0)=1')

Tambin el comando dsolve puede resolver sistemas de dos ecuaciones diferenciales simultaneas.

[f, g] = dsolve('Df=3*f+4*g', 'Dg=-4*f+3*g')

Você também pode gostar