Documente Academic
Documente Profesional
Documente Cultură
>> sym('x')
>> sym('2')
>> sym('1/3')
Hemos creado tres objetos simbólicos, ‘x ’ es una variable, ‘2’ es un número y
‘1/3’ es una fracción. Vamos a apreciar la diferencia entre operar con números
a operar con objetos simbólicos.
>> sqrt(2)
ans = 1.4142
>> sqrt(sym('2'))
ans =2^(1/2)
>> 2/3+1/2
ans = 1.1667
>> sym('2/3')+sym('1/2')
ans =7/6
>> sin(pi)
ans = 1.2246e016
>> sin(sym('pi'))
ans =0
f
Supongamos que queremos evaluar una función x
() para un determinado valor
de
x
y= x^2 −2x ;
x=1− √ 2 ;
y= ( 1− √2 )^2 −2( 1− √2 )
>> x=sym('1sqrt(2)');
>> y=x^22*x
y =(2^(1/2) 1)^2 + 2*2^(1/2) – 2
>> simplify(y)
ans =1
sym nos permite crear y dar un valor inicial a una variable simbolica x
. Se ha
creado una variable simbólica ‘ y’
x’ y otra variable simbólica ‘ , tal como puede
verse en la ventana Workspace. El comando syms permite declarar más de
una variable simbólica y no precisa de comillas simples, por lo que se utilizará
con mayor frecuencia.
>> syms x y;
>> s=x+2*yx
s =2*y
>> r=sqrt(x^2+y^2);
● Funciones que trabajan con expresiones simbólicas.
Vamos ahora a estudiar las funciones que trabajan con expresiones simbólicas
1. Expand: realiza operaciones con polinomios, por ejemplo, devuelve el
polinomio p
a partir de sus factores.
>> syms x;
>> p=(x 3)*(x 1)*(x 2);
>> expand(p)
ans =x^3 6*x^2 + 11*x – 6
>> p=(x1)^3+2*(x+3)^2+x^22*x2;
>> expand(p)
ans =x^3 + 13*x + 15
Se ha declarado una variable simbólica x con
syms y se crea una variable
simbólica
y y otra variable simbólica, por defecto,
ans donde se guarda el
resultado de expand .
2. Simplify: simplifica una expresión algebraica.
>> syms x;
>> y=(x^2x+1/x1/x^2)/(x1+1/x);
>> simplify(y)
ans =x 1/x
3. Factor:
Como su nombre indica, factoriza una expresión. Primero vamos a
probar con números y a continuación, con expresiones simbólicas
360= 2^5 ∙ 3^2 ∙5
>> factor(360)
ans =
2 2 2 3 3 5
>> factor(sym('360'))
ans =2^3*3^2*5
y= x 8 −2 x 6 −9 x 4 +2 x 2 +8
>> syms x;
>> factor(x^82*x^69*x^4+2*x^2+8)
ans =(x 1)*(x 2)*(x + 2)*(x + 1)*(x^2 + 2)*(x^2 + 1)
4. Subs: Evalúa numéricamente una expresión simbólica, para un
determinado valor de la variable simbólica x.
>> syms x;
>> y=x^82*x^69*x^4+2*x^2+8;
>> subs(y,x,2)
ans = 0
>> subs(y,x,0.5)
ans = 7.9102
a
Valores que se asignan a los parámetros , b c
y para resolver una
determinada ecuación de segundo grado. Una tabla de valores de la función
y=x2x
6.
>> syms a b c x;
>> y=a*x^2+b*x+c;
>> yy=subs(y,{a,b,c},{1 1 6})
yy =x^2 x – 6
>> subs(yy,[2:0.5:2])
ans =
0 2.2500 4.0000 5.2500 6.0000 6.2500 6.0000 5.2500 4.0000
subs
Hay que tener cuidado con la función , ya que nos puede pasar de un
objeto simbólico a una variable MATLAB. Los objetos simbólicos aparecen
claramente diferenciados de las variables en la ventana Wokspace, tal como
vemos en la figura, más abajo.
>> syms a x;
>> y=sqrt(a*(x2))
y =(a*(x 2))^(1/2)
>> yy=subs(y,a,5)
yy =(5*x 10)^(1/2)
>> z=subs(yy,x,3)
z = 2.2361
z
Si queremos que siga siendo simbólica, tenemos que escribir
>> z=subs(yy,x,sym('3'))
z =5^(1/2)
La respuesta exacta es raíz cuadrada de cinco. Por tanto, tenemos que
manejar con cuidado la función subs y fijarnos en la ventana Wokspace de las
variables.
Una variable simbólica puede ser sustituida por otra variable simbólica. Por
x
ejemplo, la variable u+v
se sustituye por y la variable y uv
se sustituye por .
>> syms x y;
>> z=x^2y^2;
>> syms u v;
>> z=subs(z,{x,y},{u+v,uv})
z =(u + v)^2 (u v)^2
>> simplify(z)
ans =4*u*v
5. Solve: Resuelve una ecuación o un sistema de ecuaciones. Por ejemplo,
calcular las raíces de la ecuación
X^2 +x/6 – 1/3 =0
>> syms x;
>> solve(x^2+x/61/3)
ans =
1/2
2/3
solve
Por defecto, iguala la expresión simbólica a cero.Una forma equivalente
de hacer lo mismo es la siguiente:
>> eq='x^2+x/61/3=0';
>> solve(eq)
ans =
1/2
2/3
Ejemplo la conocida ecuación de segundo grado:
a x 2 +bx+c=0 x 1,2 = −b± b 2 −4ac 2a
>> syms a b c x;
>> eq='a*x^2+b*x+c=0';
>> solve(eq,x)
ans =
(b + (b^2 4*a*c)^(1/2))/(2*a)
(b (b^2 4*a*c)^(1/2))/(2*a)
Hemos añadido un segundo argumento a solve para indicarle que deberá
resolver la ecuación de segundo grado respecto de la variable simbólica x, que
previamente hemos declarado con syms .
Resolver el sistema de dos ecuaciones con dos incógnitas
3x+2y=−1 and x−y=2
>> syms x y;
>> eq1='3*x+2*y=1';
>> eq2='xy=2';
>> [x1 y1]=solve(eq1,eq2,x,y)
x1 =3/5
y1 =7/5
● Polinomios y fracciones polinómicas
Las funciones polinómicas son unas de las más importantes en Matemáticas,
MATLAB dispone de varias funciones que tratan con polinomios.
n
Un polinomio de grado a
de coeficientes a
1,
a
2..., a
n,
n+1 es la expresión:
a
1x +a
n
+...+a
2x
n1
nx+a
n+1
p
En MATLAB se representa por el vector fila a
=[ a
1,
a
2..., a
n,
]. El polinomio
n+1
p
=
x3
x2
2 x
+2 p
se representa por el vector =[1 2 1 2].
Los polinomios se pueden representar de forma simbólica mediante la función
poly sym
2 .
>> p=[1 2 1 2];
>> poly2sym(p)
ans =x^3 2*x^2 + x 2
A su vez un polinomio en forma simbólica se puede convertir en el vector
formado por sus coeficientes mediante sym 2
poly
>> syms x;
>> sym2poly(x^32*x4)
ans = 1 0 2 4
6. Valor de un polinomio: Calculamos el valor de polinomio cuando se
conoce el valor de la variable x
.
p
Sea =
x5 .
35
x4 .
+ 2
x3
75 .
+ 2
x2
125 .
3 x
875 .
+ 125
Cuando se expresa un polinomio de forma simbólica se utiliza la función
subs
>> syms x;
>> p=x^53.5*x^4+2.75*x^3+2.125*x^23.875*x+1.25;
>> subs(p,x,1.5)
ans = 0.6250
La función
polyval nos proporciona este valor cuando se expresa el polinomio
en forma de vector formado por los coeficientes.
>> p=[1 3.5 2.75 2.125 3.875 1.25];
>> polyval(p,1.5)
ans = 0.6250
7. Suma de polinomios
>> syms x;
>> p1=x^32*x4;
>> p2=x^2+3*x+4;
>> p1+p2
ans =x^3 + x^2 + x
Para sumar dos polinomios en forma de vectores, los vectores tiene que tener
las mismas dimensiones
>> p1=[1 0 2 4];
>> p2=[2 3 4];
>> p1+p2
??? Error using ==> plus
Matrix dimensions must agree.
>> p2=[0 2 3 4];
>> p1+p2
ans = 1 2 1 0
8. Producto de dos polinomios
>> clear
>> syms x;
>> p1=x^32*x4;
>> p2=x^2+3*x+4;
>> p=p1*p2
p =(x^2 + 3*x + 4)*( x^3 + 2*x + 4)
>> expand(p)
ans =x^5 + 3*x^4 + 2*x^3 10*x^2 20*x 16
Producto de dos polinomios mediante la función
conv
>> p1=[1 0 2 4];
>> p2=[1 3 4];
>> p=conv(p1,p2)
p = 1 3 2 10 20 16
9. Cociente
x3+5x2+11x+13 x+1
x2+2x+4 = (x + 3) + x2+2x+4
>> syms x;
>> p1=x^3+5*x^2+11*x+13;
>> p2=x^2+2*x+4;
>> p=p1/p2
p =(x^3 + 5*x^2 + 11*x + 13)/(x^2 + 2*x + 4)
>> simplify(p)
ans =x + (x + 1)/(x^2 + 2*x + 4) + 3
La función
deconv nos proporciona el cociente y el resto de la división entre
dos polinomios.
>> p1=[1 5 11 13];
>> p2=[1 2 4];
>> [q r]=deconv(p1,p2)
q = 1 3
r = 0 0 1 1
10. Raíces de un polinomio
Cuando se expresa un polinomio de forma simbólica se utiliza la función
solve
>> syms x;
>> p=x^53.5*x^4+2.75*x^3+2.125*x^23.875*x+1.25;
>> solve(p)
ans =
2
1
1/2
i/2 + 1
1 i/2
Cuando se expresa un polinomio como vector formado por los coeficientes, se
emplea la función
roots
.
>> p=[1 3.5 2.75 2.125 3.875 1.25];
>> roots(p)
ans =
2.0000
1.0000
1.0000 + 0.5000i
1.0000 0.5000i
0.5000
Conocidas las raíces del polinomio podemos calcular el vector que guarda los
coeficientes mediante poly
>> r=[2 1 1+0.5i 10.5i 0.5]; %raíces del polinomio
>> poly(r)
ans = 1.0000 3.5000 2.7500 2.1250 3.8750 1.2500
p
Obtenemos el polinomio a partir de sus raíces.
Funciones adicionales.
Funcion. Explicacion.
Abs(x) Valor absoluto o magnitud de un numero complejo
Acos(x) Inversa del coseno
Acosh(x) Inversa del coseno hiperbolico
Angle(x) Angulo de un numero complejo
Asin(x) Inversa del seno
Asinh(x) Inversa del seno hiperbólico
atan(x) Inversa de la tangente
Ceil(x) Redondea hacia mas infinito
Conj(x) Complejo conjugado
Exp(x) exponencial
Fix(x) Redondea hacia cero
Floor(x) Redondea hacia menos infinito
Imag(x) Parte imaginaria de un nuemor complejo
Log(x) Logaritmo natural
Log10(x) Logaritmo decimal
Real(x) Pparte real de un numero complejo
Rem(x,y) Resto después de la división
Round(x) Redondea hacia elentero mas prosimo
Sign(x) Devuelve el signo del argumento
Sin(x) seno
Sqrt(x) Raíz cuadrada
Ejemplo aplicado:
Una caldera es alimentada con metanol como combustible. Se sabe que,
según los parámetros de dicha caldera, se requieren 790.63 J al interior de
la estufa. La temperatura ambiente ronda los 30°C. Un diseñador novato
quiere conocer el estimado de la temperatura adiabática de llama
alcanzada. Para ello él supone, que una buena aproximación viene dada
por la ecuación de Cp de gas ideal, dadas las constantes:
A=13.431
B=51.28x10^3
C=131.13x10^6
Teniendo a la mano la ecuación
Cp/R=A+BT+CT^2
T2
si se sabe que ΔH = ∫ C p
T1
Solución:
%definir constantes
R=8.314 %J/molK;
A=13.431;
B=51.28x10^3;
C=131.13x10^6;
sym T;
Cp=A+BT+CT^2 ;
%definimos el calor leído
deltaH=790.63;
T= solve(deltaH= R*int(Cp,T,303.15,x),x);
%int(expresion, variable, lim_inf, lim_sup)
%solve(expresion,variable)
En este simple algoritmo hemos puesto en práctica el uso de la función int()
y la función solve ().
Otros recursos para el análisis
CAS
Existen una amplia variedad de
productos de software que
pueden ser utilizados como
programas de álgebra simbólicos
o CAS. dentro de ellos podemos
mencionar:
OctaveSymbolic
Al igual que la gran mayoria de librerias y paquetes de GNU Octave, (tal
como GNUPlot para plotear graficas) el paquete “Symbolic”, historicamente
basado en GiNaC, actualmente basado en SymPy, ambos proyectos que no
tienen ninguna relacion con Octave. No obstante, los desarrolladores de
Octave tuvieron a bien incluir algunas de sus librerias (esto es permitible
bajo las licencias libres), a fin de poder integrar algunas funciones CAS al
software y hacerlo mas robusto. Sin embargo dicho paquete se instala como
un extra, y por ahora, no cuenta con una gran compatibilidad con Matlab.
SymPy
Librería de el lenguaje Python para el uso de variables simbólicas. cuenta
con todos los algoritmos básicos, además de que el usuario puede crear
sus propios scrips. Dado a que esta escrita en C (al igual que Python) es
bastante versatil.
TI BASIC
Es el estándar en todas las calculadoras de Texas Instruments. Es un
lenguaje de programación con análisis simbólico embebido; esto le permite
al usuario hacer uso de funciones simbolicas sin necesidad de salir de la
hoja de calculo, o pantalla de calculos.
Maxima
Maxima es un descendiente de Macsyma, el legendario sistema de álgebra
computacional desarrollado a finales de 1960 en el MIT. Maxima es un
motor de cálculo simbólico escrito en lenguaje
Lisp
publicado bajo
licencia
GNU GPL .
EigenMath
Eigenmath es un programa sencillo y libre
, de álgebra computacional,
desarrollado por George Weigt. Está publicado bajo una licencia libre, y
dado a que está escrito completamente en lenguaje C, ha sido portado a
windows, Linux, móviles Android, calculadoras nspire, e incluso cuenta con
una versión para Nintendo DS.
YaCAS
Programa de Álgebra Computacional libre y de código abierto. Disponible
para Linux, Windows y MacOs.
Axiom y OpenAxiom:
Originalmente desarrollado por investigadores en IBM bajo el nombre de
Scratchpad, Axiom ha estado en desarrollo desde 1973, aunque
originalmente fue un producto comercial, ahora es de código abierto
y
software libre. Es publicado bajo una licencia modificada BSD en dos
comunidades de desarrollo distintas: Axiom y OpenAxiom. Actualmente
OpenAxiom cuenta con una versión para windows.
Cabe mencionar, que distintos paquetes de software utilizan distintas
funciones para realizar las operaciones básicas. Vale la pena una pequeña
documentación al respecto.
Referencias y recursos
http://www.mathworks.com/help/symbolic/mupad_ref/solve.html?searchHigh
light=solve
https://en.wikipedia.org/wiki/List_of_computer_algebra_systems
http://octave.sourceforge.net/symbolic/overview.html
https://elsaghir.wordpress.com/article/usinggnuoctavetosolvesymbolic3
noo92ojj7hi019/