Sunteți pe pagina 1din 11

Universidad de El Salvador 

Introducción al análisis numérico para Ingeniería Química/Alimentos a través de


Matlab/Octave. 
 
Capítulo 5: ​
CAS (Computer Algebra System)  
 
 
En  esta  sesión  vamos  a  explicar 
como  se  utiliza  la  herramienta 
Symbolic  Math  Toolbox,  que 
emplearemos  para  realizar 
cálculos  simbólicos,  es  decir, 
transformaciones  de   expresiones 
matemáticas.  Las  posibilidades 
son  enormes:  integración 
definida  e  indefinida, 
diferenciación,  resolución  de 
ecuaciones  diferenciales,  series, 
límites,  cálculo  matricial, 
operaciones  con  polinomios, 
simplificación  de  expresiones  algebraicas.  Finalmente,  las  expresiones 
algebraicas se pueden convertir en valores numéricos con precisión variable. 
 
Nota:  el  presente  capitulo  nos  introduce  al  análisis  a  través  del  CAS 
exclusivamente  en  Matlab.  Octave  cuenta  por  el  momento  con  el  paquete 
“symbolic”,  que  puede  descargarse  desde  la  página  oficial  del  proyecto.  sin 
embargo su uso difiere con el uso del Symbolic Math ToolBox de Matlab. 
 
● Declaración de variables simbólicas  
La  herramienta  Symbolic  Math  Toolbox  define  un  nuevo  tipo  de  dato 
denominado  objeto  simbólico,  que  representan  a  variables,  expresiones  y 
matrices. El comando ​ sym se usa para crear objetos simbólicos en MATLAB. El 
argumento  de  ​
sym es  una cadena de  caracteres (string) entre comillas simples. 
Por ejemplo,  

>> 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.2246e­016 
 
>> sin(sym('pi')) 
ans =0 
f​
Supongamos que queremos evaluar una función ​ x​
(​) para un determinado valor 
de ​

y= x^2 −2x ;  
x=1− √ 2 ;  
y= ( 1− √2 )^2 −2( 1− √2 )  
 
>> x=sym('1­sqrt(2)'); 
>> y=x^2­2*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*y­x 
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=(x­1)^3+2*(x+3)^2+x^2­2*x­2; 
>> 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^2­x+1/x­1/x^2)/(x­1+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^8­2*x^6­9*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^8­2*x^6­9*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=x2​x​
­​­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*(x­2))  
 
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​ u­v​
 se sustituye por ​ . 
>> syms x y; 
>> z=x^2­y^2; 
>> syms u v; 
>> z=subs(z,{x,y},{u+v,u­v}) 
 
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/6­1/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/6­1/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='x­y=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
n­1​
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^3­2*x­4) 
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​ .​
­ 3​5​​
x4​ .​
 + 2​ ​
x3​
75​ .​
 + 2​ ​
x2​
125​ .​
 ­ 3​ x ​
875​ .​
+ 1​25 
Cuando se expresa un polinomio de forma simbólica se utiliza la función ​
subs 
>> syms x; 
>> p=x^5­3.5*x^4+2.75*x^3+2.125*x^2­3.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^3­2*x­4; 
>> 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^3­2*x­4; 
>> 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^5­3.5*x^4+2.75*x^3+2.125*x^2­3.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 1­0.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: 
 
 
 
­Octave­Symbolic 
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/using­gnu­octave­to­solve­symbolic­3
noo92ojj7hi0­19/ 
 

S-ar putea să vă placă și