Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MATLAB
MATLAB es un entorno de programación que combina cálculo numérico,
creación y visualización de gráficos y un lenguaje de programación de alto nivel
orientado al cálculo matricial, su más potente aplicación. La biblioteca de funciones
incorporadas de MATLAB es muy extensa e incluye, además, herramientas de cálculo
específicas llamados Toolboxes; entre otras, dos especialmente útiles: disttool, un
entorno gráfico que representa la función de distribución de densidad o la función de
distribución acumulada de varias funciones de distribución de uso frecuente en
Estadística y randtool, un potente generador de números aleatorios. Los cálculos
pueden efectuarse directamente desde el teclado, como si de una calculadora de bolsillo
se tratara, o bien mediante programas.
1 CONCEPTOS BÁSICOS
MATLAB funciona desde WINDOWS en los ordenadores PC compatibles del
laboratorio de Astrofísica y en el aula de Informática de la Facultad. Para ponerlo en
marcha se activa el correspondiente icono en el administrador de programas (hay un
acceso directo), se abre entonces una ventana llamada Ventana de Comandos en la que
se teclean los comandos. En la parte superior de la ventana aparece un menú con las
cinco opciones: File, Edit, Options, Windows y Help algunas de cuyas funciones
tienen un significado similar al de otros programas (abrir y cerrar ficheros de programas,
cortar, copiar pegar, etc.); otras se comentarán a lo largo de este texto y todas ellas las
debe explorar el lector.
1
2
3.- La asignación de valores a las variables de tipo escalar (los vectores y matrices se
comentarán más adelante) se hace de la forma:
4.- Unidad de trabajo. Con frecuencia necesitaremos leer datos de (o escribir resultados
en) un fichero externo; conviene, por tanto, tener activada permanentemente la unidad
de trabajo (a:, c:, etc.) que será aquella donde se encuentren los datos (o donde se desee
guardar los resultados). Esto se hace con el comando
Los comandos cd o dir son de los pocos comandos de DOS que pueden usarse en el
entorno MATLAB. Si, estando en este entorno, hay necesidad de usar comandos DOS
podemos hacerlo anteponiendo el símbolo !. Por ejemplo: ! copy c:\nombre.ext a:\.
6.- Los comandos de carácter general who, whos y clear. En una sesión de trabajo se
definen numerosas variables, las podemos ver todas ejecutando:
who aparece en pantalla una lista completa de los nombres de éstas que ya
están definidas y cuyos nombres no debemos volver a usar salvo que
deseemos redefinirlas. El comando
whos además de los nombres nos indica la dimensión (“1 by 1”, para
escalares, “m by n”, para matrices m×n), el número de datos que alberga
dicha variable, el tamaño (en bytes), la densidad y si es o no variable
compleja. El comando
clear [nombre] borra la variable llamada nombre; si omitimos éste, se borran todas las
variables.
2
3
observamos que “prod” aparece en el texto explicativo formando parte de las palabras
“product” y “produces”; también en los comandos CUMPROD y PROD; ninguno de
estos dos nos sirven, ya que, como se ve, el comando buscado es CROSS. Si ahora
escribimos help cross ↵, completaríamos la información sobre su sintaxis y demás
circunstancias. Hay que manejar con un poco de cuidado el comando lookfor, ya que si
el “texto” es demasiado general o ambiguo MATLAB respondería con un número
abrumador de páginas (pantallas) de texto lo que nos supondría un trabajo y un tiempo
excesivos. Obviamente, podríamos hallar la descripción del comando cross
“navegando” por la opción Help del menú, pero esto suele llevar más tiempo.
3
4
MATLAB representa los números con cuatro cifras decimales salvo que se le
indique otra cosa. Las formas alternativas de representación se eligen pulsando con el
ratón (o teclas Alt+O) en el menú:
2.2 Vectores:
Hay tres formas de crear vectores:
v= [1 ; 2.5 ; -3.2] El mismo v expresado como vector columna. Obsérvese que ; actúa
como delimitador de las columnas
4
5
2.3 Matrices:
Se puede generar matrices de cuatro formas diferentes:
1):
a=[1 2 3 ; 4 5 6 ; 7 8 9] Especificando el valor de cada elemento y delimitando
las filas (;)
a=[1 2 3 ↵ Equivalente a la anterior
456↵
7 8 9]
Esta última es la forma más útil y sencilla -también la más frecuente- ya que permite
cargar un gran volumen de datos almacenados en un fichero ASCII normal, en este
ejemplo llamado tabla1.dat, que contiene los datos que nos interesan en forma de tabla
de n filas y m columnas. Lo que MATLAB hace es cargar el contenido de tabla1.dat en
una variable que se llama de la misma forma que el fichero origen (y suprimiendo la
extensión “dat”); en lo sucesivo los datos del fichero se podrán manejar a nuestra
conveniencia en la forma de una variable matricial aritmética (de dimensión m×n)
llamada tabla1. Precisamente el hecho de que tabla1 sea una matriz pone una severa
limitación a la estructura del fichero tabla1.dat y es que éste ha de contener sólo
números separados por espacios, para conformar una estructura de filas y columnas; ni
signos ni caracteres alfabéticos, tampoco huecos en los lugares en los que tendrían que
figurar números, nada que sea ajeno a una matriz numérica.
5
6
• Se puede añadir elementos a una matriz (o vector), por ejemplo haciendo x(6)=-4,
con lo que x valdría ahora x=[1 2 -3 5 0 -4]. La dimensión ha crecido hasta el
valor 6 para adaptarse al nuevo elemento, y como hemos definido sólo x(6), x(5) ha
tomado el valor cero.
• También puede construirse matrices más grandes usando como elementos otras
matrices menores; por ejemplo, si la matriz A es:
1 2 3
A= 4 5 6
7 8 9
y deseamos ampliarla con una fila más, digamos: r=[10 11 12], escribiremos A=[A;r]
con lo que la matriz A redefinida queda:
1 2 3
4 5 6
A=
7 8 9
10 11 12
• Es posible extraer matrices de otras más grandes, usando el signo ‘dos puntos’ (:).
Por ejemplo: B=A(1:3,:) hace que la matriz B se forma con las filas 1 a 3 y todas las
columnas de la matriz A, o sea B quedaría como la matriz A inicial. c1=A(:,1) será el
vector formado por la primera columna de A. Asímismo x=A(:) sería el vector
columna formado por todos los elementos de la matriz A leidos por columnas , o sea,
x transpuesto, x’, sería:
x’=[1 4 7 10 2 5 8 11 3 6 9 12]
3 OPERADORES Y OPERACIONES
Una de las ventajas de MATLAB es la posibilidad de efectuar cálculos en
paralelo. Esto significa que si a dos variables x e y se les ha asignado un único valor
numérico a cada una, el producto de x por y se realizará de la forma habitual, es decir,
como el producto de dos números cualesquiera; en cambio si se han definido como
matrices (en la forma que se ha explicado en el apartado 2) el resultado será otra matriz
que MATLAB calculará automáticamente si ambas matrices son algebraicamente
multiplicables, en caso contrario nos avisará del error cometido. Lo mismo cabría decir
para las demás operaciones algebraicas elementales, como veremos con más detalle a
continuación.
6
7
OPERADORES:
Aritméticos: Relacionales y lógicos
= Asignación < Menor que
+ Suma <= Menor o igual a
- Resta > Mayor que
* Producto >= Mayor o igual a
.* Producto elemento a elemento == Igual a
^ Potenciación ~= Distinto de
.^ Potenc. elemento a elemento & AND lógico
/ División (1) | OR lógico
./ División elemento a elemento ~ NOT (complemento lógico)
\ División por la izquierda (2)
(1): Si A y B son matrices, la división A/B significa: A/B=C, con C=A*B-1, suponiendo que B-1 exista
y sea multiplicable por la izquierda por A (división por la derecha).
(2) Si A es una matriz (n×n) y B es un vector columna de dimensión n u otra matriz de n filas y
cualquier número de columnas, entonces X=A\B es la solución de la ecuación A*X=B
4 REPRESENTACIÓN GRÁFICA
Se hace, en general, con el comando plot, el cual tiene las siguientes formas y
opciones:
7
8
8
9
grid on, grid off: Pone (on) o quita (off) una retícula (en x e y) en los
dibujos en dos o tres dimensiones. Si se escribe sólo
grid alterna los dos estados, es decir, quita la retícula
si existía o viceversa.
axis([xmin xmax ymin ymax]): Establece la escala de los ejes entre los valores
mínimo y máximo para x e y que se le indican.
Lógicamente, si se trata de un dibujo en 3-D, habría
que completar esta instrucción en la forma:
axis([xmin xmax ymin ymax zmin zmax]). Si se
escribe axis(‘auto’), la escala vuelve a tomar los
valores por defecto que son xmin=min(x) etc.
axis(‘equal’), hace que los “ticks” que señalan los
intervalos sean de igual tamaño en los ejes x e y.
Con ello se consigue que plot(sin(x),cos(x)) tenga el
aspecto de un círculo en vez de un óvalo. axis(‘off’),
suprime los ejes y sus etiquetas, solo mantiene la
curva o los puntos; se restituyen los ejes con
axis(‘on’). Estas son las opciones más frecuentes
9
10
Cuando se dibuja por primera vez una figura, MATLAB la sitúa en el primer
plano, es decir, aparece inmediatamente a la vista; no sucede lo mismo con la siguiente
figura que se trace (tanto si se ha hecho uso o no de las opciones hold on o hold off), y
parece que el programa no ha obedecido al comando plot. El dibujo sí se ha hecho, lo
que sucede en este caso es que está “detrás” de la pantalla de comandos; para llevarla al
primer plano basta con activar la opción Windows del menú (o pulsar Alt+W), entonces
se despliega un submenú con las opciones: 1 Figure No. 1 y 2 MATLAB Command
Window y señalaremos lo que en cada caso proceda. Obsérvese que en la parte superior
de la pantalla en la que aparecen los gráficos hay otra barra de menú con las opciones:
File, Edit, Windows, y Help. Las dos últimas (Windows y Help) ofrecen prácticamente
las mismas funciones que sus homónimas de la pantalla de comandos; File, permite
crear nuevas figuras, cerrar la pantalla gráfica, establecer los parámetros de la impresora
o salir de MATLAB; Edit permite borrar la figura (Clear Figure), copiar las opciones de
ésta (Copy Options) o copiar (Copy) en el portapapeles la figura dibujada; esta última
opción es especialmente útil, porque permite exportarla a otros textos (por ejemplo a un
documento WORD) pulsando Ctrl+v, Paste o comando equivalente.
ANÁLISIS DE DATOS:
10
11
Correlaciones:
corrcoef(x) Coeficientes de correlación
cov(x) Matriz de covarianza
Trigonométricas:
sin, cos, tan, sec, cosec, cot(x) Trigonométricas directas
asin, acos, atan, atan2, asec, acsc, acot(x) Trigonométricas inversas
sinh, cosh, tanh, sech, csch, coth(x) Hiperbólicas directas
asinh, acosh, atanh, asech, acsch, acoth(x) Hiperbólicas inversas
Exponenciales:
exp(x) Exponencial
log(x) Logaritmo neperiano
log10(x) Logaritmo base 10
sqrt(x) Raíz cuadrada
Complejas:
abs(z) Valor absoluto
angle(z) Ángulo de fase
conj(z) Complejo conjugado
imag(z) Parte imaginaria
real(z) Parte real
Numéricas:
fix(x) Parte entera de un número
floor(x) Redondeo al entero más próximo
hacia -∞
ceil(x) Redondeo al entero más próximo
hacia +∞
round(x) Redondeo al entero más próximo
rem(x,y) Resto de la división de dos números
sign(x) Función signo
MANIPULACIÓN DE MATRICES:
Matrices elementales:
zeros(M) Matriz de ceros
ones(M) Matriz de unos
eye(M) Matriz identidad
rand(M,N) Números aleatorios uniformemente distribuidos
randn(M,N) Números aleatorios normalmente distribuidos
ans Última respuesta
11
12
Constantes especiales:
pi 3.1415926535897....
i,j Unidad imaginaria
inf Infinito
NaN Not-a-Number. Es el resultado que da MATLAB de una
operación no definida como p. ej. 0.0/0.0
Hora y fecha:
clock Vector: [Año mes día hora minuto segundo]
cputime Tiempo usado por la CPU (segundos)
date Fecha en formato dd-mm-aa
etime Función tiempo transcurrido (ver help)
tic,toc Funciones de cronometraje (ver help)
Manipulación de matrices :
diag Crea o extrae una matriz diagonal (ver help)
reshape Cambia el tamaño de una matriz (ver help)
tril Extrae la parte triangular inferior (ver help)
triu Extrae la parte triangular superior (ver help)
Para familiarizarse con cada una de las funciones anteriores debemos conocer
bien todas sus posibilidades, para obtener más información usar el comando help
seguido del nombre de la función.
5.2 Bucles
Los hay de dos tipos: bucles FOR y bucles WHILE.
a) El bucle FOR es equivalente a su homónimo de BASIC y muy similar al DO de
FORTRAN. Su sintaxis es:
Ejemplos:
for i = 1:n,
12
13
for j = 1:n,
a(i,j) = 1/(i+j-1);
end
end
obsérvese que en el primer ejemplo aparecen sólo dos parámetros a continuación de for,
en este caso se entiende por defecto que se han dado los valores inicial y final de i y que
el intervalo (el parámetro que falta) es igual a 1. En el segundo ejemplo aparece
explícitamente el valor del intervalo que, en este caso, por ser negativo realiza una
secuencia decreciente.
5.3 Bifurcaciones
Al igual que en otros muchos lenguajes de programación, el comando if ejecuta
un conjunto de sentencias cuando se cumplen ciertas condiciones. Su sintaxis es:
if proposición-lógica
{sentencias}
end
la proposición-lógica es, normalmente, una expresión que contiene los operadores ==,
<, >, <=, >=, o ~=. El siguiente ejemplo ayudará a entender el funcionamiento de este
comando:
if i == j
a(i,j) = 2;
elseif abs(i-j) == 1
a(i,j) = -1;
else
a(i,j) = 0;
end
6 FICHEROS-M: PROGRAMAS
MATLAB se usa frecuentemente en modo interactivo, es decir, se escribe una
línea de comandos, se pulsa la tecla ↵, y aparece inmediatamente el resultado en
pantalla. MATLAB también puede ejecutar secuencias de comandos que están
almacenadas en ficheros. Ya vimos en § 2, que se puede acceder a ficheros de datos
invocándolos con el comando load y especificando su nombre y extensión (esta última
puede ser cualquiera con tres caracteres), sin embargo los ficheros que contienen
13
14
Ficheros de texto
Cuando se llama a un fichero de texto, MATLAB ejecuta los comandos que
contiene y éstos operan globalmente con los datos existentes en el espacio de trabajo.
Esto último quiere decir que si, por ejemplo, una variable cualquiera posee un valor
dado (digamos x=-7.89) y después ejecutamos un programa de texto en el que se
modifica ese valor (por ejemplo, redefiniendo x en la forma x=π/4), es este último valor
el que prevalece, borrándose el que tenía anteriormente. Veamos el siguiente ejemplo: el
fichero de texto llamado series.m contiene los comandos necesarios para calcular el
valor aproximado del número π mediante la serie
π2 ∞
1
=
6 i =1 i
2
%
% Series
%
n=input( 'Introducir el valor de n: '
)
%
s=0;
for i=1:n
s=s+1/i^2;
end
y=sqrt(6*s) % Valor calculado de π
err=abs(y-pi) % Diferencia entre el valor calculado y el de MATLAB
end
1º) %: este símbolo indica que lo que se encuentra a su derecha es un comentario y por
lo tanto no se compilará. Puede estar en el medio de una línea o registro, como se
ve en la línea que define la variable y y en la que le sigue
2º) input( ‘texto’ ): queda a la espera de un dato que se le va a suministrar a través del
teclado (en este caso el valor de n); el texto, que ha de escribirse entre
apóstrofos, aparecerá en la pantalla y sirve como recordatorio del nombre de la
variable a la que se va dar el valor.
14
15
Ficheros de función
Son aquellos ficheros M que al principio de la primera línea contienen la palabra
clave function. Difiere de un fichero de texto en que hay que pasarle parámetros (los de
entrada de la función) y en que las variables definidas y manejadas dentro del fichero de
función son locales y no interfieren con las que se estén considerando en el espacio de
trabajo. Los ficheros de función son útiles para crear funciones de MATLAB, además de
las ya existentes en la biblioteca interna. Como se ve, estos ficheros son muy parecidos
al subprograma FUNCTION de FORTRAN. Ejemplo:
function y=mean(x)
% MEAN: valor medio
% Para vectores: mean(x) da el valor medio
% Para matrices; mean(x) es un vector fila que contiene el valor medio
% de cada columna
%
[m,n]=size(x);
if m==1
m=n;
end
y=sum(x)/m
z=1:99
mean(z) ↵
y aparecería en pantalla:
ans
=50
15
16
El guión que precede a los parámetros ascii, double y tabs es obligatorio. Las
posibilidades de almacenaje de resultados no se agotan con este comando, el lector
puede consultar a través del correspondiente help los comandos: diary, fwrite, fprintf e
imwrite.
Ajuste de polinomios
roots(c) Halla las raíces del polinomio cuyos coeficientes son los
elementos del vector c (como antes, c1 es el coeficiente de xn,
etc.).
16
17
Integración numérica
y=quad('
f'
,a,b) Calcula el valor aproximado de la integral de la función f(x)
entre los límites (a,b) usando la fórmula de Simpson. f es el
nombre de una función (que, por lo tanto, ha de expresarse entre
apóstrofos ‘) que está definida en un fichero M de función.
y=quad8('
f'
,a,b) Igual que la anterior pero usando el método de cuadratura de
Newton-Côtes.
En ambos casos, si el resultado fuera y=inf, (infinito) querría decir que no se ha logrado
convergencia o que y es una integral singular. Si los parámetros de entrada a y b son
vectores, y será otro vector (de resultados) de la misma dimensión.
[x,y] = ode23('
yprima'
, x0, xfinal, y0)
• yprima: es el nombre del fichero M donde están definidas las funciones que
constituyen el sistema (o la única función si la ecuación diferencial es de primer
orden).
• x0, xfinal: valores inicial y final de la variable independiente, definen el dominio de
integración.
• y0: el vector cuyas componentes son las condiciones iniciales.
• [x,y]: y es la solución en forma de vector columna para los valores especificados por
el también vector columna x cuyos valores están comprendidos entre x0 y xfinal con
espaciado fijado automáticamente por MATLAB.
Si se trata de una ecuación diferencial de primer orden, x0, xfinal, e y0 son escalares. La
gráfica del resultado puede verse haciendo plot(x,y).
function xdot=vdpol(t,x)
xdot=zeros(2,1) % Matriz 2×1 de ceros (vector columna)
xdot(1)=x(1).*(1-x(2).^2)-x(2);
xdot(2)=x(1);
t0=0; tf=20;
17
18
Estadística
La herramienta disttool es un entorno gráfico que representa funciones densidad
(pdf) o funciones de distribución acumulada (cdf) de las distribuciones más usuales en
estadística. Pulsando disttool y ↵ se abre una pantalla gráfica que contiene diferentes
ventanas: una que permite seleccionar el modo pdf o cdf, otra que despliega un amplio
menú de distribuciones (normal, binomial, t de Student, etc.) y otras donde se
seleccionan los valores numéricos de los diferentes parámetros (media, desviación
típica,…); hay -además- una ventana para seleccionar el valor de la variable
independiente x y otra ventana que nos da el valor de la densidad de probabilidad en la
opción pdf (valor de la ordenada de la función de distribución correspondiente a x) o el
∞ y x en la opción cdf (probabilidad de que X sea menor o
valor de la integral entre -∞
igual que x). Estas funciones existen también fuera del entorno disttool como funciones
de MATLAB. La lista de funciones de distribución acumulada (cdf) es la siguiente:
18