ÍNDICE


 
TOOLBOX DE MATEMÁTICAS SIMBÓLICAS
INTRODUCCIÓN
   Hasta ahora hemos aprendido a usar MATLAB como una calculadora de gama alta, programable, capaz de realizar y manipular gráficos, ... Pero incluso la calculadora más potente tiene sus limitaciones, sólo manipulan números.
   El MATLAB básico debe tener números con los que trabajar, o variables a las que se les a asignado un valor numérico, por ejemplo, no podemos preguntar a MATLAB por el seno de una variable a la que no se le a asignado valor previamente.
 
» y=sin(x)
??? Undefined function or variable 'x'.

   Ahora estudiaremos como conseguir que MATLAB manipule expresiones de este tipo (expresiones simbólicas), formadas por símbolos matemáticos y no sólamente números. Por ejemplo, son expresiones simbólicas las siguientes
 

   Las herramientas usadas para crear y manipular estas expresiones  forman la toolbox de matemáticas simbólicas. Existen herramientas para combinar, simplificar, diferenciar, integrar, ... Otras herramientas son usadas para resolver de manera exacta problemas de álgebra lineal, evitando los errores que vienen aparejados con los métodos númericos usualmente utilizados.
   La toolbox estaconstruida sobre el programa MAPLE, que es el análogo a MATLAB en cuanto a capacidad y potencia, pero dentro de la manipulación simbólica.

CREACIÓN DE EXPRESIONES SIMBÓLICAS
   En MATLAB las expresiones simbólicas son cadenas de caracteres que representan números, funciones, operadores y variables. Las variables no necesitan tener un valor predefinido. Presentemos algunos ejemplos de expresiones simbólicas con su equivalente en MATLAB
 
EDU» 'cos(x^2)'
ans =
cos(x^2)
EDU» sym('cos(x^2)')
ans =
cos(x^2)
EDU» int('x/log(x)') 
ans = 
-Ei(1,-2*log(x)) 
EDU» int(sym('x/log(x)'))
ans =
-Ei(1,-2*log(x))s

   En ambos casos, la primera expresión ha sido definida implicitamente, usando comillas simples para decirle a MATLAB que es una cadena a la que se le pueden aplicar operadores y funciones simbólicas, la segunda expresión es definida explicitamente, para decirle a MATLAB que es una expresión simbólica.
   En MATLAB la forma fun('expr') es equivalente a fun expr, donde fun es una función y expr es una cadena de caracteres. Así, por ejemplo, MATLAB entiende por igual las formas diff('x^2-2*x') y diff x^2-2*x. Por supuesto, si las expresiones se complican, resulta más comodo e intuitivo usar la segunda forma, pero ésta requiere que el argumento sea una cadena sin espacios intercalados.
 

EDU» diff('x^2-2*x')
ans = 
2*x-2 
EDU» diff x^2-2*x 
ans = 
2*x-2
EDU» diff x^2- 2*x
??? Error using ==> sym/sym (char2sym)
x^2- is not a valid symbolic expression.
Error in ==> C:\MATLAB_SE_5.3\toolbox\symbolic\@sym\sym.m
On line 92  ==>    S = char2sym(x);
Error in ==> C:\MATLAB_SE_5.3\toolbox\symbolic\@char\diff.m
On line 9  ==> y = diff(sym(f),varargin{:});

   También debemos tener cuidado con las llamadas constantes simbólicas, que no son más que expresiones simbólicas sin variables, a menudo no se distinguen de los números propiamente dichos. Una expresión simbólica como '(3*6-3)/5' es una cadena de caracteres con todo lo que ello provoca.
 

EDU» x='(3*6-3)/5'
x =
(3*6-3)/5
EDU» ischar(x) % comprobamos si x es una cadena
ans =
     1
EDU» x+1
ans =
    41    52    43    55    46    52    42    48    54
EDU» y=symop(x)
y =
(3*6-3)/5 
EDU» ischar(y)
ans =
     0
EDU» y+1
ans = 
4
VARIABLES SIMBÓLICAS
   Cuando trabajamos con expresiones simbólicas con más de una variable, sólo una de ellas es la variable independiente. Si no se indica cuál es esta variable, MATLAB asigna una por defecto siguiendo las siguientes reglas
  • La única letra minúscula distinta de i y j que no forme parte de una palabra.
  • Si no es única se elige x
  • Sino la más cercana alfabéticamente a x
  • En caso de empate se elige el caracter posterior alfabéticamente
   La función symvar nos proporciona la variable independiente de una expresión simbólica.
   Además, en expresiones con varias variables, algunas podran ser simbólicas y otras no (tienen un valor definido previamente). Por ejemplo, supongamos que las variables a y b no son simbólicas y que x sí lo es, una expresión como 'a*x+b' es una expresión simbólica con TRES variables simbólicas. Si deseamos trabajar con una expresión del tipo anterior pero donde las variables a y b conserven sus valores numéricos previos deberemos declarar simbólica sólo la variable x usando la instrucción sym
 
EDU» a=2;b=1;
EDU» f='a*x+b'
f =
a*x+b
EDU» subs(f,2)
ans =
2*a+b
EDU» subs(f,'a',2)
ans =
2*x+b
EDU» x=sym('x')
x =
x
EDU» f=a*x+b
f =
2*x+1
EDU» subs(f,3)
ans =
     7
 OPERACIÓNES SIMBÓLICAS
   La mayoría de las funciones simbólicas actuan sobre expresiones simbólicas y devuelven otra expresión simbólica, aunque a veces el resultado parezca un número.
   No vamos a entrar con detalle a analizar las multiples funciones simbólicas disponibles, aconsejamos que se utilice la ayuda para conocerlas. Sólamente citaremos la función subs que hemos utilizado en el ejemplo anterior y la función eval, además de la  posibilidad de trabajar con una aritmética de precisión variable como se observó en el tema 2 de este tutorial.
FUNCIONES SIMBÓLICAS VS. FUNCIONES .M
   Acabamos este tutprial con un ejemplo de un pequeño problema con el que se enfrenta cualquier persona que decida diseñar sus propios algoritmos en MATLAB.
   Supongamos que deseamos implementar una función propia para aproximar la integral de una función F en un intervalo [a,b]. Se nos puede ocurrir usar alguno de los métodos conocidos de integración númerica para implementar una función como
function integral=mimetodo(F,a,b)
   Se nos puede plantear entonces el dilema de como introducir la variable de entrada F, como una expresión del tipo '2*x^2-1' o como una expresión del tipo 'funcion', donde funcion.m es a su vez una función como la que sigue
function y=funcion(x)
y=2*x-1;                    
   Cada alternativa tienes sus desventajas, la primera parece más intuitiva y profesional, pero lleva consigo los problemas inherentes a trabajar con expresiones simbólicas y puede ser complicado usarla cuando quiero trabajar con funciones de varias variables o funciones con parámetros.
   La segunda en cambio nos obliga a definir cada función que queramos usar en nuestro algoritmo como una función .m (o a modificar uno ya creado). Esto provoca que si mi en algoritmo necesito, por ejemplo, derivar mi función, no pueda hacerlo simbólicamente, por lo que me veo obligado a introducirla como otra variable de entrada.
   No hay regla general, en ocasiones nos conviene optar por una u otra alternativa, o podemos optar por cualquiera, o estaremos obligados a usar una de las dos.
   Por último, otra opción poco profesional, pero recomendable en ocasiones, es no usar funciones para mis algoritmos, sino un archivo Script a modo de plantilla del tipo
a=0;                                                                 
b=1;                                                                  
F='2*x^2-1'; (o no introducimos F y usamos funciones .m)
ALGORITMO                                                    
cambiando entonces las primeras variables podremos resolver nuestro problema en cualquier caso.
 


ÍNDICE