Professional Documents
Culture Documents
Al igual que en los lenguajes de alto nivel, MATLAB permite crear programas utilizando
programación estructurada. Estas notas no pretenden ser una guía al usuario, ya que la
capacidad de MATLAB está muy por encima de estas simples nociones previas. Se
recomienda el uso de la función help para información más detallada con respecto a los
comandos que se tratarán aquí y a otros muchos más.
Es conveniente cuando se realiza un programa que el usuario escriba una serie de
comentarios que el programa en sí no interpretará, pero que servirán al usuario para
recordar que hace cada parte del programa cuando lo utilice en un futuro o cuando otro
usuario vaya a utilizar el programa. MATLAB entiende que cualquier texto que se escriba a
continuación del símbolo % es un comentario.
Para instrucciones simples y básicamente individuales, se puede escribir la orden en la
ventana de MATLAB directamente (por ejemplo, si queremos dividir 7 por 3, llega con
escribir en la pantalla 7/3 Y MATLAB funciona como una calculadora). Para conjuntos de
instrucciones más complejas, se debe crear un fichero con extensión .m (por ejemplo fic.m),
así, cada vez que el usuario escriba fic en la ventana MATLAB, se ejecutarán todas las
instrucciones contenidas en ese fichero. Incluso, como veremos al tratar el apartado de
funciones, ese fichero puede, a su vez, llamar a otros ficheros auxiliares que contengan
nuevas instrucciones.
I. Operaciones básicas.
Matlab puede usarse para realizar las mismas operaciones escalares que se harían con una
calculadora convencional, para operaciones vectoriales y matriciales y para tomar
decisiones lógicas. Para todo ello se pueden definir diferentes operadores.
Operadores aritméticos.
Sirven para operaciones aritméticas más o menos complejas
Símbolo Operación
+ Suma de escalares, vectores o matrices
- Resta de escalares, vectores o matrices
* Producto usual de escalares o de matrices
.* Producto término a término
/ Cociente usual de escalares o matrices
./ Cociente de matrices término a término
^ Potencia de escalares o matriz elevada a un escalar
= igual
Operadores lógicos
Sirven para operaciones lógicas, es decir, cuando deseamos comparar variables, se
necesitan operadores cuyo resultado sea booleano (cierto o falso).
Operador Función que desempeña
< Menor (complejos sólo afecta a partes reales)
<= Menor o igual (sólo afecta a partes reales)
> Mayor (sólo afecta a partes reales)
>= Mayor o igual (sólo afecta a partes reales)
== Igual lógico
∼= Desigualdad
Funciones matemáticas.
Funciones exponenciales
Funciones aleatorias
Cuando se quiere generar un número aleatorio pueden utilizarse la funcione rand.
x=rand
así x tomará cualquier valor comprendido en el intervalo (0,1). Todos los números son
equiprobables.
Ejemplo: Programa que simula el lanzamiento de una moneda al aire para obtener cara o
cruz.
if rand < .5
'cara'
else
'cruz'
end
Funciones Matriciales
Bucles simples
Vemos que el bucle está controlado por tres argumentos: i) inicio. Indica donde comienza
la variable que controla el bucle; ii) final. Indica hasta donde llega la variable que controla
el bucle; iii) paso. Indica en cuanto se incrementa la variable que rige el bucle entre dos
pasadas de bucle sucesivas.
for x=-10:0.05:10
f=a*x*x+b;
end
Bucles condicionales
Permiten repetir un conjunto de instrucciones, siempre y cuando se satisfaga una condición
lógica.
Su sintaxis es la siguiente:
while condición
Instrucciones que deben ejecutarse mientras la condición sea cierta.
end
x= -10;
y=a*x*x+b;
while y<= 1000
x=x+0.05;
y=a*x*x+b;
end
if condición
Instrucciones que deben ejecutarse si la condición es cierta.
else
Instrucciones a ejecutar si no se verifica la condición anterior
end
También se puede usar para seleccionar entre varios conjuntos de instrucciones pero en este
caso se necesita más de una condición lógica. La sintaxis queda como:
if condición_1
Instrucciones a ejecutar cuando se verifica la condición 1
elseif condición_2
Instrucciones a ejecutar cuando no se verifica la condición 1 y sí la
condición_2
elseif condición_3
Instrucciones a ejecutar cuando no se verifican las condiciones
anteriores y sí la condición_3
…
else
Instrucciones a ejecutar cuando no se verifican las condiciones
anteriores
end
Podemos imponer más de una condición o condiciones complejas utilizando los operadores
relacionales (condiciones cuyo resultado es cierto o falso) combinados con operadores
lógicos.
Además de los operadores vistos en la sección I, cabe destacar el uso de any (existe
alguno) y el all (todos), que se suelen aplicar a vectores, devolviendo 1 (verdadero) cuando
algún elemento cumple la condición o cuando la cumplen todos los elementos
respectivamente.
Otras funciones útiles con resultados lógicos son insempty (cierto si el vector está vacío),
isequal (cierto si las matrices son idénticas), isreal, insnan, isfinite, isinf, etc.
echo on/off Activa o desactiva la escritura de cada instrucción del fichero sobre la
pantalla
pause (10) Detiene la ejecución del fichero hasta que se pulse alguna tecla o transcurre
el nº indicado de segundos (10 en este caso).
Las funciónes sscanf y fscanf son muy similares pero la entrada de caracteres no proviene
de un fichero sino de una cadena de caracteres.
La función fprintf dirige su salida formateada hacia el fichero indicado por el
identificador. Su forma general es:
fprintf(fi,'cadena de control',var1,var2,...)
La cadena de control contiene los formatos de escritura como muestran los ejemplos
siguientes:
Donde \n indica un salto a la siguiente línea y %lf10.4 es una variable de doble precisión
que se representa con 4 cifras decimales y 10 cifras antes del punto.
De forma análoga, la función sprintf convierte su resultado en una cadena de caracteres que
devuelve como valor de retorno, en vez de enviarlo a un fichero. Un ejemplo:
Las funciones fread y fwrite son análogas a fscanf y fprintf, pero en vez de leer o escribir
en un fichero de texto (ASCII), lo hacen en un fichero binario, que no es legible
directamente por el usuario. Aunque dichos ficheros no se pueden leer y/o modificar con un
editor de textos, tienen la ventaja de que las operaciones de lectura y escritura son mucho
más rápidas, eficientes y precisas.
Antes de leer/escribir ficheros es necesario abrirlos previamente, del mismo modo, una vez
usados, los ficheros deben cerrarse. Las funciones fopen y fclose sirven para abrir y cerrar
ficheros, respectivamente.
La función fopen tiene la forma siguiente:
fi= fopen('filename','c')
donde fi es un valor de retorno que sirve como identificador del fichero y c es un carácter
(o dos) que indica el tipo de operación que se desea realizar. Las opciones más importantes
son las siguientes:
for i=1:5
x=fscanf(f1,'%f ',[1 1]); %lee elemento de fichero 1
y=fscanf(f2,'%f ',[1 1]); %lee elemento de fichero 2
z=x*y; %multiplica
fclose(f1);
fclose(f2);
fclose(f3);
V. Matrices
Se habla en general de una matriz como un conjunto de elementos identificables con una
serie de índices. No debe confundirse una matriz en el sentido matemático como un
conjunto de M filas y N columnas. Realmente, esto es un ejemplo de matriz de orden 2 (se
identifica cada elemento por 2 índices). Así, un vector es una matriz de orden 1 (sólo tiene
un índice) y pueden definirse matrices del orden que se desee.
Hay diversas operaciones que se pueden realizar con matrices, dada una matriz A, las
operaciones más comunes se recogen en la siguiente tabla:
Operación Significado
inv(A) inversa de la matriz A
eig(A) autovalores de la matriz A
A' traspuesta de la matriz A
diag(A) elementos de la diagonal principal
sum(A) suma de los elementos de cada una de las columnas
A(i,j) Elemento ij de la matriz
Además de este uso de matrices con operaciones matemáticas clásicas, las matrices
constituyen un elemento importante en programación, ya que permiten realizar operaciones
recursivas de una forma sencilla en función de los diferentes índices.
VI. Funciones
Como se vio en el apartado de introducción, existe un fichero de extensión .m que lleva las
órdenes a ejecutar, algunas veces, por comodidad y estructuración del programa, ciertas
instrucciones no se encuentran en ese fichero, sino en otros auxiliares que se llaman desde
el fichero principal.
Para el correcto uso de funciones, debe tenerse en cuenta tanto la forma de llamarlas desde
el programa principal, como su sintaxis dentro del programa función:
Programa función: Una función se define mediante un m- fichero (m-file), cuyo nombre
coincide con el de la función. La primera línea ejecutable es la palabra function. Su
sintaxis es
seguida de las instrucciones necesarias. Cuando hay más de un argumento de salida, éstos
deben ir entre corchetes y separados por comas.
Ejemplo: Programa que lee de un fichero datos relativos a la fecha (dia y mes) y valores de
temperatura y se pretende que escriba en otro fichero los días transcurridos desde el
principio del año y la temperatura (NOTA: no considera años bisiestos).
f_entrada=input('Fichero entrada ','s') % Pide nombre de fichero de datos
f_salida=input('Fichero salida ','s') % Pide nombre de fichero de datos
f1=fopen(f_entrada,'r'); %Abre fichero
f2=fopen(f_salida,'w'); %Abre fichero
% Llamada a Primera funcion: Calcula los dias que tiene cada mes
[dias_mes]=calendario; % dias_mes es un vector que identifica el numero
% del mes con el numero de dias que tiene
fclose(f1);
fclose(f2);
end
function [t]=t_en_dias(mes,dia,dias_mes)
t=dia;
for m=1:mes-1
t=t+dias_mes(m);
end
end
function [dias_mes]=calendario
dias_mes(1)=31;
dias_mes(2)=28;
dias_mes(3)=31;
dias_mes(4)=30;
dias_mes(5)=31;
dias_mes(6)=30;
dias_mes(7)=31;
dias_mes(8)=31;
dias_mes(9)=30;
dias_mes(10)=31;
dias_mes(11)=30;
dias_mes(12)=31;
end
Existe una serie de instrucciones MATLAB que permiten comunicarse con el sistema
operativo, algunas de las más usuales se resumen en la siguiente tabla.
Comando Resultado
what Muestra todos los m- ficheros del directorio actual
ls Muestra todos los ficheros del directorio actual
type fichero.ext Muestra el contenido del fichero fichero.ext
delete fichero.ext Borra el archivo fichero.ext
cd Cambia de directorio
pwd Muestra el nombre del directorio actual
which fichero.ext Muestra el nombre del directorio donde se encuentra
fichero.ext
Las instrucciones básicas que utiliza Matlab para dibujar la gráfica de una función de una
variable son los siguientes:
plot(X) Representa los puntos (k,Xk). Si X es una matriz, hace lo mismo para cada columna
de la matriz. Si X es un vector complejo, representa Real(X) frente a IMAG(X).
plot(X,Y) Representa el conjunto de puntos (X,Y). Si X o Y son matrices, representa por
filas o columnas los datos de X frente a los datos de Y, dependiendo si el otro vector es fila
o columna. Para valores complejos de X e Y, se ignoran las partes imaginaria. La gráfica de
plot(X,Y,S) con la opciones definidas en S. Usualmente, S se compone de dos caracteres
entre comillas simples(' '), el primero de los cuales fija el color de la línea del gráfico, y el
segundo fija el carácter a usar en el graficado. Los valores posibles de colores y caracteres
son, respectivamente, los siguientes:
y amarillo . puntos
m magenta o círculos
c cyan x x-marcas
r rojo + signos más
g verde - sólido
b azul * estrellas
w blanco : dos puntos
k negro -- semisólidos
title(’texto’) Añade el texto como título del gráfico en la parte superior del mismo en
gráficos 2-D y 3-D
xlabel(‘texto’) Sitúa el texto al lado del eje x en gráfico 2-D y 3-D
ylabel(‘texto’) Sitúa el texto al lado del eje y en gráficos 2-D y 3-D
zlabel(‘texto’) Sitúa el texto al lado de eje z en un gráfico 3-D
text(x,y, ‘texto’) Sitúa el texto en el punto (x,y) dentro del gráfico 2-D
text(x,y,z, ‘texto’) Sitúa el texto en el punto (x,y,z) en el gráfico 3-D
grid Sitúa rejillas en los ejes de un gráfico 2-D o 3-D. La opción grid on coloca las rejillas
y
grid off las elimina. La opción grid permuta entre on y off
hold Permite mantener el gráfico existente con todas sus propiedades, de modo que el
siguiente gráfico que se realice se sitúe sobre los mismos ejes y se superponga al existente.
La opción hold on activa la opción y hold off la elimina. La opción hold permuta entre on y
off. Válido para 2-D y 3-D
Algunos de los comandos que permiten manipular los ejes de un gráfico, la colocación del
mismo dentro de la pantalla, su apariencia, su presentación desde distintos puntos de vista,
etc.
axis([xmin xmax ymin ymax]) Sitúa los valores máximo y mínimo para los ejes X e Y en
el gráfico corriente
axis auto Sitúa los ejes en la escala automática por defecto (la dada por xmin=min(x),
xmax=max(x) e y libre)
axis (axis) Congela el escalado de ejes en los límites corrientes, de tal forma que al situar
otro gráfico sobre los mismo ejes (con hold en on), la escala no cambie
axis ij Sitúa coordenadas con el origen en la parte superior izquierda del gráfico
axis(‘square’) Convierte el rectángulo de graficado en un cuadrado, con lo que las figuras
se abomban
axis equal Sitúa el mismo factor de escala para ambos ejes
axis normal Elimina las opciones square y equal
axis off Elimina las etiquetas y marcas de los ejes y las rejillas, manteniendo el título del
gráfico y los textos situados en él con text y gtext
axis on Coloca de nuevo las etiquetas, marcas y rejillas de los ejes
subplot(m,n,p) Divide la ventana gráfica en mxn subventanas y coloca el gráfico corriente
en la ventana p-ésima, empezando a contar por la parte superior izquierda y de izquierda a
derecha hasta acabar la línea, para pasar a la siguiente
ginput(n) Permite recuperar las coordenadas de n puntos de un grafico mediante ratón o
teclado
Los comandos que habilita Matlab para representar gráfico con escalas logarítmicas son los
siguientes:
loglog(X,Y) Realiza los mismos gráficos que plot(X,Y), pero con escala logarítmica en los
dos ejes. El comando loglog presenta las mismas variantes y admite las mismas opciones
que el comando plot
semilogx(X,Y) Realiza los mismos gráficos que plot(X,Y) , pero con escala logarítmica en
el eje x, y escala normal en el eje y (escala semilogarítmica).
semilogy(X,Y) Realiza los mismos gráficos que plot(X,Y), pero con escala logarítmica en
el eje y, y escala normal en el eje x (escala semilogarítmica).
polar(angulo,radio).
angulo=0:pi/600:2*pi;
radio=sin(5*angulo);
polar(angulo,radio)
Los comandos básicos que utiliza Matlab para dibujar gráficos que generan una línea en
tres dimensiones son los siguientes:
plot3(X,Y,Z) Representa el conjunto de puntos (X,Y,Z), donde X,Y y Z son vectores fila.
X,Y y Z pueden ser matrices de la misma dimensión, en cuyo caso se hace una gráfica por
cada tripleta de filas y sobre los mismos ejes. Para valores complejos de X, Y y Z matlab
ignora las partes imaginarias.
Otro gráficos
Existen algunos tipos de gráficos que pueden ser interesantes para ciertas representaciones:
contour si se considera f(x,y) una función que depende de dos coordenadas, por ejemplo
una topografía donde para cada punto x,y se tiene una altura, se pueden representar las
curvas de nivel mediante
contour(x,y,f)
Resultado
Resultado
patch dado dos conjuntos de coordenadas X e Y, la función
patch(X,Y,C)
conecta cada pareja de coordenadas Xi,Yi con sus vecinos, formando un polígono, cuyo
interior colorea. C representa el color. Este comando es especialmente adecuado para
representación da mapas.
quiver Si se tiene un campo vectorial 2D, donde a cada punto del espacio X,Y le
corresponde un vector U,V. Se puede representar ese campo mediante:
quiver(X,Y,U,V)