Introduccion Al Matlab
Introduccion Al Matlab
Contenidos
1. Generalidades
4. Operaciones
• Manipulación de vectores y matrices
• Operaciones con matrices
• Operaciones con arreglos
6. Gráficos bidimensionales
7. Programación básica
• Operadores lógicos y relacionales
• Bucles y estructuras condicionales
• Ficheros *.m
8. Ficheros de entrada/salida
Generalidades
• MATLAB se basa en la utilización de matrices debido a que con una matriz (conjunto
ordenado de elementos) se pueden describir de forma flexible y matemáticamente eficiente
infinidad de cosas (elementos, comportamientos, etc.). Así, una matriz de pixeles puede
representar a una imagen en una pantalla; una matriz de fluctuaciones de una señal puede
asociarse a un sonido o voz humana; y lo más importante, una matriz puede describir
cabalmente las relaciones entre diferentes elementos de un sistema: (B)=(M)(A)
• MATLAB está disponible para un gran número de plataformas como son: estaciones de trabajo
SUN, Apollo, VAXstation y HP, VAX, MicroVAX, Gould, Apple Macintosh y PC AT compatibles
80386 o superiores. Opera bajo sistemas operativos UNIX, Macintosh y Windows.
La MATLAB C Math Library Generalidades
• MATLAB C Math Library es una librería incluida en el programa MATLAB que proporciona una
alta gama de funciones clásicas que pueden agruparse en las siguientes categorías:
· Algebra lineal.
· Funciones matemáticas elementales y especializadas.
· Operadores lógicos y aritméticos.
· Matrices elementales y manipulación de vectores.
· Matrices especiales.
· Estadística básica y análisis de datos.
· Polinomios e interpolación.
· Gestión de cadenas de caracteres.
· Entradas y Salidas.
· Gestión de memoria y errores.
• Para construir una aplicación de tipo stand-alone con codificación de ficheros M, han de
seguirse los siguientes pasos:
mcc -e
3. Enlazar el código resultante con la MATLAB C Math Library y con cualquier tipo de ficheros
de programas específicos que hayan sido previamente definidos por el usuario.
La MATLAB COMPILER TOOLBOX Generalidades
• Los ficheros MEX contienen código objeto que es dinámicamente enlazado como
'runtime' en el entorno MATLAB por el intérprete del programa.
2. La instrucción MATLAB cmex llama al compilador y al enlazador del sistema para construir
un fichero MEX objeto.
• Esta opción es ideal para usuarios que quieren sacar la máxima ventaja de MATLAB desde
cualquier otra aplicación o producir código C eficiente a partir de los algoritmos desarrollados
con MATLAB. Los desarrollos del tipo stand-alone requieren para ello la MATLAB C Math
Library.
Inicialización del programa
• current directory
• current history
• command window
Inicialización del programa
current directory
command window
current history
Primeros pasos. Utilización de comandos
MATLAB trabaja generalmente con matrices numéricas rectangulares. La manera más fácil
de introducir en el programa matrices pequeñas es enumerando sus elementos, de tal
manera que:
Ejemplos:
A= B=
1 3 5 1 2 3 4
2 4 6 5 6 7 8
7 8 9
Utilización de comandos
Ejemplos:
C= D= 1 2
3 4
2 2 5 8
Si no se desea presentar el valor de la variable creada hay que agregar punto y coma (;) al
final del comando.
Después de crear una variable, si se desea presentar su valor en pantalla hay que escribir el
nombre de la variable después del prompt (>>).
Ejemplo:
>> F=[1 3 4];
>> F
F=
1 3 4
Ejemplo:
>> G=[1 2 3
456
7 8 9]
G=
1 2 3
4 5 6
7 8 9
Elementos de matrices Utilización de comandos
Ejemplo:
>> H=[-13.6 5^2 3*6/2]
H=
También nos podemos referir a elementos individuales de la matriz utilizando índices entre
paréntesis.
Ejemplo:
>> H(4)=abs(H(1));
>> H
H=
A una matriz ya definida también se le pueden añadir filas completas. Para ello hay que
definir la fila a añadir y luego introducirla dentro de la matriz separándola mediante puntos y
comas según ya se ha definido anteriormente.
Ejemplo:
>> fila=[3 3 3 3];
>> H=[H; fila]
H=
Si se omite escribir el valor de una variable seguida por el signo =, MATLAB crea de forma
automática la variable ans para guardar el resultado.
Ejemplo:
>> 6
ans =
6
La variable ans es de tipo permanente (no se puede eliminar) y tiene un significado especial.
Información del espacio de trabajo Utilización de comandos
Los ejemplos que se han ido ejecutando se han guardado en variables que están en el
espacio de trabajo de MATLAB. Para listar las variables en el espacio de trabajo se utiliza el
comando who . Para ver información adicional acerca de estas variables se utiliza el
comando whos.
>> who
Your variables are:
A B C D E F G H ans fila
>> whos
Name Size Bytes Class Attributes
A 3x3 72 double
B 2x4 64 double
C 1x1 8 double
D 1x3 24 double
E 2x2 32 double
F 1x3 24 double
G 3x3 72 double
H 2x4 64 double
ans 1x1 8 double
fila 1x4 32 double
Funciones Utilización de comandos
Las funciones que utiliza MATLAB son propias del procesador del programa. También
existen otras funciones que están disponibles en las librerías M.
Del mismo modo que en el lenguaje C, los usuarios también pueden crear funciones de las
que puede hacer uso el programa.
Ejemplos:
y= y= 1
2.1460
¡ Ojo con el uso de funciones: en el ejemplo anterior log(t) se refiere el logaritmo neperiano !
Salvar y guardar el espacio de trabajo Utilización de comandos
Para salir de la sesión de trabajo con MATLAB se utilizan las órdenes quit o exit. Al salir de
la sesión las variables utilizadas se borran y ya no pueden ser utilizadas.
Como ya se comentó, si se desea que las variables de una sesión puedan ser nuevamente
utilizadas en otra sesión de MATLAB diferente, entonces hay que guardar las variables con
la orden save. save guarda las variables en un fichero denominado matlab.mat.
También se pueden guardar y cargar las variables que deseemos utilizando, a su vez, otros
nombres de ficheros, p. ejemplo:
Los ficheros *.mat donde se alojan las variables utilizadas por MATLAB se ubicarán en
directorios previamente establecidos a la hora de configurar el programa.
directorio donde se
desean que se
guarden los ficheros
*.mat
Limpiar el espacio de trabajo Operaciones
Con la orden clear se eliminaran todas las variables del espacio de trabajo. Hay que tener
mucho cuidado con esta orden ya que la variable quedará ya eliminada y, por lo tanto, es
irrecuperable.
>> clear
Si sólo se desea eliminar una determinada variable del espacio de trabajo se introducirá la
orden clear seguida del nombre de la variable, Suponiendo que queramos eliminar la
variable x:
>> clear x
Recordar que una operación muy frecuente es limpiar la ventana de comandos del texto
utilizado en la introducción de comandos. Para ello se emplea la orden clc:
>> clc
Para generar un vector se asignará a una variable los extremos del vector y el paso o
incrementador. Primero se situará el primer extremo, luego el incrementador y, por último, el
segundo extremos. Los tres valores estarán separados por dos puntos (:),
Ejemplo:
>> p=1:0.5:2
p=
q=
1 2 3 4 5 6 7 8 9 10
Manipulación de vectores y matrices Operaciones
Los elementos de un vector o de una matriz se representan por sus índices. Los valores de
los elementos de la matriz pueden ser manipulados individualmente haciendo referencia a
su correspondientes índices.
Ejemplos:
A= B=
8 2 3 2 3
3 4
5 6
Un índice puede ser un vector. Si x y v son vectores, entonces x(v) es [x(v(1)), x(v(2)), ...,x(v(n))].
Manipulación de vectores y matrices Operaciones
C=[1 2 3 4; 5 6 7 8; 1 4 6 9; 0 1 0 3]
Ejemplos:
2 2 3
6 6 7
4
Manipulación de vectores y matrices Operaciones
MATLAB permite listar todos los elementos de una matriz disponiéndolos en forma de columna.
El orden de colocación será de columna en columna. Considerando la matriz E del ejemplo anterior:
>> E(:)
ans =
2
6
3
7
Con los comandos diag, tril, triu y ‘ se puede obtener una diagonal, los triángulos inferiores y
superiores a la diagonal y la transpuesta de una matriz:
Ejemplos:
2 2 0 2 3 2 6
7 6 7 0 7 3 7
Manipulación de vectores y matrices Operaciones
>> A‘
1 3
2 4
>> det(A)
-2
>> inv(A)
-2.0000 1.0000
1.5000 -0.5000
Operaciones con vectores y matrices Operaciones
• suma y resta
Las operaciones de suma (+) y resta (-) están definidas únicamente en matrices (vectores y
escalares) que posean la misma dimensión.
Ejemplos:
C= F= J=
11 8 8 8 4 11 7
3 6 16
Operaciones con vectores y matrices Operaciones
Ejemplos:
vectores
matrices
(prod. escalar)
W= 6 4 4
15 16 13
29
Operaciones con vectores y matrices Operaciones
>> 3*C
ans =
18 12 12
45 48 39
ans =
6 4 4
Operaciones con vectores y matrices Operaciones
ans =
ans =
9 0 -3
Operaciones con vectores y matrices Operaciones
• división de matrices
1 0 -2.0000 1.0000
5 6 -1.0000 2.0000
Operaciones con vectores y matrices Operaciones
Ejemplos:
A^3=A^2*A
>> A=[1 2 3; 4 5 6; 7 8 9]; 468 576 684
>> A^2 1062 1305 1548
1656 2034 2412
ans =
>> B=A^2
B=
30 36 42
66 81 96 30 36 42
66 81 96
102 126 150 102 126 150
>> B*A
ans =
MATLAB considera expresiones como exp(A) y sqrt(A) como operaciones de arreglos, definidas en
los elementos individuales de A. También puede calcular funciones trascendentales de matrices,
como la matriz exponencial y la matriz logarítmica. Estas operaciones especiales están definidas
solamente para matrices cuadradas.
Ejemplos:
A= A=
1 2 3 1 2 3
4 5 6 4 5 6
7 8 9 7 8 9
ans = ans =
• suma y resta
Para la suma y la resta las operaciones con arreglos son idénticas a las de matrices.
Ejemplos
4 10 18
Precisión y formatos de salida
a) format short
1.3333
b) format short e
1.3333e+00
c) format long
1.33333333333333
d) format long e
1.33333333333333e00
e) format bank
1.33
f) format hex
3ff5555555555555
Para insertar elegir en el programa uno de estos tipos de formato sólo hay que introducir el nombre
del formato en el punto de inserción. Ejemplo: >> format bank ( y pulsar intro).
Precisión y formatos de salida
Con todo, todas las opciones de configuración y formatos de salida pueden ser cambiados en el
programa tomando la opción preferences del menú file de la barra de menús:
Gráficos bidimensionales
a) plot(y)
b) plot(x, y)
c) plot(x, y, 'tipo_línea')
d) plot(x1, y1, 'tipo_línea_1', x2, y2, 'tipo_línea_2', ... ,xn, yn, 'tipo_línea_n')
En este apartado analizaremos todos ellos comenzando por el más simple. También se utilizarán
otros comandos para representar gráficas especiales.
Para los gráficos se pueden utilizar diferentes colores y estilos de línea. Los símbolos que
diferencian los colores y estilos de línea son:
Supóngase que se desea representar gráficamente una serie de datos que vienen dados en el
vector y. La orden plot(y) representa dichos datos tomando como eje x los índices del vector.
Ejemplo:
Genera un
vector de 20
>> y=1:0.5:10; elementos
>> plot(y)
11
10
0
0 2 4 6 8 10 12 14 16 18 20
Gráficos bidimensionales
Cuando se desea representar gráficamente la función y=f(x) entonces el comando utilizado será:
plot (x, y). Con este comando se representaran las componentes de la variable dependiente
(vector y) en función de las componentes de la variable indepenciente (vector x).
Ejemplo:
vector de vble
>> t=0:1:360; independiente
>> x=t*pi/180;
vector de vble
>> y=sin(x);
dependiente
>> plot(x, y) conversión a rad
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7
Gráficos bidimensionales
Al comando plot (x, y) se le pueden añadir nuevas opciones con el fin de diferenciar diferentes
funciones o representaciones. Estas opciones están ligadas con el tipo de línea y de color que se
desee que aparezcan en el gráfico.
Utilizando el ejemplo anterior si se desea que la gráfica y=sin(x) sea de color rojo y con línea
discontinua, habrá que hacer:
>> t=0:1:360;
línea discontinua de
>> x=t*pi/180;
color rojo
>> y=sin(x);
>> plot(x, y, 'r--')
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7
Gráficos bidimensionales
En un mismo gráfico se pueden representar diferentes funciones, para ello se utilizará el comando:
plot(x1, y1, ‘parámetros1’, x2, y2, ‘parámetros2, …). Si ahora se desea representar en una misma
gráfica la función sin(x) y la función cos(x) con diferente tipo y colores de línea:
>> t=0:1:360;
>> x=t*pi/180;
>> y1=sin(x);
>> y2=cos(x); representa dos
>> plot(x, y1, 'r-', x, y2, 'b--') gráficas con
distinttos tipos de
línea y color
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7
Gráficos bidimensionales
También se pueden cambiar las propiedades de los ejes del gráfico con los comandos:
loglog(x, y): crea una gráfica utilizando una escala logarítmica para ambos ejes
Semilogx(x, y): crea una gráfica utilizando una escala logarítmica para el eje-x y una escala
lineal para el eje-y.
semilogy(x, y): crea una gráfica utilizando una escala logarítmica para el eje -y y una escala
lineal para el eje-x.
Gráficos bidimensionales
Aun con todo la anterior, cuando MATLAB genera un gráfico habilita un asistente con el que
poder cambiar sus propiedades sin tener que introducir las órdenes anteriormente descritas. Así,
si se desea modificar las propiedades del último gráfico editado mediante la inserción de títulos,
cambios de tipo de línea etc, obtendríamos con este asistente:
0.5
sin(x)
y(x)
-0.5
cos(x)
-1
0 1 2 3 4 5 6 7
ángulo (rad)
Gráficos bidimensionales
Matlab ofrece la posibilidad de crear gráficos en forma de matriz. Esto se puede conseguir
introduciendo la orden subplot. Tomando tres vectores y1, y2 e y3 que representan los datos de
las funciones sin(x), cos(x) y sin(x-pi), respectivamente, resultaría:
si existe un
gráfico abierto lo Crea una matriz de gráficos de 3
cierra filas por 1 columna, y abre el
gráfico 1
sin (t)
1
0
>> clf;
>> subplot(3, 1, 1); -1
0 1 2 3 4 5 6 7
>> plot(x, y1); cos(t)
>> title('sin (t)'); 1
-1
0 1 2 3 4 5 6 7
Gráficos bidimensionales
MATLAB también permite cargar datos desde un fichero externo y poderlos representar con la
orden load.
Supongamos que queremos cargar los datos generados en un fichero con el tratamiento de textos
word:
datos.dat
En el fichero se han introducido los datos correspondientes a los cuadrados de los números
enteros comprendidos entre 1 y 10
Gráficos bidimensionales
Para poder representar estos datos gráficamente con MATLAB habrá que introducir en el área
de trabajo el fichero correspondiente mediante la orden open.
Cuando se abre el fichero MATLAB detecta que no está en un formato legible para él, por lo que
nos preguntará que formato deseamos dar a los datos (csv, etc,) para que lo pueda transformar
y hacerlo legible.
MATLAB GENERA UN
VECTOR DE DATOS
INDEXADOS
Gráficos bidimensionales
A partir de ese momento ya se puede disponer de los datos del fichero en MATLAB:
datos = 100
90
0 80
1 70
4 60
9 … y se pueden 50
16 representar 40
25 30
36 20
49 10
64
0
81 1 2 3 4 5 6 7 8 9 10 11
100
¡¡ En la gráfica se ha representado el valor de
(x-1)2 ya que al valor de 0 se la ha asignado el
índice 1 !!
Gráficos bidimensionales
Con MATLAB también se pueden representar datos mediante gráficos de barras. Las órdenes
utilizadas para este caso serán:
a) bar(y);
b) bar(x,y);
c) [xb,yb]=bar(y); => plot(xb,yb)
d) [xb,yb]=bar(x,y); => plot(xb,yb)
Con el siguiente ejemplo vamos a intentar generar un gráfico de barras para los datos obtenidos
de un fichero externo (barras.dat) que contenga valores para el eje x y el eje y.
Gráficos bidimensionales
Una vez cargado en MATLAB aparecerá como una matriz de diez filas por dos columnas:
>> barras
barras =
2 234
3 297
4 98
1 587
6 400
7 350
9 600
10 700
5 0
Ahora hay que asignar a cada una de las columnas un vector, denominando x al vector que
contiene los datos de la primera columna, e y al vector que contiene los datos de la segunda
columna:
>> x=barras(:,1);
>> y=barras(:,2);
Gráficos bidimensionales
Por último, sólo queda que generar el gráfico mediante la orden bar(x, y):
>> bar(x, y)
700
600
500
400
300
200
100
0
0 2 4 6 8 10 12
Programación básica
Es importante no dejar espacios entre los operadores formados por dos símbolos. Si los
datos a comparar son matrices, la comparación se hace elemento a elemento, devolviendo
una matriz binaria.
Ejemplos:
>> a=3<2 >> b=3>=3 >> c=1~=5
a= b= c=
0 1 1
Bucles y estructuras condicionales Programación básica
En esta sección únicamente se tratarán los bucles for y while, y la estructura condicional
if-else.
• Bucle for
La sintaxis de este bucle es la siguiente:
for variable=incio:paso:final
declar ación 1;
...
declaración n;
end
for variable=inicio:final
declaración 1;
...
declaración n;
end
Bucles y estructuras condicionales Programación básica
Ejemplo: Supóngase que se quieren sumar dos vectores dados a y b dando como resultante
otro vector c.
c=
5 7 9 11 13
Ejemplo: Se desea crear un vector d que contenga los dígitos comprendidos entre el 0 y el 9
d=
0 1 2 3 4 5 6 7 8 9
Bucles y estructuras condicionales Programación básica
Ejemplo: Supóngase que se desea construir una matriz (5x6) y que en cada una de las filas tenga
por elementos los números naturales comprendidos entre el 1 y el 6:
Solución:
A=
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
Bucles y estructuras condicionales Programación básica
• Bucle while
Permite implementar bucles condicionales. Su sintaxis es:
while expresion
sentencias;
end
Ejemplo: Supóngase que se desea conocer el primer número natural a partir del cual n! tenga más
de 100 dígitos.
>> n=1;
>> while prod(1:n)<1e100
n=n+1;
end
>> n
n=
70
Bucles y estructuras condicionales Programación básica
Ejemplo: imprimir la lista de los primeros números naturales cuya suma es menor o igual a 100.
>> n=1;
>> while sum(1:n)<=100
numero(n)=n;
n=n+1;
end
>> numero
numero =
1 2 3 4 5 6 7 8 9 10 11 12 13
Con esta estructura se puede ejecutar una orden o comando según una determinada
condición. La síntesis de esta estructura es la siguiente:
if expresion 1
hace algo
elseif expresion 2
hace algo
else
hace algo
end
Ejemplo: Determinar el número de términos negativos que tiene un vector de siete elementos dado.
>> n=0;
>> u=[1 0 -3 5 6 -4 -8];
>> for i=1:7
if u(i)<0
n=n+1;
end
end
>> n
n=
En este ejemplo se ha utilizado un bucle de control for y una estructura condicional if sin utilizar else
por no ser necesario.
Bucles y estructuras condicionales Programación básica
Ejemplo: Separar los términos del vector anterior en otros dos vectores: uno que contenga los
números pares, y el otro los impares.
pares =
0 6 -4 -8
>> impares
impares =
1 -3 5
Ficheros *.m Programación básica
Los script files son ficheros *.m en los que se ponen secuencialmente
comandos de matlab que se ejecutan en ese orden al introducir el nombre
del fichero *.m (sin extensión). Operan globalmente con los datos que se
encuentran en la memoria. Los ejemplos que ilustran estas notas son en s´.
script-files, pues llevan un conjunto de comandos matlab y comentarios.
Los function files son también ficheros *.m, pero a diferencia de los
anteriores, se le pueden pasar argumentos y pueden devolver resultados.
Por tanto utilizan variables globales que se pasan por valor.
Para crear un script file hay que seguir los pasjos que a continuación se indican:
Supongamos que queremos crear dos script files que contengan las instrucciones para
sumar dos números y restarlos (u=3 u v=5)..
En primer lugar crearemos dos ficheros *.m, uno denominado suma.m y el otro resta.m. Para
ello hacemos clic con el botón derecho del ratón en el espacio de trabajo de la ventana
Current Folder y elegimos new file y el tipo de fichero *.m que queramos crear.
Seguidamente, se asigna al fichero un nombre (suma, resta, etc.).
Ficheros *.m Programación básica
A continuación se hace doble clic sobre el fichero creado y entramos en el editor de texto que
permitirá introducir los comandos deseados.
Introducidos los comandos, sólo hay que salvar el fichero y ya está dispuesto para ser
utilizado cuando se requiera que ejecute las operaciones en él indicadas.
Ficheros *.m Programación básica
Supongamos ahora que desde MATLAB se desea conocer la suma y la resta de los dos
números anteriormente introducidos en los script files:
>> suma
Llama a fichero suma.m y
ejecuta los comandos que se
ans = indican en él.
>> resta
Llama a fichero resta.m y
ejecuta los comandos que se
ans = indican en él.
-2
Este tipo de ficheros también se pueden crear y editar directamente desde MATLAB con el
comando edit.
Ficheros *.m Programación básica
Variables de
entrada
Variables de (argumentos)
salida
Para editar un function file se seguiran los mismos pasos que para un script file. El
proceso lo ilustraremos con un ejemplo: introducir un vector en MATLAB y que una
función calcule el valor medio de sus elementos.
El primer paso es crear un fichero de función con el nombre media.m. Una vez creado lo
editamos con el editor de textos de MATLAB.
Ficheros *.m Programación básica
Sólo queda que guardar el fichero *.m en el directorio de trabajo y ejecutar la orden que
realice la operación del valor medio habiendo introducido previamente un vector:
ans =
4.5000
Ahora también se puede repetir el ejemplo de la suma y la resta de dos números mediante
scripts files, introduciendo los valores desde MATLAB:
Ficheros *.m Programación básica
>> x=3;
>> y=5;
>> sumarresta(x, y)
ans =
ans =
-2
En el ejemplo anterior:
Sintaxis:
id = fopen(‘nombre.txt’, ‘permiso’)
Sintaxis:
fprintf(fid,’%f’ A(i))
donde:
Una vez que se han introducido los datos en un fichero, si no se van a introducir más es
recomendable cerrarlo con la sentencia fclose, cuya sintaxis es:
fclose(fid)
Si lo que se desea es cerrar todos los ficheros abiertos:
fclose(‘all’)
Por último, si deseamos cargar los datos en una matriz (vector) para poderlos analizar
posteriormente, se puede utilizar el comando load. Tomando el ejemplo anterior:
>> load('pruebas.txt');
>> M=pruebas;
>> M
M=
1
3
5
7
Ficheros de entrada/salida (E/S)
fwrite(fid, A)
donde:
B = fread(fid)
donde:
Tanto a fwrite como fread se le pueden asociar otros parámetros relativos al formato de datos.
Con help se puede obtener información al respecto.
Ficheros de entrada/salida (E/S)
Ejemplo: Se desea escribir los datos de una matriz dada (A) en un fichero binario llamado
matriz.bin. Posteriormente se desea introducir en otra matriz B los datos de la matriz
grabada en el fichero.
>> id1=fopen('matriz.bin', 'r');
>> B=fread(id1);
>> B