Vous êtes sur la page 1sur 18

1

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.

Las prestaciones de MATLAB son muy numerosas y completas, sin embargo,


por razones de espacio y tiempo lo que sigue es un resumen forzosamente limitado a los
comandos y operaciones más frecuentes. Quienes, movidos por la curiosidad o la
motivación, deseen profundizar más en el manejo de MATLAB deberán consultar la
Guía del Usuario (un grueso volumen) o la ayuda incorporada (“Help”) del programa
mismo.

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.

Aquellos lectores que se enfrenten por primera vez a MATLAB encontrarán


especialmente interesantes los comandos intro y demo. Si escribimos “intro” y
pulsamos ↵ se activa una demostración de las posibilidades generales del programa, en
la que pantalla a pantalla se explican los conceptos básicos y característicos de
MATLAB y nos dará, por tanto, una visión global y rápida (dura sólo unos pocos
minutos) que contribuirá a entender mejor el programa. La opción demo son
demostraciones sobre temas muy concretos de MATLAB (trazado de gráficos,
operaciones con matrices, funciones especiales, etc.). Se accede a ellas escribiendo
demo ↵ y siguiendo las instrucciones que aparecen en pantalla. En general:

Los comandos se ejecutan escribiendo su nombre en la línea de comandos


(señalada con el símbolo ») y pulsando ↵ a continuación.

Veamos ahora unas cuantas normas generales:


1.- Los comandos MATLAB se escriben siempre con minúsculas.
2.- Los nombres de las variables se pueden escribir con mayúsculas o minúsculas, pero
las entiende como diferentes, es decir, temp y Temp serían dos variables diferentes que
pueden albergar valores distintos.

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:

nombre-de-variable = valor-numérico[;]. Los corchetes ([ ]) indican que el signo “;”


es optativo; si no se escribe “;”se repite en
pantalla el nombre y valor de la variable
(eco de pantalla).

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

cd u:\subdirectorio: donde u: es la unidad. Si no se efectúa esta operación el directorio


de trabajo es: C:\MATLAB\BIN, que no debemos utilizar para
nuestros trabajos.

5.- Contenido del directorio de trabajo. Usaremos el comando:

dir y aparecerá una lista completa de los ficheros que contiene.


También podemos usar comodines:
dir *.dat o dir a*.* mostraría sólo los ficheros con extensión DAT o los que su
nombre empezara por A, respectivamente.

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.

7.- Los comandos de ayuda help y lookfor. De utilidad cuando no recordamos la


sintaxis correcta o el nombre de un comando:
help nombre-del-comando: aparecerá en la pantalla toda la información disponible
sobre dicho comando acompañada en algunos casos de

2
3

ejemplos. Puede suceder, también, que; en este caso


usaremos la instrucción

lookfor texto En caso de que hayamos olvidado incluso el nombre: El


“texto” contiene la palabra, palabras o sílabas que
suponemos deben figurar en la definición de lo que
estamos buscando.

Ejemplo: supongamos que no conocemos, o hemos olvidado, el nombre del comando


que calcula el producto vectorial de dos vectores pero sí sabemos que existe tal
comando, elegimos como texto o palabra clave “prod” y escribimos lookfor prod.
Aparecería en la pantalla el siguiente texto como resultado:

CROSS Vector cross product.


CUMPROD Cumulative product of the elements.
DOT Vector dot product.
PROD Product of the elements.
KRON Kronecker tensor product.
BOXUTIL Produces a single box plot.

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.

2 ESCALARES, VECTORES, MATRICES


2.1 Escalares
Ya hemos visto antes cómo se asignan valores a una variable, añadamos ahora
que el carácter entero, real, complejo o alfanumérico de una constante o variable queda
determinado por la forma misma en que se escribe ese dato.

x=-3 Número entero negativo

y = 3.27 Número real positivo

z=2-3i Numero complejo

s=’Orión’ Variable alfanumérica. Las comillas son obligatorias y los espacios en


blanco también son caracteres. Para conocer más detalles sobre las
funciones de variables alfanuméricas, consultar la ayuda ejecutando help
strfun.

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ú:

Options y Numeric Format: se desplegará un submenú con las siguientes opciones:

Short (default): representación con cuatro cifras decimales


Long: 15 dígitos decimales
Hex: formato hexadecimal
Bank: 2 decimales
Plus: escribe +, - o espacio en blanco para cantidades positivas,
negativas o cero respectivamente
Short e y Long e: notación exponencial, e±xx, con 4 ó 15 dígitos decimales
respectivamente;
Rational: aproxima un número real mediante el cociente de dos enteros,
por ejemplo π=355/113).

Para más información sobre los formatos ejecutar help format

2.2 Vectores:
Hay tres formas de crear vectores:

1) Vectores con cualesquiera componentes:

Se crean escribiendo entre corchetes ,[ ], sus componentes separadas por espacios en


blanco (al menos uno). Así se escribiría:

v=[1 2.5 -3.2] El vector fila v=(1, 2.5, 3.2)

v= [1 ; 2.5 ; -3.2] El mismo v expresado como vector columna. Obsérvese que ; actúa
como delimitador de las columnas

v=[1 ↵ Otra forma válida de expresar v como vector columna


2.5 ↵
-3.2]

z=[-1.5 ↵ Componentes de z definidas por funciones MATLAB.


sqrt(2) ↵
sin(pi/4)]

En este último ejemplo “sqrt(x)” es la raíz cuadrada de x y “pi” es el número π. En


general, el punto y coma dentro de los corchetes, tanto en vectores como en matrices,
actúa como separador de filas. Un vector fila se convierte en vector columna (y
viceversa) mediante la operación algebraica de la transposición, que en MATLAB se
denota mediante el apóstrofo ‘; así y = x’ indica que el vector y es el transpuesto del
vector x.

4
5

2) Vectores con componentes equiespaciadas:

x=1:4 generaría el vector x=(1,2,3,4), donde se supone que el valor del


equiespaciado es 1, por defecto.

x=0 : 0.25 : 1 el intervalo o equiespaciado vale 0.25 en este caso, obtendríamos


x=(0,.25,.5,.75,1). Se admite también intervalos negativos, por
ejemplo: x=4:-1:1, daría x=(4,3,2,1).

3) Usando las funciones espaciadoras de datos:

x=linspace(a,b,n): crea un vector de n componentes, la primera vale a y la última


vale b.
y=logspace(a,b,n): similar a la anterior sólo que se tomarían n puntos espaciados
logarítmicamente entre 10ª y 10b. Si no se especifica el número de
puntos se toma por defecto n=100 en linspace y n=50 en logspace.

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]

2) Mediante un fichero .M (véase más adelante):


a=matriza Suponemos que existe en el directorio activo un fichero
llamado matriza.m que contiene el texto: a=[1 2 3 ; 4 5
6 ; 7 8 9] u otra definición equivalente

3) Leyéndola directamente de un fichero de datos con el comando load:

load tabla1.dat carga el contenido de tabla1.dat en una variable que se


llama tabla1

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

2.4 Manipulación de vectores y matrices


• Los elementos de una matriz (o vector) se identifican por sus subíndices escritos
entre paréntesis; sea el vector x=[1 2 -3 5], si escribimos x(3) ↵ el programa
responderá escribiendo en pantalla -3.

• 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.

Los operadores de MATLAB, al igual que los de otros lenguajes de


programación, son de tres tipos: aritméticos, relacionales y lógicos.

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

+, -, *, / y ^ tienen su significado habitual cuando los operandos son escalares y


también cuando son matriciales, (en este último caso han de cumplirse
las correspondientes reglas algebraicas de cada operación)

.*, ./ y .^ actúan sobre vectores o matrices pero operando elemento a elemento,


es decir, si a y b son los vectores: a=(a1,a2) y b=(b1,b2) entonces
a.^2=(a12,a22) y también a.* b=(a1*b1, a2*b2).

Para más información sobre operadores y caracteres especiales seleccionar Help en el


menú, después Table of contents y se desplegará una lista en la que hay que activar
OPS.

4 REPRESENTACIÓN GRÁFICA
Se hace, en general, con el comando plot, el cual tiene las siguientes formas y
opciones:

plot(x,y): Dibuja el vector y (ordenada) frente al vector x


(abscisa) enlazando con una línea cada punto.
Si x e y son matrices, dibujará las filas o
columnas que se le indiquen.

plot(y): Dibuja el vector y frente a su índice. Si y es


complejo, plot(y) es equivalente a
plot(real(y),imag(y)).

plot(x,y,s): Permite el trazado con varios tipos de líneas,


símbolos para los puntos y colores que están
especificados en la variable alfanumérica s que
tiene 1, 2 o 3 caracteres siguientes: y
(amarillo), m (magenta), c (azul turquesa
[cyan]), r (rojo), g (verde), b (azul), w (blanco)
y k (negro) para los colores; para los datos,

7
8

trazados punto a punto: . (punto), o (círculo),


x, +,*; por último, para el aspecto de las líneas:
- (línea continua). : (puntos), -. (rayas y
puntos), – (rayas discontinuas). Por ejemplo,
plot(x,y,’b+’)dibujaría cada dato con el signo
“+” en azul sin enlazarlos con líneas, es decir,
cada dato aislado; plot(x,y,’b’) dibujaría los
datos enlazados por una línea de color azul.
Obsérvese que por ser s una variable
alfanumérica, sus argumentos han de escribirse
entre apóstrofos (‘).

bar(x,y,s): Crea un diagrama de barras del vector y en las


posiciones fijadas por el vector x con los
símbolos especificados por s, tal como se
explicó antes). Todos los comandos del tipo
plot(…) comentados anteriormente pueden
transformarse en sus equivalentes bar(…).

plot(x1,y1,s1, x2,y2,s2, x3,y3,s3,…) combina varios dibujos en una misma gráfica,


cada uno de ellos definido por su tripleta
(x,y,s).

subplot(n,i,j),plot(…): Permite dibujar n figuras dispuestas en forma


de mosaico, donde i y j representan,
respectivamente, el índice de la fila y de la
columna donde se va a trazar cada gráfico. La
secuencia subplot-plot se escribirá n veces,
tantas como figuras han de representarse.

Ejemplo:, si se desea dibujar 6 figuras ordenadas en 3 filas y 2 columnas escribiremos:


subplot(6,1,1),plot(x1,y1,s1)↵ para la Fig.1
subplot(6,1,2),plot(x2,y2,s2)↵ para la Fig.2
subplot(6,2,1),plot(x3,y3,s3)↵ para la Fig.3
………………………………………………..
subplot(6,3,2),plot(x6,y6,s6)↵ para la Fig.6

El comando plot elige los colores de forma automática en el orden especificado


anteriormente, salvo que se le indique otra cosa. Si sobre una gráfica se dibujan más de
ocho curvas -agotando, por tanto, la gama disponible de colores-, se comienza otro
nuevo ciclo siguiendo el mismo orden.

Modificación del aspecto de un dibujo:

semilogx(…) Es lo mismo que plot(…), excepto que usa una


escala logarítmica (en base 10) en el eje x;
semilogy(…) es su análogo para el y.

8
9

loglog(…): Es lo mismo que el anterior con escalas logarítmicas


(en base 10) en los ejes x e y a la vez.

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.

clf, clf reset: Borra la figura. Si se añade reset, restituye, además,


a sus valores por defecto todas las propiedades de la
figura, excepto la posición.

cla, cla reset: Lo mismo que en el caso anterior, pero actuando


sólo sobre los ejes.

hold on, hold off: La opción on hace que se mantenga un dibujo ya


existente con todas sus propiedades, de forma que la
siguiente gráfica se superponga a la anterior. La
opción off vuelve todos los parámetros a sus valores
por defecto, y el siguiente dibujo borraría el anterior.
Si se escribe sólo hold, se conmuta entre los dos
estados.

xlabel(‘texto’): Pone un texto en el eje x; análogamente,


ylabel(‘texto’) para el eje y y si se dibuja en 3-D,
zlabel(‘texto’) para el tercer eje.

title(‘texto’): Añade un texto en la parte superior del dibujo en 2-


D 3-D.

text(x,y,’texto’): Escribe un texto en la posición especificada por las


coordenadas x,y en las unidades reales de los ejes. Si
se trata de un dibujo en 3-D la sintaxis de esta
instrucción sería text(x,y,z,’texto’).

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

pero hay más, para verlas todas en detalle escribir:


help axis ↵.

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.

5 FUNCIONES, BUCLES Y BIFURCACIONES


5.1 Funciones
Nos referiremos en primer lugar a las funciones incorporadas (funciones de
biblioteca). La gama de éstas es amplísima en MATLAB y, por las razones de espacio
antes indicadas, nos vamos a ceñir en este resumen a las más corrientes. La lista
completa de funciones aparece pulsando en el menú Help y luego Index (haciendo
“click” con el ratón sobre cada nombre aparece automáticamente la explicación de su
funcionamiento). Están agrupadas por temas, como puede verse pulsando en el menú
Help y después Table of contents, que se refieren al código de color, demostraciones,
funciones matemáticas, etc. Los grupos o temas más importantes y sus correspondientes
funciones son las siguientes:

ANÁLISIS DE DATOS:

Operaciones básicas sobre un vector x:


max(x) Componente máxima
min(x) Componente mínima
mean(x) Valor medio
median(x) Mediana
std(x) Desviación típica
sort(x) Ordenación (ascendente)
sum(x) Suma de los elementos de x
prod(x) Producto de los elementos
cumsum(x) Suma acumulativa de los elementos
cumprod(x) Producto acumulativo de los elementos
trapz(x,y) Integración numérica (método trapezoidal)

10
11

Operaciones con vectores:


cross(x,y) Producto vectorial
dot(x,y) Producto escalar

Correlaciones:
corrcoef(x) Coeficientes de correlación
cov(x) Matriz de covarianza

FUNCIONES MATEMÁTICAS ELEMENTALES:

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)

FUNCIÓN DE FUNCIÓN. PROCESOS NUMÉRICOS NO LINEALES:

ode23 Solución de ecuaciones diferenciales (Runge-Kutta 2º y 3º orden)


ode23p Ídem y dibuja la solución
ode45 Solución de ecuaciones diferenciales (Runge-Kutta 4º y 5º orden)
quad Integración numérica con la regla de Simpson
quad8 Integración numérica por cuadratura de Newton-Côtes
fmin Mínimo local de una función de una variable
fmins Mínimo local de una función de dos variables
fzero Halla el cero de una función de una variable
fplot Representa la gráfica de una función

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:

(i) for i=valor-inicial : intervalo : valor-final


(instrucciones)
end

Ejemplos:
for i = 1:n,

12
13

for j = 1:n,
a(i,j) = 1/(i+j-1);
end
end

(ii) for s = 1.0 : -0.1 : 0.0 , {instrucción} , 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.

b) El bucle WHILE tiene la siguiente sintaxis:

while expresión lógica,


instrucciones
end

mientras la expresión lógica tenga el valor “verdadero”, ejecutará todas las


instrucciones comprendidas entre las líneas while y end.

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

sentencias MATLAB han de llevar obligatoriamente la extensión .m acompañando a su


nombre, razón por la que se les llama “ficheros M”.

Un fichero M consiste, por tanto, en una secuencia de comandos que pueden


incluir referencias a otros ficheros M y se crean con cualquier programa editor o
procesador de textos. Los hay de dos tipos: ficheros de texto y ficheros de funciones; los
primeros realizan automáticamente secuencias largas de comandos, los últimos
desempeñan un papel parecido al de los subprogramas en FORTRAN.

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

en la que la suma, en vez de extenderse al infinito se trunca en un número entero n cuyo


valor lo decide el programador y lo introduce manualmente (por teclado). El programa
es como sigue

%
% 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

en el anterior programa interesa destacar dos detalles hasta ahora no comentados:

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

Por último, si series.m está en el subdirectorio de trabajo, series es ya un comando más.

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

Para ejecutar este programa basta con escribir mean(parámetro), teniendo


cuidado de que el “parámetro” ha sido definido previamente; por ejemplo si queremos
que el programa calcule la media de los enteros desde1 hasta 99, escribiríamos

z=1:99
mean(z) ↵

y aparecería en pantalla:

ans
=50

size(A) Da la dimensión de la matriz A (número de filas y columnas, en ese


orden) escribiéndolos en pantalla.

[m,n]=size(z) Almacena el resultado anterior en las variables m y n,


respectivamente.

length(x) Da la longitud (número de componentes) del vector .

7 OTROS PROCEDIMIENTOS ÚTILES EN MATLAB


Veamos, para finalizar, algunos procedimientos de uso frecuente en el cálculo
numérico, lo que nos permitirá comentar algunos comandos y funciones no descritos en
los párrafos anteriores.

15
16

Guardar resultados en ficheros


Se hace con el comando save con las siguientes posibilidades:

SAVE fname X Y Z Guarda en el fichero llamado fname


las variables X, Y, Z,… en código
binario

SAVE fname X Y Z -ascii Lo guarda como fichero en código


ASCII (por lo tanto es legible por
cualquier programa) usando un
formato de 8 dígitos

SAVE fname X Y Z -ascii -double Los datos se expresan con 16 dígitos

SAVE fname X Y Z -ascii -double -tabs Los guarda delimitándolos con


tabuladores

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

polyfit(x,y,n) Halla los coeficientes (que aparecerán escritos en pantalla) del


polinomio p(x) de grado n que ajusta por mínimos cuadrados los
datos p(xi)=yi,.

c=polyfit(x,y,n) En este caso, los coeficientes quedan guardados en la variable c


(la primera componente es el coeficiente de xn, la última el de x0).

y=polyval(p,x) Halla el valor del polinomio para un x dado; p es el vector de


longitud n+1 (n es el grado del polinomio) cuyos elementos son
los coeficientes de éste: y = p(1)*xn + p(2)*xn-1 + ... + p(n)*x +
p(n+1). Si x es una matriz o un vector, el polinomio se evalúa
para todos los puntos de x.

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.).

Resolución de sistemas lineales


Un sistema lineal puede escribirse de la forma: Ax=b, donde x es el vector
(columna) de las incógnitas y A es la matriz de los coeficientes. La resolución de este
sistema es sumamente sencilla y rápida en MATLAB haciendo: x=A\b, como ya se ha
visto anteriormente (§ 3: Operadores). Obviamente, A tiene que ser una matriz no
singular.

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.

Resolución de ecuaciones diferenciales


La función ode23 integra un sistema de ecuaciones diferenciales usando un
método de Runge-Kutta con fórmulas de 2º y 3º orden. Su sintaxis es:

[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).

Ejemplo: La ecuación diferencial de 2º orden d2x/dt2 + (x2-1)dx/dt + x = 0, con las


condiciones iniciales: x=0, dx/dt=0.25 para t=0. Si nombramos las variables en la
forma: x=x2, dx/dt=x1, entonces la ecuación anterior equivale al sistema:
x1 = x1 (1 − x 22 ) − x 2 ; x 2 = x1

El fichero M con la definición de las funciones se va a llamar vdpol y su contenido será:

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);

para resolver la ecuación escribiremos:

t0=0; tf=20;

17
18

x0=[0 0.25]; % Condiciones iniciales


[t,x]=ode23(‘vdpol’,t0,tf.x0)
plot(t,x)

Se puede resolver la ecuación diferencial y trazar su gráfica simultáneamente


usando la función ode23p (con los mismos parámetros) pero definiendo previamente
los ejes con el comando axis y escribiendo posteriormente hold. Se obtiene más
precisión usando la función ode45 análoga a la anterior (y con los mismos parámetros),
la diferencia es que utiliza un algoritmo de Runge-Kutta de 4º y 5º orden.

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:

betacdf: distribución beta hygecdf: hipergeométrica


binocdf: binomial normcdf: normal
chi2cdf: chi cuadrado poisscdf: Poisson
expcdf: exponencial tcdf: t de Student
fcdf: F unidcdf: uniforme (discreta)
gamcdf: gamma unidfcdf: uniforme (continua)
geocdf: geométrica weibcdf: Weibull

existen además sus correspondientes funciones inversas (betainv,… etc) y las de


distribución de probabilidad (betapdf,… etc). Para ver el significado, parámetros y
sintaxis consultar sus respectivos help.

Generación de números aleatorios


De forma análoga al caso anterior, ejecutando randtool se abre otra pantalla
gráfica que nos proporciona conjuntos de números aleatorios que siguen diferentes
distribuciones a elegir a través de la correspondiente ventana: beta, binomial, chi-2,
exponencial, F, gamma, geométrica, hipergeométrica, normal, de Poisson, t de Student,
uniforme y uniforme discreta. Una gráfica muestra los resultados y las diferentes
ventanas permiten seleccionar el tamaño del conjunto de números aleatorios (ventana
sample) y el intervalo (ventana number). Cada vez que se pulsa en la ventana
resample, aparece una nueva muestra de números. Pulsando en la venta output, la
última muestra se almacena en la variable temporal ans y se exporta al programa
MATLAB, haciendo desde éste último x=ans, quedará guardado en el vector x el
último conjunto de números aleatorios obtenido.

18