Tema 16: Cálculo simbólico usando MATLAB.

Anuncio
Tema 16: Cálculo simbólico usando MATLAB.
Declaración y conversión a objeto simbólico (syms, sym), expansión de
expresiones algebraicas (expand), resolución de expresiones algebraicas
(solve), simplificación de expresiones algebraicas (simplify), factorización
de expresiones algebraicas (collect), escritura en forma matemática de
una expresión simbólica (pretty), determinante de una matriz simbólica
(det), factorización de expresión algebraica (factor), conversión de
polinomios simbólicos a vector de coeficientes y viceversa (poly2sym,
sym2poly).
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
MATLAB tiene un conjunto de funciones para cálculo simbólico.
Lo primero que hay que hacer es declarar las variables que van a intervenir
como objetos simbólicos. Para esto se cuenta con la funciones “syms” y “sym”.
syms a b c: declara a, b y c como variables simbólicas. La variable “a” puede
ser una constante, una variable o una expresión en la que intervengan
constantes, variables, operadores aritméticos y funciones predefinidas.
M=sym(m): convierte un objeto numérico “m” en un objeto simbólico “M”.
Ejemplos:
>> syms x
(declaración de x como variable simbólica)
>> expand((x+1)^3)
(desarrolla la expresión en suma de monomios)
ans =
x^3+3*x^2+3*x+1
>> pretty(expand((x+1)^3)) (expresa el resultado con la notación habitual)
x 3 + 3x 2 + 3x + 1
>> solve(‘-x^2-2*x+3=0’, ’x’) (resuelve la ecuación en la variable “x”)
ans = [ -3]
[ 1]
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “expand”
expand(s): escribe cada elemento de la expresión simbólica s como producto
de sus factores. Normalmente se usa para funciones polinómicas,
trigonométricas, exponenciales y logarítmicas.
Ejemplos:
>> syms x y v
>> v = [exp(x + y), log(x^2/y)]
>> expand((x+1)^3)
retorna x^3+3*x^2+3*x+1
>> expand(sin(x+y))
retorna sin(x)*cos(y)+cos(x)*sin(y)
>> expand(v)
retorna [exp(x)*exp(y), 2*log(x)-log(y)]
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “simplify”
simplify(s): simplifica cada elemento de la expresión simbólica s.
Ejemplos:
sin 2 (x) + cos 2 (x) = 1
>> syms x
>> simplify(sin(x)^2 + cos(x)^2)
e
c log α + β
→
retorna 1
(α + β )
1
c
2
>> syms c alpha beta
>> simplify(exp(c*log(sqrt(alpha+beta))))
retorna (alpha+beta)^(1/2*c)
x 2 + 5x + 6
→ x+2
x +3
>> syms x
>> simplify((x ˆ 2+5*x+6)/(x+3))
retorna x+2
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “collect”
collect(s,v): reagrupa cada uno de los elementos en s como un polinomio en v y
reescribe s en términos de potencias de v.
Ejemplos:
x 2y + yx − x 2 − 2x
→ (y − 1)x 2 + (y − 2)x
>> syms x y
>> collect(x^2*y + y*x - x^2 - 2*x)
−
1 −2 x
3 −2 x
xe
e
+
16
4
retorna (y-1)*x^2+(y-2)*x
3  −2 x
 1
→ − x +
e
16 
 4
>> syms x f
>> f = -1/4*x*exp(-2*x)+3/16*exp(-2*x)
>> collect(f,exp(-2*x))
retorna (-1/4*x+3/16)*exp(-2*x)
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “solve”
Solución simbólica de expresiones algebraicas.
Ejemplos:
>> solve('p*sin(x) = r')
escoge 'x' como incógnita y retorna
ans = asin(r/p)
>> [x,y] = solve('x^2 + x*y + y = 3', 'x^2 - 4*x + 3 = 0')
resuelve el sistema y retorna
x = [ 1] [ 3]
y= [
1] [ -3/2]
>> [u,v] = solve('a*u^2 + v^2 = 0', 'u - v = 1')
escoge 'a’ como parámetro y
resuelve las 2 ecuaciones usando como incógnitas u y v.
u=
v=
[ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))+1]
[ 1/2/(a+1)*(-2*a+2*(-a)^(1/2))]
[ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))+1]
[ 1/2/(a+1)*(-2*a-2*(-a)^(1/2))]
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “solve”
>> [a,u,v] = solve('a*u^2 + v^2 = 0', 'u - v = 1', 'a^2 - 5*a + 6 = 0')
resuelve las 3 ecuaciones usando como incógnitas a, u y v.
a=
u=
v=
[ 2]
[ 1/3+1/3*i*2^(1/2)]
[ -2/3+1/3*i*2^(1/2)]
[ 2]
[ 1/3-1/3*i*2^(1/2)]
[ -2/3-1/3*i*2^(1/2)]
[ 3]
[ 1/4+1/4*i*3^(1/2)]
[ -3/4+1/4*i*3^(1/2)]
[ 3]
[ 1/4-1/4*i*3^(1/2)]
[ -3/4-1/4*i*3^(1/2)]
>> aa = eval(a); uu = eval(u); vv = eval(v);
aa =
uu =
vv =
2
0.3333 + 0.4714i
-0.6667 + 0.4714i
2
0.3333 - 0.4714i
-0.6667 - 0.4714i
3
0.2500 + 0.4330i
-0.7500 + 0.4330i
3
0.2500 - 0.4330i
-0.7500 - 0.4330i
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “solve”
>> [x, y] = solve('x^2*y^2 - 2*x - 1 = 0', 'x^2 - y^2 - 1 = 0')
x=
y=
[ -1/2+1/2*i*3^(1/2)]
[ 1/2*(-6-2*i*3^(1/2))^(1/2)]
[ -1/2+1/2*i*3^(1/2)]
[ -1/2*(-6-2*i*3^(1/2))^(1/2)]
[ -1/2-1/2*i*3^(1/2)]
[ 1/2*(-6+2*i*3^(1/2))^(1/2)]
[ -1/2-1/2*i*3^(1/2)]
[ -1/2*(-6+2*i*3^(1/2))^(1/2)]
[
1/2*5^(1/2)+1/2]
[
1/2*(2+2*5^(1/2))^(1/2)]
[
1/2*5^(1/2)+1/2]
[
-1/2*(2+2*5^(1/2))^(1/2)]
[
1/2-1/2*5^(1/2)]
[
1/2*(2-2*5^(1/2))^(1/2)]
[
1/2-1/2*5^(1/2)]
[
-1/2*(2-2*5^(1/2))^(1/2)]
x=
y=
-0.5000 + 0.8660i
0.3406 - 1.2712i
-0.5000 + 0.8660i
-0.3406 + 1.2712i
-0.5000 - 0.8660i
0.3406 + 1.2712i
-0.5000 - 0.8660i
-0.3406 - 1.2712i
1.6180
1.2720
1.6180
-1.2720
-0.6180
0.0000 + 0.7862i
-0.6180
-0.0000 - 0.7862i
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “dsolve”
Solución simbólica de ecuaciones diferenciales ordinarias. La variable
independiente es “t”. La letra “D” denota diferenciación respecto a la variable
independiente (D es d/dt, D2 es d2/dt2). Las condiciones iniciales se especifican
como “y(a)=b” o “Dy(a)=b”.
Ejemplos:
>> dsolve('Dx = -a*x')
retorna
ans = C1 * exp(-a*t)
>> x = dsolve('Dx = -a*x', 'x(0) = 1‘, ‘s’) retorna
>> y = dsolve('(Dy)^2 + y^2 = 1','y(0) = 0')
>> aa = dsolve('Dy = y^2*(1-y)')
x = exp(-a*s)
retorna
y = [ sin(t)] [ -sin(t)]
retorna
Warning: Explicit solution could not be found; implicit solution returned.
aa = t+1/y-log(y)+log(-1+y)+C1=0
>> [x, y] = dsolve('Dx = y', 'Dy = -x', 'x(0) = 0', 'y(0) = 1') retorna
x = sin(t)
y = cos(t)
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “subs”
subs(s, antiguo, nuevo): sustituye “antiguo” con “nuevo” en la expresión
simbólica s.
Ejemplos:
>> a = 980; C1 = 3;
>> y = dsolve('Dy = -a*y')
produce
y = C1 * exp(-a*t)
>> subs(y)
produce ans = 3 * exp(-980*t)
>> syms a b alpha
>> subs(cos(a)+sin(b), {a, b}, {alpha, 2})
retorna
cos(alpha)+sin(2)
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “findsym”
findssym(expr): determina cuales son las variables simbólicas en la expresión
simbólica “expr”. Las variables se escriben en orden alfabético y separadas por
coma. Si no encuentra variables simbólicas, findsym retorna una cadena vacía.
Ejemplo:
>> t = 4; syms x y; findsym(x^3+t*x+y)
retorna
ans = x ,y
>> b = 1; syms x1 y alpha
>> findsym(cos(alpha)*b*x1 + 14*y)
retorna
ans = alpha, x1, y
>> syms y i j; findsym(y*(4+3*i) + 6*j)
retorna
ans = y
Función “pretty”
pretty(expr): devuelve la expresión simbólica escrita en notación matemática.
Esta expresión no sirve para ser utilizada en cálculos posteriores con MATLAB,
sólo es una presentación “más bonita” de los resultados.
>> b = 1; x1 = 1; syms aplha y;
>> pretty(cos(alpha)*b*x1 + 14*y)
retorna
Prof. Saúl. Buitrago y Oswaldo Jiménez
cos(alpha) + 14 y
16. Cálculo simbólico usando MATLAB
Función “det” y “poly”
También es posible definir matrices simbólicas del siguiente modo:
>> M=sym(’[a b; c d]’)
retorna
M=
[ a, b]
[ c, d]
y ahora calcular, por ejemplo su determinante:
>> det(M)
retorna
ans = a*d-b*c
y su polinomio característico:
x − a
det (Ix − M ) = det
 c
>> poly(M)
retorna
b 
 = (x − a )(x − d ) − bc
x −d
ans = x^2-x*d-a*x+a*d-b*c
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “factor”
factor(expr): factoriza la expresión (ya sea numérica o simbólica)
>> factor(x^2+2*x+1)
retorna
ans = (x+1)^2
Función “poly2sym”
Define un polinomio simbólico a partir de sus coeficientes
>> poly2sym([1 2 3 -2 10])
>> poly2sym([1 0 -2 -5],'t')
retorna ans = x^4+2*x^3+3*x^2-2*x+10
retorna ans = t^3-2*t-5
Función “sym2poly”
Transforma un polinomio simbólico en un vector con sus coeficientes
>> sym2poly(x^3 - 2*x - 5)
retorna
Prof. Saúl. Buitrago y Oswaldo Jiménez
[1 0 -2 -5]
16. Cálculo simbólico usando MATLAB
Función “limit”
Calcula el limite hacia un determinado valor de una expresión simbólica.
Ejemplos:
sin(x )
x →0
x
lim
>> syms x
>> limit(sin(x)/x,0)
retorna ans = 1
n
lim
n →∞ n + 1
>> syms n
>> limit(n/(n+1), n, inf) retorna ans = 1
n 3 + 3n 2 − 2n
lim
n →∞
3n 3 − 1
>> limit((n^3+3*n^2-2*n)/(3*n^3-1),inf) retorna ans = 1/3
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “diff”
diff(f, ‘x’, n): calcula la n-esima derivada respecto a x de una expresión
simbólica f.
f = log(x )
−
1
x2
>> diff(‘log(x)’, ‘x’, 2) retorna ans = -1/x^2
f = exp( z 3 ) + sin2 (z )
3z 2 exp( z 3 ) + 2 sin(z ) cos(z )
>> f = ’exp(z^3)+sin(z)^2’;
>> diff(f) retorna ans = 3*z^2*exp(z^3)+2*sin(z)*cos(z)
exp(a + x )
f =a
sin(ax )
exp(a + x ) a exp(a + x ) a exp(a + x ) cos(ax )x
+
−
sin(ax )
sin(ax )
sin2 (ax )
>> f = ’a*exp(a+x)/sin(a*x)’;
>> diff(f, ’a’)
retorna
ans =
exp(a+x)/sin(a*x)+a*exp(a+x)/sin(a*x)-a*exp(a+x)/sin(a*x)^2*cos(a*x)*x
Prof. Saúl. Buitrago y Oswaldo Jiménez
16. Cálculo simbólico usando MATLAB
Función “int”
La integración se lleva a cabo con el comando int. Es posible hacer
integrales definidas o indefinidas:
>> int(x^2,’x’)
retorna
ans = 1/3 * x^3
>> f = ’a*exp(a*x)’;
>> int(f, ’x’)
retorna
ans = exp(a*x)
>> int(f,’x’, 0, 1) retorna
ans = exp(a)-1
>> int('2*x^2*(19+12*x^2)/(7*(x^2+1))','x',0,1) retorna
ans = 22/7-1/2*pi
Es importante observar que el cálculo de una integral definida mediante
la última sentencia es un cálculo simbólico, de manera que integrales
como la siguiente
>> int(’exp(x^2)’, ’x’, 0, 1)
retorna
ans = -1/2*i*erf(i)*pi^(1/2)
no tienen mucho sentido, pues el resultado viene expresado mediante 2
x
una función extraña, ya que no se conoce una primitiva de la función e
función error
erf (x ) =
2
π
x
∫e
0
−t 2
Prof. Saúl. Buitrago y Oswaldo Jiménez
dt
16. Cálculo simbólico usando MATLAB
Función “taylor”
Calcula el desarrollo en serie de Taylor alrededor de un punto dado, para
una función simbólica dada. Por defecto el polinomio es de grado 5 y
alrededor del cero.
>> taylor(exp(-x))
retorna
ans = 1-x+1/2*x^2-1/6*x^3+1/24*x^4-1/120*x^5
>> taylor(log(x), 6, 1)
retorna (grado 5 y alrededor del 1)
ans = x-1-1/2*(x-1)^2+1/3*(x-1)^3-1/4*(x-1)^4+1/5*(x-1)^5
>> taylor(sin(x), pi/2, 8)
retorna (grado 7 y alrededor de pi/2)
ans = 1-1/2*(x-1/2*pi)^2+1/24*(x-1/2*pi)^4-1/720*(x-1/2*pi)^6
>> syms t
>> taylor(x^t, 3, t)
retorna
(grado 2, respecto a la variable t y alrededor de 0)
ans = 1+log(x)*t+1/2*log(x)^2*t^2
Prof. Saúl. Buitrago y Oswaldo Jiménez
Descargar