Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


el matlab aprendizaje, Guías, Proyectos, Investigaciones de Competencias en Matlab

guia paso a paso de como usar matlab

Tipo: Guías, Proyectos, Investigaciones

2020/2021

Subido el 29/06/2021

sergio-lopez-g
sergio-lopez-g 🇨🇴

7 documentos

1 / 81

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
(6&8(/$683(5,25'(,1*(1,(526,1'8675,$/(6
81,9(56,'$''(1$9$55$
,1'8675,,1-,1(58(1*2,0$L/$.2(6.2/$
1$)$552$.281,%(576,7$7($
Aprenda Matlab 4.2
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
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51

Vista previa parcial del texto

¡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

    1. INTRODUCCIÓN ÍNDICE
    • 1.1 El programa MATLAB
    1. 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
    1. 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
    1. 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
    1. 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
    1. 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,
    1. 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
    1. 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
    1. 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 )
    1. 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
    1. 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

  • sustracción o resta

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