¡Descarga el matlab aprendizaje y más Guías, Proyectos, Investigaciones en PDF de Competencias en Matlab solo en Docsity!
,1'8675,,1-,1(58(1*2,0$L/$.2(6.2/$
Aprenda Matlab 4.
como si estuviera en Primero
San Sebastián, 1 de Septiembre de 1997
Colección preparada por:
Javier García de Jalón de la Fuente
Rufino Goñi Lasheras
José María Sarriegui Domínguez
Iñigo Girón Legorburu
Ignacio Rodríguez Garrido
Alfonso Brazález Guerra
Patxi Funes Martínez
Introducción a MATLAB 4.2 página i
- INTRODUCCIÓN ÍNDICE
- OPERACIONES CON MATRICES Y VECTORES
- 2.1 Definición de matrices desde teclado
- 2.2 Operaciones con matrices
- 2.3 Control de los formatos de salida
- 2.4 Tipos de datos
- 2.5 Variables y expresiones matriciales
- 2.6 Otras formas de definir matrices
- 2.6.1 Tipos de matrices predefinidos
- 2.6.2 Formación de una matriz a partir de otras
- 2.6.3 Direccionamiento de vectores y matrices a partir de vectores
- 2.6.4 Operador dos puntos (:)
- 2.6.5 Matriz vacía A[ ]
- 2.6.6 Definición de vectores y matrices a partir de un fichero
- 2.6.7 Definición de vectores y matrices mediante funciones y declaraciones
- 2.7 Operadores relacionales
- 2.8 Operadores lógicos
- 2.9 Bifurcaciones y bucles
- 2.9.1 Sentencia if
- 2.9.2 Sentencia for
- 2.9.3 Sentencia while
- 2.9.4 Sentencia break
- 2.10 Uso del Help
- FUNCIONES DE LIBRERÍA
- 3.1 Camino de búsqueda ( search path ) de MATLAB
- 3.2 Características generales de las funciones de MATLAB
- 3.3 Funciones matemáticas elementales que operan de modo escalar
- 3.4 Funciones que actúan sobre vectores
- 3.5 Funciones que actúan sobre matrices
- 3.5.1 Funciones matriciales elementales:
- 3.5.2 Funciones matriciales especiales
- 3.5.3 Funciones de factorización y/o descomposición matricial
- 3.6 Más sobre operadores relacionales con vectores y matrices
- 3.7 Otras funciones que actúan sobre vectores y matrices
- OTROS ASPECTOS DE MATLAB
- 4.1 Guardar valores de variables y estados de una sesión
- 4.2 Guardar sesión y copiar salidas
- 4.3 Líneas de comentarios
- 4.4 Cadenas de texto
- 4.5 Funciones para cálculos con polinomios
- 4.6 Medida de tiempos y de esfuerzo de cálculo
- 4.7 Llamada a comandos del sistema operativo
- 4.8 Funciones de función
- 4.8.1 Integración numérica
- 4.8.2 Ecuaciones no lineales y optimización
- 4.8.3 Integración numérica de ecuaciones diferenciales
- GRÁFICOS BIDIMENSIONALES
- 5.1 Funciones gráficas 2D elementales
- 5.1.1 Función plot
- 5.1.2 Estilos de línea y marcadores en la función plot
- 5.1.3 Añadir líneas a un gráfico ya existente
- 5.1.4 Comando subplot
- 5.1.5 Control de los ejes Introducción a MATLAB 4.2 página ii
- 5.2 Control de ventanas gráficas: función figure
- 5.3 Otras funciones gráficas 2-D
- 5.3.1 Función fplot
- 5.3.2 Función fill para polígonos
- 5.4 Entrada de puntos con el ratón
- 5.5 Preparación de películas o "movies"
- 5.6 Impresión de las figuras en impresora láser
- GRÁFICOS TRIDIMENSIONALES
- 6.1 Tipos de funciones gráficas tridimensionales
- 6.1.1 Dibujo de líneas: función plot3
- 6.1.2 Dibujo de mallados: funciones meshgrid, mesh y surf
- 6.1.3 Dibujo de líneas de contorno: funciones contour y contour3
- 6.2 Utilización del color en gráficos 3-D
- 6.2.1 Mapas de colores
- 6.2.2 Imágenes y gráficos en pseudocolor
- 6.2.3 Dibujo de superficies faceteadas
- 6.2.4 Otras formas de las funciones mesh y surf
- 6.2.5 Formas paramétricas de las funciones mesh , surf y pcolor
- 6.2.6 Otras funciones gráficas 3D
- 6.2.7 Elementos generales: ejes, puntos de vista, líneas ocultas,
- PROGRAMACIÓN DE MATLAB
- 7.1 Bifurcaciones y bucles
- 7.2 Lectura y escritura interactiva de variables
- 7.2.1 función input
- 7.2.2 función disp
- 7.3 Ficheros *.m
- 7.3.1 Ficheros de comandos
- 7.3.2 Definición de funciones
- 7.3.3 Help para las funciones de usuario
- 7.3.4 Variables globales
- 7.4 Cadenas de caracteres
- 7.4.1 Funciones para manejo de cadenas de caracteres
- 7.4.2 Las funciones eval y feval
- 7.5 Entrada y salida de datos
- 7.5.1 Importar datos de otras aplicaciones
- 7.5.2 Exportar datos a otras aplicaciones
- 7.6 Lectura y escritura de ficheros
- 7.6.1 Funciones fopen y fclose
- 7.6.2 Funciones fscanf , sscanf , fprintf y sprintf
- 7.6.3 Funciones fread y fwrite
- 7.6.4 Ficheros de acceso directo
- 7.7 Recomendaciones generales de programación
- CONSTRUCCIÓN DE INTERFACES GRÁFICAS CON MATLAB
- 8.1 Estructura de los gráficos de MATLAB
- 8.1.1 Objetos gráficos de MATLAB
- 8.1.2 Identificadores ( Handles )
- 8.2 Propiedades de los objetos
- 8.2.1 Funciones set() y get()
- 8.2.2 Propiedades por defecto
- 8.2.3 Funciones de utilidad
- CREACIÓN DE CONTROLES GRÁFICOS
- 9.1 Opciones del comando uicontrol
- 9.1.1 Color del objeto ( BackGroundColor)
- 9.1.2 Acción a efectuar por el comando ( CallBack )
- 9.1.3 Control Activado/Desactivado ( Enable)
- 9.1.4 Alineamiento Horizontal del titulo ( HorizontalAlignment ) Introducción a MATLAB 4.2 página iii
- 9.1.5 Valor Máximo ( Max )
- 9.1.6 Valor Mínimo ( Min )
- 9.1.7 Control del objeto padre ( Parent )
- 9.1.8 Posición del Objeto ( Position )
- 9.1.9 Nombre del Objeto ( String )
- 9.1.10 Tipo de Control (S tyle )
- 9.1.11 Unidades ( Units )
- 9.1.12 Valor ( Value )
- 9.1.13 Visible ( Visible )
- 9.2 Tipos de uicontrol
- 9.2.1 Botones ( push buttons )
- 9.2.2 Botones de selección ( check boxes )
- 9.2.3 Botones de opción ( radio buttons )
- 9.2.4 Barras de desplazamiento ( scrolling bars o sliders )
- 9.2.5 Cajas de selección desplegables ( pop-up menus )
- 9.2.6 Cajas de texto ( static text boxes )
- 9.2.7 Cajas de texto editables ( editable text boxes )
- 9.2.8 Marcos ( frames )
- CREACIÓN DE MENÚS
- 10.1 Descripción de las propiedades
- 10.1.1 Acelerador ( Accelerator )
- 10.1.2 Acción a efectuar por el menú ( CallBack )
- 10.1.3 Creación de submenus ( Children )
- 10.1.4 Menú activado/desactivado ( Enable )
- 10.1.5 Nombre del menú ( Label )
- 10.1.6 Control del objeto padre ( Parent )
- 10.1.7 Posición del Menú ( Position )
- 10.1.8 Separador ( Separator )
- 10.1.9 Visible ( Visible )
- 10.2 Ejemplo de utilización del comando uimenu
- DEBUGGER
- 11.1 ¿Qué es un debugger?
- 11.2 Comandos del debugger
- 11.3 Utilización del debugger
- 11.4 Ejemplo de utilización del debugger
- 11.4.1 Inicio de una sesión de debugger
- 11.4.2 Ejecución el fichero *.m
- 11.4.3 Comprobación del valor de las variables.
- 11.4.4 Cambio de espacio de trabajo.
- 11.4.5 Creacion de una nueva variable.
- 11.4.6 Fin del proceso de debug
1. Introducción
1.1 El programa MATLAB
MATLAB es el nombre abreviado de “MATrix LABoratory”. MATLAB es un programa para
realizar cálculos numéricos con vectores y matrices. Como caso particular puede también
trabajar con números escalares, tanto reales como complejos. Una de las capacidades más
atractivas es la de realizar una amplia variedad de gráficos en dos y tres dimensiones.
MATLAB tiene también un lenguaje de programación propio.
MATLAB se puede arrancar como cualquier otra aplicación de Windows , clicando dos
veces en el icono correspondiente (en Windows 95 , se arranca por medio del menú Start ). Al
arrancar MATLAB se abre una ventana del tipo de la indicada en la figura 1.
Figura 1. Ventana inicial de MATLAB.
En la ventana inicial se sugieren ya algunos comandos para el usuario inexperto que
quiere echar un vistazo a la aplicación. En dicha ventana aparece también el prompt
característico de MATLAB (»). Esto quiere decir que el programa está preparado para recibir
instrucciones. El saludo inicial personalizado es reflejo de un fichero de comandos personal
que se ejecuta cada vez que se entra en el programa (el fichero startup.m , en el directorio
Matlab )
Para apreciar desde el principio la potencia de MATLAB, se puede comenzar por
escribir la siguiente línea a continuación del prompt. Al final hay que pulsar intro.
» A=rand(6), B=inv(A), B*A
En realidad, en la línea anterior se han escrito tres instrucciones diferentes, separadas
por comas. Como consecuencia, la respuesta del programa tiene tres partes también, cada una
de ellas correspondiente a una de las instrucciones. Con la primera instrucción se define una
matriz cuadrada (6x6) llamada A , cuyos elementos son números aleatorios entre cero y uno
A =
A partir de este momento la matriz A está disponible para hacer cualquier tipo de
operación con ella (además de valores numéricos, en la definición de una matriz o vector se
pueden utilizar expresiones y funciones matemáticas). Por ejemplo, una sencilla operación
con A es hallar su traspuesta. En MATLAB el apóstrofo (') es el símbolo de trasposición
matricial. Para calcular A’ (traspuesta de A ) basta teclear lo siguiente (se añade a continuación
la respuesta del programa):
» A'
ans = 1 4 7 2 5 8 3 6 9
Como el resultado de la operación no ha sido asignado a ninguna otra matriz, MATLAB
utiliza un nombre de variable por defecto ( ans , de answer ), que contiene el resultado de la
última operación. La variable ans puede ser utilizada como operando en la siguiente expresión
que se introduzca. También podría haberse asignado el resultado a otra matriz llamada B :
» B=A'
B =
Ahora ya están definidas las matrices A y B , y es posible seguir operando con ellas. Por
ejemplo, se puede hacer el producto B*A (deberá resultar una matriz simétrica):
» B*A
ans = 66 78 90 78 93 108 90 108 126
En MATLAB los elementos de un vector se acceden poniendo el índice entre paréntesis
(por ejemplo x(3) ó x(i)). Los elementos de las matrices se acceden poniendo los índices entre
paréntesis, separados por una coma (por ejemplo A(1,2) ó A(i,j)). Las matrices se almacenan
por columnas (aunque se introduzcan por filas , como se ha dicho), y teniendo en cuenta esto
puede accederse a cualquier elemento de una matriz con un sólo subíndice. Por ejemplo, si A
es una matriz (3x3) se obtiene el mismo valor escribiendo A(1,2) que escribiendo A(4).
Invertir una matriz es casi tan fácil como trasponerla. A continuación se va a definir una
nueva matriz A no singular en la forma:
» A=[1 4 -3; 2 1 5; -2 5 3]
A =
Ahora se va a calcular la inversa de A y el resultado se asignará a B. Para ello basta
hacer uso de la función inv( ) (la precisión o número de cifras del resultado se puede cambiar
con el menú Options/Numeric Format ):
B=inv(A) B = 0.1803 0.2213 -0. 0.1311 0.0246 0. -0.0984 0.1066 0.
Para comprobar que este resultado es correcto basta pre-multiplicar A por B ;
» B*A
ans = 1.0000 0.0000 0. 0.0000 1.0000 0. 0.0000 0.0000 1.
De forma análoga a las matrices, es posible definir un vector fila x en la forma siguiente
(si los tres números están separados por blancos o comas , el resultado será un vector fila):
» x=[10 20 30] % vector fila x = 10 20 30
MATLAB considera comentarios todo lo que va desde el carácter % hasta el final de la
línea. Por el contrario, si los números están separados por intros o puntos y coma (;) se
obtendrá un vector columna :
» y=[11; 12; 13] % vector columna y = 11 12 13
MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Por
ejemplo, si se intenta sumar los vectores x e y se obtendrá el siguiente mensaje de error:
» x+y ??? Error using ==> + Matrix dimensions must agree.
Estas dificultades desaparecen si se suma x con el vector traspuesto de y :
» x+y' ans = 21 32 43
Aunque ya se ha visto en los ejemplos anteriores el estilo sencillo e intuitivo con el que
MATLAB opera con matrices y vectores, a continuación se va a estudiar este tema con un
poco más de detenimiento.
2.2 Operaciones con matrices
MATLAB puede operar con matrices por medio de operadores y por medio de funciones. Se
han visto ya los operadores suma (+), producto (*) y traspuesta ('), así como la función
invertir inv( ). Los operadores matriciales de MATLAB son los siguientes:
+ adición o suma
* multiplicación
' traspuesta
^ potenciación
\ división-izquierda
/ división-derecha
Estos operadores se aplican también a las variables o valores escalares, aunque con
algunas diferencias (en términos de C++ podríamos decir que son operadores sobrecargados ,
es decir, con varios significados distintos dependiendo del contexto). Todos estos operadores
son coherentes con las correspondientes operaciones matriciales: no se puede por ejemplo
b = 2 0 0 » x=A\b x =
» x=A\b, A*x-b x =
ans = -0.
Aunque no es una forma demasiado habitual, también se puede escribir un sistema de
ecuaciones lineales en una forma correspondiente a la traspuesta de la ecuación (1):
yB = c (3)
donde y y c son vectores fila ( c conocido). Si la matriz B es cuadrada e invertible, la solución
de este sistema se puede escribir en las formas siguientes:
y = c *inv( B ) (4a)
y = c / B (4b)
En este caso, el operador división-derecha por una matriz (/) equivale a postmultiplicar
por la inversa de la matriz. Si se traspone la ecuación (3) y se halla la solución aplicando el
operador división-izquierda de obtiene:
y’ = ( B’ )\ c’ (5)
Comparando las expresiones (4b) y (5) se obtiene la relación entre los operadores
división-izquierda y división-derecha (MATLAB sólo tiene implementado el operador
división-izquierda ):
c / B = (( B’ )\ c’ ) ’ (6)
En MATLAB existe también la posibilidad de aplicar elemento a elemento los
operadores matriciales (*, ^, \ y /). Para ello basta precederlos por un punto (.). Por ejemplo:
» [1 2 3 4]^
??? Error using ==> ^ Matrix must be square.
» [1 2 3 4].^ ans = 1 4 9 16
» [1 2 3 4]*[1 -1 1 -1] ??? Error using ==> * Inner matrix dimensions must agree.
» [1 2 3 4].*[1 -1 1 -1] ans = 1 -2 3 -
2.3 Control de los formatos de salida
Los formatos de salida de MATLAB pueden controlarse fácilmente con el comando Numeric
Format del menú Options. En la figura 2 se ven las opciones que aparecen al elegir ese
comando.
Figura 2. Comando Numeric Format del menú Options.
Las mismas posibilidades se pueden activar por medio de comandos tecleados en la
ventana de comandos de MATLAB. Los más importantes de estos comandos son los
siguientes:
format short coma fija con 4 decimales (defecto)
format long coma fija con 15 decimales
format short e notación científica con 4 decimales
format long e notación científica con 15 decimales
format loose introduce algunas líneas en blanco en la salida (defecto)
format compact elimina las líneas en blanco citadas (opción recomendada)
Con Commnad Window Font el usuario tiene la posibilidad de elegir el tipo de letra –
así como el tamaño y el color, tanto de las letras como del fondo– con la que se escribe en la
ventana de comandos de MATLAB. Se sugiere al usuario que haga pruebas con estos
comandos hasta conseguir el tipo de salida que más le guste.
Hay que añadir que MATLAB trata de mantener el formato de los números que han sido
definidos como enteros (sin punto decimal). Si se elige la opción Numeric Format/Rational
el programa trata de expresar los números racionales como cocientes de enteros.
2.4 Tipos de datos
Ya se ha dicho que MATLAB es un programa preparado para trabajar con vectores y matrices.
Como caso particular también trabaja con variables escalares (matrices de dimensión 1).
MATLAB trabaja siempre en doble precisión , es decir guardando cada dato en 8 bytes, con
unas 15 cifras decimales exactas. Ya se verá más adelante que también puede trabajar con
cadenas de caracteres ( strings ).
MATLAB mantiene una forma especial para los números muy grandes (más grandes
que los que es capaz de representar), que son considerados como infinito. Por ejemplo,
obsérvese cómo responde el programa al ejecutar el siguiente comando:
La asignación de valores complejos a vectores y matrices desde teclado puede hacerse
de las dos formas que se muestran en el ejemplo siguiente (conviene hacer antes clear i , para
que i no esté definida como variable. Este comando se estudiará más adelante):
» A = [1+2i 2+3i; -1+i 2-3i] A = 1.0000 + 2.0000i 2.0000 + 3.0000i -1.0000 + 1.0000i 2.0000 - 3.0000i » A = [1 2; -1 2] + [2 3; 1 -3]*i A = 1.0000 + 2.0000i 2.0000 + 3.0000i -1.0000 + 1.0000i 2.0000 - 3.0000i
Puede verse que es posible definir las partes reales e imaginarias por separado. En este
caso sí es necesario utilizar el operador (*), según se muestra en el ejemplo anterior.
Es importante advertir que el operador de matriz traspuesta ('), aplicado a matrices
complejas, produce la matriz conjugada y traspuesta. Existe una función que permite hallar
simplemente la matriz conjugada ( conj() ) y el operador punto y apóstrofo que calcula
simplemente la matriz traspuesta ( .’ ).
2.5 Variables y expresiones matriciales
Ya han aparecido algunos ejemplos de variables y expresiones matriciales. Ahora se va a
tratar de generalizar un poco lo visto hasta ahora.
Una variable es un nombre que se da a una entidad numérica, que puede ser una matriz,
un vector o un escalar. El valor de esa variable, e incluso el tipo de entidad numérica que
representa, puede cambiar a lo largo de una sesión de MATLAB o a lo largo de la ejecución
de un programa. La forma más normal de cambiar el valor de una variable es colocándola a la
izquierda del operador de asignación (=).
Una expresión de MATLAB puede tener las dos formas siguientes: asignando su
resultado a una variable,
variable = expresión
o simplemente evaluando el resultado del siguiente modo,
expresion
en cuyo caso el resultado se asigna automáticamente a una variable interna de MATLAB
llamada ans (de answer ) que almacena el último resultado obtenido. Se considera por defecto
que una expresión termina cuando se pulsa intro. Si se desea que una expresión continúe en la
línea siguiente, hay que introducir tres puntos (...) antes de pulsar intro. También se pueden
incluir varias expresiones en una misma línea separándolas por comas (,) o puntos y comas (;).
Si una expresión termina en punto y coma (;) su resultado se calcula, pero no se escribe
en pantalla. Esta posibilidad es muy interesante, tanto para evitar la escritura de resultados
intermedios, como para evitar la impresión de grandes cantidades de números cuando se
trabaja con matrices de gran tamaño.
A semejanza de C, MATLAB distingue entre mayúsculas y minúsculas en los nombres
de variables. Los nombres de variables deben empezar siempre por una letra y pueden constar
de hasta 19 letras y números (en ANSI C este número era 31). El carácter (_) se considera
como una letra. A diferencia del lenguaje C, no hace falta declarar las variables que se vayan a
utilizar. Esto hace que se deba tener especial cuidado con no utilizar nombres erróneos en las
variables, porque no se recibirá ningún aviso del ordenador.
Cuando se quiere tener una relación de las variables que se han utilizado en una sesión
de trabajo se puede utilizar el comando who. Existe otro comando llamado whos que
proporciona además información sobre el tamaño, la cantidad de memoria ocupada y el
carácter real o complejo de cada variable. Se sugiere utilizar de vez en cuando estos comandos
en la sesión de MATLAB que se tiene abierta.
Se puede eliminar por ejemplo la variable A con el comando clear A. Si se utiliza sin
argumentos, el comando clear elimina todas las variables y funciones creadas previamente.
2.6 Otras formas de definir matrices
MATLAB dispone de varias formas de definir matrices. El introducirlas por teclado sólo es
práctico en casos de pequeño tamaño y cuando no hay que repetir esa operación muchas
veces. Recuérdese que en MATLAB no hace falta definir el tamaño de una matriz. Las
matrices toman tamaño al ser definidas y este tamaño puede ser modificado por el usuario
mediante adición y/o borrado de filas y columnas. A continuación se van a ver otras formas
más potentes y generales de definir y/o modificar matrices.
2.6.1 TIPOS DE MATRICES PREDEFINIDOS
Existen en MATLAB varias funciones orientadas a definir con gran facilidad matrices de
tipos particulares. Algunas de estas funciones son las siguientes:
eye(4) forma la matriz unidad de tamaño (4x4)
zeros(3,5) forma una matriz de ceros de tamaño (3x5)
zeros(4) idem de tamaño (4x4)
ones(3) forma una matriz de unos de tamaño (3x3)
ones(2,4) idem de tamaño (2x4)
linspace(x1,x2,n) genera un vector con n valores igualmente espaciados entre x1 y
x
logspace(d1,d2,n) genera un vector con n valores espaciados logarítmicamente entre
10^d1 y 10^d2. Si d2 es pi
1
, los puntos se generan entre 10^d1 y
pi
rand(3) forma una matriz de números aleatorios entre 0 y 1, con
distribución uniforme, de tamaño (3x3)
rand(2,5) idem de tamaño (2x5)
randn(4) forma una matriz de números aleatorios de tamaño (4x4), con
distribución normal, de valor medio 0 y varianza 1
magic(4) crea una matriz (4x4) con los números 1, 2, ... 4*4, con la
propiedad de que todas las filas y columnas suman lo mismo
hilb(5) crea una matriz de Hilbert de tamaño (5x5). La matriz de Hilbert
es una matriz cuyos elementos (i,j) responden a la expresión
(1/(i+j-1)). Esta es una matriz especialmente difícil de manejar
por los grandes errores numéricos a los que conduce
invhilb(5) crea directamente la inversa de la matriz de Hilbert
(^1) pi es una variable predefinida en MATLAB, que como es fácil suponer representa el número π.
Un caso especialmente interesante es el de crear una nueva matriz componiendo como
submatrices otras matrices definidas previamente. A modo de ejemplo, ejecútense las
siguientes líneas de comandos y obsérvense los resultados obtenidos:
» A=rand(3) » B=diag(diag(A)) » C=[A, eye(3); zeros(3), B]
En el ejemplo anterior, la matriz C de tamaño (6x6) se forma por composición de cuatro
matrices de tamaño (3x3). Al igual que con simples escalares, las submatrices que forman una
fila se separan con blancos o comas , mientras que las diferentes filas se separan entre sí con
intros o puntos y comas. Los tamaños de las submatrices deben de ser coherentes.
2.6.3 DIRECCIONAMIENTO DE VECTORES Y MATRICES A PARTIR DE VECTORES
Los elementos de un vector x se pueden direccionar a partir de los de otro vector v. En este
caso, x ( v ) equivale al vector x(v(1)), x(v(2)), ... Considérese el siguiente ejemplo:
» v=[1 3 4] v = 1 3 4 » x=rand(1,6) x = 0.5899 0.4987 0.7351 0.9231 0.1449 0. » x(v) ans = 0.5899 0.7351 0.
De forma análoga, los elementos de una matriz A pueden direccionarse a partir de los
elementos de dos vectores f y c. Véase por ejemplo:
» f=[2 4]; c=[1 2]; » A=magic(4) A = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 » A(f,c) ans = 5 11 4 14
El siguiente ejemplo –continuación del anterior– permite comprobar cómo los
elementos de una matriz se pueden direccionar con un sólo índice, considerando que las
columnas de la matriz están una a continuación de otra formando un vector:
» f=[1 3 5 7]; » A(f), A(5), A(6) ans = 16 9 2 7 ans = 2 ans = 11
Más adelante se verá que esta forma de extraer elementos de un vector y/o de una matriz
tiene abundantes aplicaciones, por ejemplo la de modificar selectivamente esos elementos.
2.6.4 OPERADOR DOS PUNTOS (:)
Este operador es muy importante en MATLAB y puede usarse de varias formas. Se sugiere al
lector que practique mucho sobre los ejemplos contenidos en este apartado, introduciendo
todas las modificaciones que se le ocurran y haciendo pruebas abundantes (¡Probar es la mejor
forma de aprender!).
Para empezar, defínase un vector x con el siguiente comando:
» x=1: x = 1 2 3 4 5 6 7 8 9 10
En cierta forma se podría decir que el operador (:) representa un rango : en este caso, los
números enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este operador puede
también utilizarse con otros valores enteros y reales, positivos o negativos. En este caso el
incremento va entre el valor inferior y el superior, en las formas que se muestran a
continuación:
» x=1:2: x = 1 3 5 7 9 » x=1:1.5: x = 1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10. » x=10:-1: x = 10 9 8 7 6 5 4 3 2 1
Puede verse que por defecto este operador produce vectores fila. Si se desea obtener un
vector columna basta trasponer el resultado. El siguiente ejemplo genera una tabla de
funciones seno y coseno. Ejecútese y obsérvese el resultado (recuérdese que con (;) después de
un comando el resultado no aparece en pantalla).
» x=[0.0:pi/50:2*pi]'; » y=sin(x); z=cos(x); » [x y z]
El operador dos puntos (:) es aún más útil y potente –y también más complicado– con
matrices. A continuación se va a definir una matriz A de tamaño 6x6 y después se realizarán
diversas operaciones sobre ella con el operador (:).
» A=magic(6) A = 35 1 6 26 19 24 3 32 7 21 23 25 31 9 2 22 27 20 8 28 33 17 10 15 30 5 34 12 14 16 4 36 29 13 18 11
A diferencia de C, MATLAB accede a los elementos de una matriz por medio de los
índices de fila y de columna encerrados entre paréntesis y separados por una coma. Por
ejemplo:
» A(2,3)
ans = 7
El siguiente comando extrae los 4 primeros elementos de la 6ª fila:
» A(6, 1:4)
ans = 4 36 29 13
» A=magic(3) A = 8 1 6 3 5 7 4 9 2 » A(:,3:-1:1) ans = 6 1 8 7 5 3 2 9 4
aunque hubiera sido más fácil utilizar la función fliplr(A).
Finalmente, hay que decir que A(:) representa un vector columna con las columnas de A
una detrás de otra.
2.6.5 M ATRIZ VACÍA A[ ]
Para MATLAB una matriz definida sin ningún elemento entre los corchetes es una matriz que
existe , pero que está vacía , o lo que es lo mismo que tiene dimensión cero. Considérense los
siguientes ejemplos de aplicación de las matrices vacías:
» A=magic(3) A = 8 1 6 3 5 7 4 9 2 » B=[] B = [] » exist(B) ans = [] » isempty(B) ans = 1 » A(:,3)=[] A = 8 1 3 5 4 9
Las funciones exist() e isempty() permiten chequear si una variable existe y si está vacía.
En el último ejemplo se ha eliminado la 3ª columna de A asignándole la matriz vacía.
2.6.6 DEFINICIÓN DE VECTORES Y MATRICES A PARTIR DE UN FICHERO
MATLAB acepta como entrada un fichero nombre.m (siempre con extensión .m ) que
contiene instrucciones y/o funciones. Dicho fichero se llama tecleando simplemente su
nombre sin la extensión. A su vez, un fichero *.m puede llamar a otros ficheros *.m , e incluso
puede llamarse a sí mismo (funciones recursivas). Las variables definidas dentro de un fichero
de comandos *.m son variables globales , esto es, pueden ser accedidas desde fuera de dicho
fichero; no sucede lo mismo si el fichero *.m corresponde a una función.
Como ejemplo se puede crear un fichero llamado unidad.m que construya una matriz
unidad de tamaño 3x3 llamada U33 en un directorio llamado g:\matlab. Este fichero deberá
contener la línea siguiente:
U33=eye(3)
Desde MATLAB llámese al comando unidad y obsérvese el resultado. Entre otras
razones, es muy importante utilizar ficheros de comandos para evitar teclear muchas veces los
mismos datos, sentencias o expresiones.
2.6.7 DEFINICIÓN DE VECTORES Y MATRICES MEDIANTE FUNCIONES Y DECLARACIONES
También se pueden definir las matrices y vectores por medio de funciones de librería (las que
se verán en la siguiente sección) y de funciones programadas por el usuario (que también se
verán más adelante).
2.7 Operadores relacionales
El lenguaje de programación de MATLAB dispone de los siguientes operadores relacionales:
< menor que
> mayor que
<= menor o igual que
>= mayor o igual que
== igual que
~= distinto que^3
Obsérvese que, salvo el último de ellos, coinciden con los correspondientes operadores
relacionales de C. Sin embargo, ésta es una coincidencia más bien formal. En MATLAB los
operadores relacionales pueden aplicarse a vectores y matrices, y eso hace que tengan un
significado especial.
Al igual que en C, si una comparación se cumple el resultado es 1 ( true ), mientras que si
no se cumple es 0 ( false ). Recíprocamente, cualquier valor distinto de cero es considerado
como true y el cero equivale a false. La diferencia con C está en que cuando los operadores
relacionales de MATLAB se aplican a dos matrices o vectores del mismo tamaño, la
comparación se realiza elemento a elemento, y el resultado es otra matriz de unos y ceros del
mismo tamaño que recoge el resultado de cada comparación entre elementos. Considérese el
siguiente ejemplo como ilustración de lo que se acaba de decir:
» A=[1 2;0 3]; B=[4 2;1 5];
» A==B
ans = 0 1 0 0 » A~=B ans = 1 0 1 1
2.8 Operadores lógicos
Los operadores lógicos de MATLAB son los siguientes:
& and
| or
~ negación lógica
(^3) El carácter (~) se obtiene en los PCs pulsando sucesivamente las teclas 1, 2 y 6 manteniendo Alt pulsada.