viernes, 28 de octubre de 2011

MATLAB

MATLAB.
INTRODUCCIÓN.
 Matlab (abreviatura de MATrix LABoratory, "laboratorio de matrices") es un software matemático que ofrece un entorno de desarrollo integrado (IDE) con un lenguaje de programación propio (lenguaje M). Está disponible para las plataformas Unix, Windows y Apple Mac OS X.
Matlab es un programa interactivo para cálculo numérico y tratamiento de datos. Contiene muchas herramientas y utilidades que permiten además diversas funcionalidades, como la presentación gráfica en 2 y 3 dimensiones. Esos útiles están agrupados en "paquetes" (toolboxes). A Matlab se le pueden añadir paquetes especializados para algunas tareas (por ejemplo, para tratamiento de imágenes). Trabajar con Matlab comporta aprender un lenguaje simple. En esta introducción se explican los elementos básicos de este lenguaje.

Matlab es un programa command-driven, es decir, que se introducen las órdenes escribiéndolas una a una a continuación del símbolo » (prompt) que aparece en una interfaz de usuario (una ventana). Esta introducción contiene ejemplos que se pueden escribir directamente en la línea de comandos de Matlab. Para distinguir esos comandos, junto con la respuesta del programa, se emplean un tipo de letra diferente:
»2+2
ans = 4
Una manera de seguir esta introducción consiste en abrir Matlab en otra ventana, e ir copiando y pegando el comando a continuación del símbolo >>.
Es un software muy usado en universidades y centros de investigación y desarrollo. En los últimos años ha aumentado el número de prestaciones, como la de programar directamente procesadores digitales de señal o crear código VHDL.

HISTORIA.
Fue creado por Cleve Moler en 1984, surgiendo la primera versión con la idea de emplear paquetes de subrutinas escritas en Fortran en los cursos de álgebra lineal y análisis numérico, sin necesidad de escribir programas en dicho lenguaje. El lenguaje de programación M fue creado en 1970 para proporcionar un sencillo acceso al software de matrices LINPACK y EISPACK sin tener que usar Fortran.
En 2004, se estimaba que MATLAB era empleado por más de un millón de personas en ámbitos académicos y empresariales.[]
Matlab es un programa de cálculo numérico orientado a matrices. Por tanto, será más eficiente si se diseñan los algoritmos en términos de matrices y vectores.
Ejemplos:
Éste es el tradicional programa Hello World hecho con el lenguaje de MATLAB:
>> disp('Hola mundo');       % Muestra el mensaje.
Hola mundo


DISEÑO DE FILTROS DIGITALES.
En este ejemplo se diseña un filtro digital paso bajo de Butterworth y se muestra el módulo de su espectro además incluimos otro ejemplo de un tren de deltas para el análisis espectral:
close all                                % Cierra todas las ventanas.
clear all                                 % Borra todas las variables.
clc                                          % Limpia la pantalla.

Fc=200;                                 % Frecuencia de corte.
Fm=1000;                              % Frecuencia de muestreo.
BT=100;                                 % Banda de transición.
Rs=40;                                   % Ganancias.
rs=10^(-Rs/20);
Rp=2;
rp=(10^(Rp/20)-1)/(10^(Rp/20)+1);

[n1b,wn1]=buttord(2*Fc/Fm,2*(Fc+BT)/Fm,Rp,Rs);   % Orden del filtro
[B1,A1]=butter(n1b,wn1);                                                 % Coeficientes del filtro
h1=freqz(B1,A1);                                                % Respuesta en frecuencia
plot(abs(h1))                                                       % Representación de la respuesta.

 
COMANDOS BÁSICOS.
La notación para las operaciones matemáticas elementales es la siguiente:

 ^
 exponenciación
 *
 multiplicación
 /
 división
 +
 suma
 -
 resta
El orden en que se realizan las operaciones de una línea es el siguiente:
Primero, la exponenciación; luego, las multiplicaciones y divisiones; y finalmente, las sumas y las restas. Si se quiere forzar un determinado orden, se deben utilizar paréntesis, que se evalúan siempre al principio.
Por ejemplo; para hallar dos entre tres,
» 2/2+1
ans = 2

(en efecto: primero se calcula 2/2 y luego se suma 1).
» 2/(2+1)
ans = 0.6667

Primero se calcula el paréntesis (2+1) y luego se realiza la división.
Dos observaciones. El punto decimal es “.” no “,”. Y en Matlab, las mayúsculas y las minúsculas son distintas. Es decir, X es una variable diferente de x.

He aquí una tabla con algunas funciones elementales:

  sin
  seno
  cos
  coseno
  tan
  tangente
  sec
  secante
  csc
  cosecante
  cot
  cotangente
  exp
  exponencial
  log
  logaritmo natural
  sqrt
  raíz cuadrada
  abs
  valor absoluto
Para obtener las funciones trigonométricas inversas, basta añadir una a delante del nombre. Y para las funciones hiperbólicas, una h al final.
Por ejemplo; atanh(x) es el arcotangente hiperbólico de x:
» z=atanh(2)
z = 0.5493 + 1.5708i
(z es un número complejo).
Comandos relacionados con el sistema operativo:
  pwd
Present working directory
(directorio de trabajo actual)
  cd 
cambiar de directorio
  dir
listado de los ficheros del directorio actual

Estos comandos son muy similares a los análogos de MS-DOS o UNIX.
·         Guardar y cargar ficheros de datos. Se emplean los comandos save y load, respectivamente.
Para guardar datos: save [nombre del fichero] [variable] –ascii.
Para recuperar datos: load [nombre del fichero] [variable] –ascii.

Algunas funciones definidas sobre matrices:
 
det
determinante
inv
matriz inversa
poly
polinomio característico
'
transpuesta

GRÁFICOS.
Las posibilidades de Matlab son muy grandes. Se indica a continuación cómo realizar gráficos sencillos.
Veamos cómo se puede representar la función seno entre 0 y 10.
Para empezar creemos una variable x que vaya de cero a 10:
» x=0:0.1:10;
y a continuación, calculemos sin(x) almacenando el resultado en la variable y:
» y=sin(x);
Para trazar el gráfico, se emplea la función plot:
» plot(x,y)
y se obtiene en otra ventana el gráfico:
Entre los muchos comandos que se pueden utilizar para modificar los gráficos, es muy útil el empleado para cambiar la escala de los ejes. La orden es
axis([x1 x2 y1 y2])

donde x1, x2 son los límites inferior y superior del eje x, e y1 e y2 los del eje y.
También permite dibujar superficies. La forma más sencilla es mediante el comando ezsurf.
>>ezsurf('sin(x*y)',[-2 2 -2 2])
aunque se pueden realizar gráficas más sofisticadas:
>>t=0:0.001:0.009; >>v=900:1025; >>[TV]=meshgrid(t,v); >>aux1=16*pi^2*(T.^2).*((V-918).^2).*((V-1011).^2); >>aux2=aux1+(2*V-1929).^2; >>w=T./aux2; >>z=35000000*w; >>surfl(t,v,z);        % Este comando dibuja la superficie creada mediante las 
>>shading interp;    % ordenes anteriores.
>>colormap(pink);   %  Los siguientes sirven para modificar el dibujo obtenido.
>>rotate3d;              % Sirve para girar la figura mediante el ratón.
Para imprimir una figura, basta seleccionar print del menú de la figura.

SCRIPTS.
Realizar un programa en Matlab es fácil. Basta abrir un editor de texto (como el Bloc de Notas de Windows) y escribir los comandos uno a continuación de otro. Luego ese fichero de texto debe guardarse con la extensión .m, y a eso se le llama un script:

Una vez guardado el fichero (en el ejemplo, ndata.m) en el directorio actual, desde la línea de comandos de Matlab basta escribir ndata para que se ejecute el programa.
CÁLCULO SIMBÓLICO.
Hasta ahora, las operaciones que se han mostrado se han realizado con números. El toolbox de cálculo simbólico permite realizar cálculos abstractos:
» diff('sin(x)')
  ans = cos(x)

Las expresiones simbólicas se introducen entre apóstrofes.
A continuación se da una tabla con algunas funciones de este toolbox, junto con un ejemplo de cada una:
  diff
  derivada
  diff('sin(x)')
  int
  integral
  int('x^2')
  solve
  resolución de ecuaciones
  solve('x^2-3*x+2=0')
  ezplot
  gráficos
  ezplot('exp(x)')
Evidentemente, las expresiones pueden ser todo lo complicadas que se quiera.
» solve('x=cos(x)')
ans = .73908513321516064165531208767387
» int('(x^4+4*x^3+11*x^2+12*x+8)/((x^2+2*x+3)^2*(x+1))')
ans = log(x+1)+1/8*(-4*x-8)/(x^2+2*x+3)-
            1/4*2^(1/2)*atan(1/4*(2*x+2)*2^(1/2))

PANTALLA DEL PROGRAMA MATLAB.