Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB...

34
Introducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Formación Básica Departamento de Matemática METODOS COMPUTACIONALES INGENIERIA INDUSTRIAL INFORMATICA APLICADA INGENIERIA MECANICA

Transcript of Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB...

Page 1: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Introduccióna

MATLAB

Universidad Nacional de RosarioFacultad de Ciencias Exactas, Ingeniería y Agrimensura

Escuela de Formación BásicaDepartamento de Matemática

METODOS COMPUTACIONALES INGENIERIA INDUSTRIAL

INFORMATICA APLICADA INGENIERIA MECANICA

Page 2: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Indice

1. Introducción.................................................................................................................................. 11.1 El programa MATLAB.............................................................................................................. 11.2 Operaciones básicas.................................................................................................................... 11.3 Tipos de datos.............................................................................................................................. 31.3.1 NÚMEROS REALES DE DOBLE PRECISIÓN1.3.2 NÚMEROS COMPLEJOS: FUNCIÓN COMPLEX1.3.3 CADENAS DE CARACTERES1.4 Operadores................................................................................................................................... 51.5 Control de los formatos de salida............................................................................................... 6 2. Vectores y matrices........................................................................................................................ 6 2.1 Definición de vectores y matrices................................................................................................ 6 2.2 Operaciones con vectores y matrices.......................................................................................... 82.2.1 OPERADOR DOS PUNTOS (:)

3. Funciones de librería...................................................................................................................... 133.1 Características generales de las funciones de MATLAB.......................................................... 133.2 Funciones matemáticas elementales que operan de modo escalar........................................... 143.3 Funciones que actúan sobre vectores y matrices....................................................................... 153.4 Funciones para cálculos con polinomios..................................................................................... 163.5 Evaluación de funciones: Función feval..................................................................................... 16

4. Programación de MATLAB.......................................................................................................... 174.1 Características generales de la programación de MATLAB................................................... 174.2 Bifurcaciones y bucles.................................................................................................................. 174.2.1 SENTENCIA IF4.2.2 SENTENCIA SWITCH4.2.3 SENTENCIA FOR4.2.4 SENTENCIA WHILE4.2.5 SENTENCIA BREAK4.3 Lectura y escritura interactiva de variables.............................................................................. 194.3.1 FUNCIÓN INPUT4.3.2 FUNCIÓN DISP4.3.3 FUNCIÓN FPRINTF4.4 Guardar variables en archivos: Comandos save y load............................................................ 214.5 Archivos *.m................................................................................................................................. 234.5.1 ARCHIVOS DE COMANDOS (SCRIPTS)4.5.2 DEFINICIÓN DE FUNCIONES

5. Gráficos bidimensionales............................................................................................................... 245.1 Funciones gráficas 2D elementales.............................................................................................. 245.2 Función plot................................................................................................................................... 255.2.1 COLORES, ESTILOS DE LÍNEA Y MARCADORES EN LA FUNCIÓN PLOT5.3 Añadir nuevos elementos a un gráfico ya existente................................................................... 275.4 Control de los ejes......................................................................................................................... 285.5 Función fplot.................................................................................................................................. 285.6 Función subplot............................................................................................................................. 295.7 Eliminar elementos de un gráfico ya existente........................................................................... 295.8 Control de ventanas gráficas: Función figure............................................................................ 30

6. Gráficos tridimensionales.............................................................................................................. 306.1 Dibujo de líneas: función plot3.................................................................................................... 306.2 Dibujo de mallas: funciones meshgrid, mesh y surf................................................................... 316.3 Otros elementos de los gráficos tridimensionales...................................................................... 31

Observación importante:El presente texto es un resumen de las operaciones, comandos y funciones más importantes de MATLAB. Enla mayoría de los casos, se ha reducido la sintaxis completa como también se han obviado muchas de lascaracterísticas de los mismos, ajustándolas a lo que sólo se verá en el curso. Además, todo lo tratado en estetexto se puede aplicar en las versiones 5.3 o superiores de MATLAB.

Page 3: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

1. Introducción

1.1 El programa MATLAB

MATLAB es el nombre abreviado de “MATrix LABoratory”. MATLAB es unprograma para realizar cálculos numéricos con vectores y matrices. Como casoparticular 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áficosen dos y tres dimensiones. MATLAB tiene también un lenguaje de programaciónpropio.

MATLAB se puede arrancar como cualquier otra aplicación de Windows, cliqueandodos veces en el icono correspondiente o por medio del menú Inicio. Cuando se arrancaMATLAB aparece la ventana de comandos o Command Window. En dicha ventanaaparece también el prompt característico de MATLAB (»). Esto quiere decir que elprograma está preparado para recibir instrucciones.

Si se desea salir del programa, basta teclear los comandos quit o exit, o bien elegir ExitMATLAB en el menú File (también se puede utilizar el Alt+F4 de todas lasaplicaciones de Windows).

1.2 Operaciones básicas

Inicialmente se utilizará MATLAB como programa interactivo, en el que se irándefiniendo las variables, matrices, vectores y las expresiones que los combinan yobteniendo los resultados en forma inmediata sobre la ventana de comandos. Si estosresultados son asignados a otras variables podrán ser utilizados posteriormente en otrasexpresiones.

Podemos introducir cualquier comando a continuación del símbolo », por ejemplo siqueremos calcular el área de un círculo con radio = 5, simplemente escribiremos:

» radio = 5;» ar = pi*radio*radio;

Podemos observar que cada comando finaliza con un punto y coma (;), en este caso losresultados se calculan pero no se escriben en pantalla. Si queremos saber el valor delárea simplemente escribiremos:

» ar

y pulsaremos intro, entonces en la pantalla se exhibirá:

ar = 12.5664

Si no colocamos punto y coma al final de un comando, automáticamente se muestra elresultado en pantalla después de calcularse.

Página 1 de 32

Page 4: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

Sin embargo, como casi nunca resulta cómodo ir imprimiendo todos los resultadossobretodo cuando se trabaja con matrices de gran tamaño, por lo general se coloca elpunto y coma.

En el ejemplo anterior pi es una variable predefinida de MATLAB, que como es desuponer almacena el valor de ∏.

Como en casi todos los lenguajes de programación, en MATLAB se utilizan variablesque tienen nombres. MATLAB distingue entre mayúsculas y minúsculas en losnombres de variables. Estos deben empezar siempre por una letra y pueden constar dehasta 31 letras y números. El carácter guión bajo (_) se considera como una letra. Nohace falta declarar las variables que se vayan a utilizar. Esto hace que se deba tenerespecial cuidado con no utilizar nombres erróneos en las variables, porque no se recibiráningún aviso de la computadora.

El valor de esa variable, e incluso el tipo de entidad numérica que representa, puedecambiar a lo largo de una sesión de MATLAB o a lo largo de la ejecución de unprograma. La forma más normal de cambiar el valor de una variable es colocándola a laizquierda del operador de asignación (=).

Una expresión de MATLAB puede tener las dos formas siguientes: primero, asignandosu resultado a una variable,

variable = expresión

y segundo evaluando simplemente el resultado del siguiente modo:

expresión

en cuyo caso el resultado se asigna automáticamente a una variable interna deMATLAB llamada ans (de answer) que almacena el último resultado obtenido.Siguiendo con el ejemplo anterior, se obtiene:

» pi*radio*radio;

ans = 12.5664

Se considera por defecto que una expresión termina cuando se pulsa intro. Si se deseaque 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íneaseparándolas por comas (,) o puntos y comas (;).

Cuando se quiere eliminar una variable de la memoria hay que utilizar el comandoclear, que tiene dos formas posibles:

» clear

sin argumentos, clear elimina todas las variables creadas previamente

Página 2 de 32

Page 5: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

» clear a,b

borra las variables indicadas (en este caso las variables a y b).

1.3 Tipos de datos

Ya se ha dicho que MATLAB es un programa preparado para trabajar con variablesescalares, vectores y matrices. MATLAB trabaja siempre en doble precisión, es decirguardando cada dato en 8 bytes, con unas 15 cifras decimales exactas. También puedetrabajar con cadenas de caracteres (strings).

1.3.1 NÚMEROS REALES DE DOBLE PRECISIÓN

Los elementos constitutivos de variables escalares, vectores y matrices son númerosreales almacenados en 8 bytes (53 bytes para la mantisa y 11 para el exponente de 2;entre 15 y 16 cifras decimales equivalentes). Es importante saber cómo trabajaMATLAB con estos números y los casos especiales que presentan.

MATLAB mantiene una forma especial para los números muy grandes (más grandesque los que es capaz de representar), que son considerados como infinito. Por ejemplo,observemos cómo responde el programa al ejecutar el siguiente comando:

» 1.0/0.0Warning: Divide by zeroans =

Inf

Así pues, para MATLAB el infinito se representa como inf ó Inf. MATLAB tienetambién una representación especial para los resultados que no están definidos comonúmeros. Por ejemplo, ejecutemos los siguientes comandos y observemos las respuestasobtenidas:

» 0/0Warning: Divide by zeroans =

NaN

» inf/infans =

NaN

En ambos casos la respuesta es NaN, que es la abreviatura de Not a Number. Este tipode respuesta, así como la de Inf, son enormemente importantes en MATLAB, puespermiten controlar la fiabilidad de los resultados de los cálculos matriciales. Los NaN sepropagan al realizar con ellos cualquier operación aritmética, en el sentido de que, porejemplo, cualquier número sumado a un NaN da otro NaN. MATLAB tiene esto encuenta. Algo parecido sucede con los Inf.

MATLAB dispone de tres funciones útiles relacionadas con las operaciones de comaflotante. Estas funciones, que no tienen argumentos, son las siguientes:

Página 3 de 32

Page 6: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

eps devuelve la diferencia entre 1.0 y el número de coma flotanteinmediatamente superior. Da una idea de la precisión o número de cifras almacenadas.En un PC, eps vale 2.2204e-016.realmin devuelve el número más chico con que se puede trabajar (2.2251e-308)realmax devuelve el número más grande con que se puede trabajar (1.7977e+308)

1.3.2 NÚMEROS COMPLEJOS: FUNCIÓN COMPLEX

En muchos cálculos matriciales los datos y/o los resultados no son reales sinocomplejos, con parte real y parte imaginaria. MATLAB trabaja sin ninguna dificultadcon números complejos. Para ver como se representan por defecto los númeroscomplejos, ejecutemos los siguientes comandos:

» a = sqrt(-4)a =

0 + 2.0000i

» 3 + 4jans =

3.0000 + 4.0000i

En la entrada de datos de MATLAB se pueden utilizar indistintamente la i y la j pararepresentar el número imaginario unidad (en la salida, sin embargo, puede verse quesiempre aparece la i). Si la i o la j no están definidas como variables, puede intercalarseel signo (*). Esto no es posible en el caso de que sí estén definidas, porque entonces seutiliza el valor de la variable. En general, cuando se está trabajando con númeroscomplejos, conviene no utilizar la i como variable ordinaria, pues puede dar lugar aerrores y confusiones. Por ejemplo, observemos los siguientes resultados:

» i = 2i =

2

» 2+3ians =

2.0000 + 3.0000i

» 2+3*ians =

8

» 2+3*jans =

2.0000 + 3.0000i

Cuando i y j son variables utilizadas para otras finalidades, como unidad imaginariapuede utilizarse también la función sqrt(-1), o una variable a la que se haya asignado elresultado de esta función.

MATLAB dispone asimismo de la función complex, que crea un número complejo apartir de dos argumentos que representan la parte real e imaginaria, como en el ejemplosiguiente:

Página 4 de 32

Page 7: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

» complex(1,2)ans =

1.0000 + 2.0000i

1.3.3 CADENAS DE CARACTERES

MATLAB puede definir variables que contengan cadenas de caracteres. En MATLABlas cadenas de texto van entre apóstrofos o comillas simples. Por ejemplo:

» s = 'cadena de caracteres'

Los caracteres de una cadena se almacenan en un vector. Cada carácter ocupa 2 bytes.

1.4 Operadores

MATLAB puede operar con las variables por medio de operadores. Los operadoresaritméticos son los siguientes:

+ adición o suma– sustracción o resta* multiplicación/ división^ potenciación\ división inversa

Son los mismos que en los lenguajes de programación tradicionales, excepto el operadordivisión inversa, que calcula la inversa de la división, o sea que a\b es equivalente a b/a.

Por ejemplo:

» c= 3\1c =

0.3333

MATLAB dispone de los siguientes operadores relacionales:

< menor que> mayor que<= menor o igual que>= mayor o igual que== igual que~= distinto que

Observemos que el operador de igualdad se escribe con un doble signo igual (==) paradiferenciarlo del operador de asignación (=).

A su vez, los operadores lógicos de MATLAB son los siguientes:

Página 5 de 32

Page 8: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

& and| or~ negación lógica

Más adelante se verán ejemplos y ciertas funciones de las que dispone MATLAB parafacilitar la aplicación de estos operadores a vectores y matrices.

1.5 Control de los formatos de salida

Los formatos de salida en la ventana principal de MATLAB se pueden controlarfácilmente a partir del cuadro de diálogo que se abre con el comando Preferences delmenú File. Respecto a los formatos numéricos con que MATLAB muestra losresultados (recoerdemos que siempre calcula con la máxima precisión), se puedenactivar las mismas posibilidades por medio de comandos tecleados en la línea decomandos 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 decimalesformat short e notación científica con 4 decimalesformat short g notación científica o decimal, dependiendo del valorformat long e notación científica con 15 decimalesformat long e notación científica o decimal, dependiendo del valor

MATLAB aplica un factor de escala general a las variables cuando sus valores másgrandes o más pequeños son superiores o inferiores respectivamente a una determinadacantidad (103 y 10-3 ).

2. Vectores y matrices

2.1 Definición de vectores y matrices

Como en casi todos los lenguajes de programación, en MATLAB las matrices y vectoresson variables que tienen nombres. Para definir una matriz no hace falta establecer deantemano su tamaño (de hecho, se puede definir un tamaño y cambiarloposteriormente). MATLAB determina el número de elementos en el caso de vectores, yel número de filas y de columnas en el caso de matrices, en función del número deelementos que se proporcionan (o se utilizan).

Es posible definir un vector fila x en la forma siguiente (si los tres números estánseparados por blancos o comas, el resultado será un vector fila):

» x = [10 20 30] x =

10 20 30

Por el contrario, si los números están separados por puntos y coma (;) se obtendrá unvector columna:

Página 6 de 32

Page 9: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

» y = [11; 12; 13] y =

111213

Las matrices se definen por filas; los elementos de una misma fila están separados porblancos o comas, mientras que las filas están separadas por caracteres punto y coma (;).Por ejemplo, el siguiente comando define una matriz A de dimensión (3x3):

» A = [1 2 3; 4 5 6; 7 8 9]A =

1 2 34 5 67 8 9

En MATLAB se accede a los elementos de un vector poniendo el índice entre paréntesis(por ejemplo x(3)). Los elementos de las matrices se acceden poniendo los dos índicesentre paréntesis, separados por una coma (por ejemplo A(1,2)). Las matrices sealmacenan por columnas (aunque se introduzcan por filas, como se ha dicho antes), yteniendo en cuenta esto puede accederse a cualquier elemento de una matriz con un sólosubíndice. Por ejemplo, si A es una matriz (3x3) se obtiene el mismo valor escribiendoA(1,2) que escribiendo A(4).

Un caso especialmente interesante es el de crear una nueva matriz o un nuevo vector apartir de otras matrices u otros vectores definidos previamente. A modo de ejemplo,ejecutemos los siguientes comandos:

» z = [x 40 50 60] z =

10 20 30 40 50 60

» C = [A; x] C =

1 2 3 4 5 6 7 8 910 20 30

Otra posibilidad de crear un vector o una matriz es dándole valores a algunos de suselementos, automáticamente se asigna un cero a todos los demás elementos anterioresdel vector o de la matriz. Por ejemplo:

» w(4) = 9;» w(6) = 1;» ww =

0 0 0 9 0 1

» D(2,3) = 0D =

0 0 0 0 0 0

Página 7 de 32

Page 10: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

2.2 Operaciones con vectores y matrices

A partir de este momento tanto las matrices como los vectores definidos anteriormenteestán disponibles para hacer cualquier tipo de operación con ellos. Por ejemplo, unasencilla operación con A es hallar su matriz traspuesta. En MATLAB el operadorapóstrofo (') es el símbolo de trasposición matricial. Para calcular A' (traspuesta de A)basta teclear lo siguiente:

» A'ans =

1 4 72 5 83 6 9

Como el resultado de la operación no ha sido asignado a ninguna otra matriz, MATLAButiliza un nombre de variable por defecto (ans, de answer), que contiene el resultado dela última operación. La variable ans puede ser utilizada como operando en la siguienteexpresión que se introduzca. También podría haberse asignado el resultado a otra matrizllamada B:

» B = A'B =

1 4 72 5 83 6 9

En el caso de vectores, el operador apóstrofo (') permite obtener un vector columna apartir de un vector fila, o también obtener un vector fila a partir de un vector columna.Por ejemplo:

» xt = x'xt =

102030

» yt = y' yt =

11 12 13

MATLAB tiene en cuenta la diferencia entre vectores fila y vectores columna. Porejemplo, 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 a x el vector traspuesto de y:

» x+y'ans =

21 32 43

Es decir para poder sumar dos vectores ambos deben ser del mismo tipo y tener lamisma cantidad de elementos. Lo mismo sucede para la resta.

Página 8 de 32

Page 11: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

En el caso del producto, se obtiene: » x*yans =

740

es decir, se efectúa el producto escalar entre ambos vectores, debiéndose multiplicar unvector fila por un vector columna.

Si se ejecuta el siguiente comando:

» x^2??? Error using ==> ^Matrix must be square.

se obtiene un mensaje de error debido a que se está intentando multiplicar 2 vectores fila(x*x). Para solucionarlo se debe escribir:

» x*x'ans =

1400

Los operadores anteriores se pueden aplicar también de modo mixto, es decir con unoperando escalar y otro vectorial. En este caso la operación con el escalar se aplica acada uno de los elementos del vector. Consideremos el siguiente ejemplo:

» v = [3 5 7 9]v =

3 5 7 9

» v*2ans =

6 10 14 18

» v-4ans =

-1 1 3 5

Si lo que se desea es multiplicar o dividir 2 vectores componente a componente sedeben utilizar los operadores punto (.* y ./). Lo mismo sucede para el caso de lapotencia (.^). Por ejemplo:

» x.*ytans =

21 32 43

» x.^2ans =

100 400 900

En el caso de las matrices sucede algo parecido. Consideremos las siguientes matrices: » M = [1 2 3; 4 5 6]M =

1 2 34 5 6

» N = [1 2; 3 4; 5 6]

Página 9 de 32

Page 12: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

N =1 2 3 4 5 6

Para obtener el producto matricial entre ambas matrices se debe ejecutar el siguientecomando:

» M*Nans =

22 2849 64

También se puede hacer productos entre matrices y vectores (siempre que se respetenlas reglas del álgebra vectorial):

» M*yans =

74182

Si lo que se desea es sumar dos matrices, ambas deben ser del mismo tamaño, de locontrario se recibirá un mensaje de error. Por ejemplo, puedo sumar a M la traspuesta deN:

» M+N'ans =

2 5 86 9 12

Para multiplicar o dividir dos matrices componente a componente, o elevar loselementos de una matriz a una determinada potencia, se deben utilizar los operadorespunto (.* , ./ y .^). Por ejemplo:

» M.*N'ans =

1 6 158 20 36

» M.^2ans =

1 4 916 25 36

Al igual que con vectores, también se puede operar de un modo mixto, es decir con unoperando escalar y otro matricial. Consideremos el siguiente ejemplo:

» M*3ans =

3 6 912 15 18

Página 10 de 32

Page 13: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

2.2.1 OPERADOR DOS PUNTOS (:)

Este operador es muy importante en MATLAB y puede usarse de varias formas. Paraempezar, definamos un vector x con el siguiente comando:

» x = 1:10x =

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, losnúmeros enteros entre el 1 y el 10. Por defecto el incremento es 1, pero este operadorpuede también utilizarse con otros valores enteros y reales, positivos o negativos. Eneste caso el incremento va entre el valor inferior y el superior, en las formas que semuestran a continuación:

» x = 1:2:10x =

1 3 5 7 9

» x = 1:1.5:10x =

1.0000 2.5000 4.0000 5.5000 7.0000 8.5000 10.0000

» x = 10:-1:1x =

10 9 8 7 6 5 4 3 2 1

Puede verse que, por defecto, este operador produce vectores fila. Si se desea obtener unvector columna basta trasponer el resultado. El siguiente ejemplo genera una tabla defunciones seno y coseno. Observemos el resultado (recordemos que con (;) después deun 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– conmatrices. A continuación se va a definir una matriz A de tamaño 6x6 y después serealizarán diversas operaciones sobre ella con el operador (:).

» A=[5 1 6 26 19; 3 32 7 21 3; 31 9 2 22 7; 8 28 3 7 10; 0 5 34 12 14]A =

5 1 6 26 19 3 32 7 21 331 9 2 22 7 8 28 3 7 10 0 5 34 12 14

Recordemos que 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. Porejemplo:

» A(2,3)ans =

7

Página 11 de 32

Page 14: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

El siguiente comando extrae los 3 primeros elementos de la 5ª fila:

» A(5, 1:3)ans =

0 5 34

Los dos puntos aislados representan "todos los elementos". Por ejemplo, el siguientecomando extrae todos los elementos de la 3ª fila:

» A(3, :)ans =

31 9 2 22 7

El siguiente comando extrae todos los elementos de las filas 3, 4 y 5:

» A(3:5,:)ans =

31 9 2 22 7 8 28 3 7 10 0 5 34 12 14

Se pueden extraer conjuntos disjuntos de filas utilizando corchetes [ ]. Por ejemplo, elsiguiente comando extrae las filas 1, 2 y 5:

» A([1 2 5],:)ans =

5 1 6 26 19 3 32 7 21 3 0 5 34 12 14

En los ejemplos anteriores se han extraído filas y no columnas, pero es evidente quetodo lo que se dice para filas vale para columnas y viceversa: basta cambiar el orden delos índices.

El operador dos puntos (:) puede utilizarse en ambos lados del operador (=). Porejemplo, a continuación se va a definir una matriz B de tamaño 5x5 y se van areemplazar filas de B por filas de A. Observemos que la siguiente secuencia decomandos sustituye las filas 2, 4 y 5 de B por las filas 1, 2 y 3 de A,

» B = [1 0 0 0 10; 2 4 5 7 6; 2 0 1 3 1; 4 6 8 1 2; 2 6 8 0 1];» B([2 4 5],:) = A(1:3,:)B =

1 0 0 0 10 5 1 6 26 192 0 1 3 1 3 32 7 21 30 5 34 12 14

Como nuevo ejemplo, se va a ver la forma de invertir el orden de los elementos de unvector:

» x = [0.91 0.76 0.26 0.04 0.73]x =

0.91 0.76 0.26 0.04 0.73

Página 12 de 32

Page 15: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

» x = x(5:-1:1)x =

0.73 0.04 0.26 0.76 0.91

Observemos que por haber utilizado paréntesis –en vez de corchetes– los valoresgenerados por el operador (:) afectan a los índices del vector y no al valor de suselementos.

Para invertir el orden de las columnas de una matriz se puede hacer lo siguiente:

» A = [8 1 6; 3 5 7; 4 9 2]A =

8 1 63 5 74 9 2

» A(:,3:-1:1)ans =

6 1 87 5 32 9 4

3. Funciones de librería

3.1 Características generales de las funciones de MATLAB

MATLAB tiene un gran número de funciones incorporadas. Algunas son funcionesintrínsecas, esto es, funciones incorporadas en el propio código ejecutable delprograma. Estas funciones son particularmente rápidas y eficientes. Existen ademásfunciones definidas en ficheros *.m que vienen con el propio programa o que han sidoaportadas por usuarios del mismo.

Recuérdese que para que MATLAB encuentre una determinada función de usuario elcorrespondiente archivo-M debe estar en el directorio actual o en uno de los directoriosdel path.

Al igual que en la mayoría de los lenguajes, una función tiene nombre, valor de retornoy argumentos. Una función se llama utilizando su nombre en una expresión outilizándolo como un comando más. Las funciones se definen en archivos de texto *.men la forma que se verá más adelante. Consideremos los siguientes ejemplos de llamadaa funciones (se supone que las variables x, y y alfa ya se encuentran definidas):

» [máximox, posmax] = max(x);» máximoy = max(y);» r = sqrt(x^2+y^2);» a = cos(alfa) – sin(alfa);

donde se han utilizado algunas funciones matemáticas bien conocidas como el cálculodel valor máximo, el valor mínimo, el seno, el coseno y la raíz cuadrada.

Página 13 de 32

Page 16: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

Los argumentos de cada función van a continuación del nombre entre paréntesis (yseparados por comas si hay más de uno). Los valores de retorno son el resultado de lafunción y sustituyen a ésta en la expresión donde la función aparece.

Una diferencia importante con otros lenguajes es que en MATLAB las funcionespueden tener valores de retorno múltiples, ya sean escalares, vectores o matrices (yase verá que pueden recogerse en distintas variables todos o sólo parte de estos valores deretorno), como en el primero de los ejemplos anteriores. En este caso se calcula elelemento de máximo valor en un vector, y se devuelven dos valores: el valor máximo yla posición que ocupa en el vector. Observemos que los 2 valores de retorno se recogenentre corchetes, separados por comas. En el segundo ejemplo sólo se recoge un valor deretorno: el valor máximo, descartándose la posición de dicho valor.

Los nombres de las funciones de MATLAB no son palabras reservadas del lenguaje. Esposible crear una variable llamada sin o cos, que ocultan las funciones correspondientes.Para poder acceder a las funciones hay que eliminar (clear) las variables del mismonombre que las ocultan.

3.2 Funciones matemáticas elementales que operan de modo escalar

Estas funciones, que comprenden las funciones matemáticas básicas, se aplican de lamisma forma a escalares, vectores y matrices. En el caso de vectores y matrices actúansobre cada elemento como si se tratase de un escalar, dando como resultado un nuevovector o una nueva matriz, respectivamente. Algunas de las funciones de este grupo sonlas siguientes:

sin(x) senocos(x) cosenotan(x) tangenteasin(x) arco senoacos(x) arco cosenoatan(x) arco tangente (devuelve un ángulo entre p/2 y p/2)sinh(x) seno hiperbólicocosh(x) coseno hiperbólicotanh(x) tangente hiperbólicaasinh(x) arco seno hiperbólicoacosh(x) arco coseno hiperbólicoatanh(x) arco tangente hiperbólicalog(x) logaritmo naturallog10(x) logaritmo decimalexp(x) función exponencialsqrt(x) raíz cuadradasign(x) devuelve -1 si <0, 0 si =0 y 1 si >0rem(x,y) resto de la división entre x e ymod(x,y) similar a rem round(x) redondeo hacia el entero más próximofix(x) redondea hacia el entero más próximo a 0floor(x) valor entero más próximo hacia ceil(x) valor entero más próximo hacia

Página 14 de 32

Page 17: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

real(x) partes realesimag(x) partes imaginariasabs(x) valores absolutos

3.3 Funciones que actúan sobre vectores y matrices

Las siguientes funciones actúan sobre vectores:

[xm,im]=max(x) máximo elemento de un vector. Devuelve el valor máximo xm yla posición que ocupa im

[xn,in]=min(x) mínimo elemento de un vector. Devuelve el valor mínimo xn y laposición que ocupa in

sum(x) suma de los elementos de un vectorcumsum(x) devuelve el vector suma acumulativa de los elementos de un

vectormean(x) valor medio de los elementos de un vectorstd(x) desviación típicaprod(x) producto de los elementos de un vectorcumprod(x) devuelve el vector producto acumulativo de los elementos de un

vector[y,i]=sort(x) ordenación de menor a mayor de los elementos de un vector x.

Devuelve el vector ordenado y, y un vector i con las posicionesiniciales en x de los elementos en el vector ordenado y.

En realidad estas funciones se pueden aplicar también a matrices, pero en ese caso seaplican por separado a cada columna de la matriz, dando como valor de retorno unvector fila obtenido al aplicar la función a cada columna de la matriz considerada comovector. Si estas funciones se quieren aplicar a las filas de la matriz basta aplicar dichasfunciones a la matriz traspuesta.

Hay otras funciones que también trabajan con vectores y matrices, son las siguientes:

n=length(x) si x es un vector devuelve la cantidad de elementos del vector x, six es una matriz cuadrada devuelve el órden de la matriz y si x esuna matriz no cuadrada devuelve la cantidad de filas o la cantidadde columnas según cual sea el mayor valor

[m,n] = size(A) devuelve el número de filas m y de columnas n de una matriz A.Si la matriz es cuadrada basta recoger el primer valor de retorno

B=zeros(size(A)) forma una matriz B de ceros del mismo tamaño que una matriz Apreviamente creada

B=ones(size(A)) ídem con unosA=diag(x) forma una matriz diagonal A cuyos elementos diagonales son los

elementos de un vector ya existente xx=diag(A) forma un vector x a partir de los elementos de la diagonal de una

matriz ya existente AA=rand(n) forma una matriz de números aleatorios entre 0 y 1, con

distribución uniforme, de tamaño n x nA=rand(m,n) idem de tamaño m x n

Página 15 de 32

Page 18: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

3.4 Funciones para cálculos con polinomios

Para MATLAB un polinomio se puede definir mediante un vector de coeficientes. Porejemplo, el polinomio:

x4- 8x2 + 6x - 10

se puede representar mediante el vector [1, 0, -8, 6, -10]. MATLAB puede realizardiversas operaciones sobre él, como por ejemplo evaluarlo para un determinado valor dex (función polyval()) y calcular las raíces (función roots()):

» pol = [1 0 -8 6 -10]pol =

1 0 -8 6 -10

» roots(pol)ans =

-3.28002.67480.3026 + 1.0238i0.3026 - 1.0238i

» polyval(pol,1)ans =

-11

3.5 Evaluación de funciones: Función feval

La función feval() permite evaluar una función para un determinado valor o conjunto devalores de sus argumentos. Su forma general es:

[v1,v2,...] = feval(nombrefuncion, arg1, arg2, ...)

El primer argumento de feval() es una cadena de caracteres conteniendo el nombre de lafunción a evaluar, y los restantes argumentos son los correspondientes a la funciónnombrefuncion. Los valores de retorno son los que se obtienen al evaluarnombrefuncion.

Podemos observar que los dos siguientes comandos:

» cos(0.5)» feval('cos',0.5)

son equivalentes. Sin embargo la función feval() es muy útil en aquellas funcionesdefinidas en un archivo *.m (que se estudiarán a continuación) que acepten comoargumentos cadenas de caracteres especificando el nombre de otras funciones.

Página 16 de 32

Page 19: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

4. Programación de MATLAB

4.1 Características generales de la programación de MATLAB

MATLAB es una aplicación que se puede programar muy fácilmente. De todas formas,como lenguaje de programación no tiene tantas posibilidades como otros lenguajes. Losprogramas se escriben en archivos de texto con extensión (.m). Estos archivos se crean ymodifican con un editor de textos cualquiera. Sin embargo, lo más sencillo es utilizar supropio editor de textos.

Existen dos tipos de archivos *.m, los archivos de comandos o de guión (llamadosscripts en inglés) y las funciones. Los primeros contienen simplemente un conjunto decomandos que se ejecutan sucesivamente cuando se teclea el nombre del archivo en lalínea de comandos de MATLAB. Las funciones permiten definir funciones enteramenteanálogas a las de MATLAB, con su nombre, sus argumentos y sus valores de retorno.Los archivos *.m que definen funciones permiten extender las posibilidades deMATLAB; de hecho existen bibliotecas de archivos *.m que se venden (toolkits) o sedistribuyen gratuitamente (a través de Internet).

Vale destacar que para MATLAB el carácter por ciento (%) indica comienzo decomentario. Cuando aparece en una línea de comandos, el programa supone que todo loque va desde ese carácter hasta el fin de la línea es un comentario. Más adelante se veráque los comentarios de los archivos *.m tienen algunas peculiaridades importantes, puespueden servir para definir help's personalizados de las funciones que el usuario vayacreando.

Se comenzará viendo las bifurcaciones y bucles, y la lectura y escritura interactiva devariables, que son los elementos básicos de cualquier programa de una ciertacomplejidad. Al final se explicará con más detalle las características de los archivos decomandos y de las funciones.

4.2 Bifurcaciones y bucles

MATLAB posee un lenguaje de programación que –como cualquier otro lenguaje–dispone de sentencias para realizar bifurcaciones y bucles. Las bifurcaciones permitenrealizar una u otra operación según se cumpla o no una determinada condición. Losbucles permiten repetir las mismas o análogas operaciones sobre datos distintos.

4.2.1 SENTENCIA IF

En su forma más simple, la sentencia if se escribe en la forma siguiente (observemosque la condición no va entre paréntesis, aunque se pueden poner si se desea) :

if condicionsentencias

end

Existe también la bifurcación múltiple, en la que pueden concatenarse tantascondiciones como se desee, y que tiene la forma:

Página 17 de 32

Page 20: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

if condicion1bloque1

elseif condicion2bloque2

elseif condicion3bloque3

else bloque4

end

donde la opción por defecto else puede ser omitida: si no está presente no se hace nadaen caso de que no se cumpla ninguna de las condiciones que se han chequeado.

Una observación muy importante: la condición del if puede ser una condición matricial,del tipo A==B, donde A y B son matrices del mismo tamaño. Para que se considere quela condición se cumple, es necesario que sean iguales dos a dos todos los elementos delas matrices A y B. Basta que haya dos elementos diferentes para que las matrices nosean iguales, y por tanto las sentencias del if no se ejecuten. Análogamente, unacondición en la forma ~=B exige que todos los elementos sean diferentes dos a dos.Bastaría que hubiera dos elementos iguales para que la condición no se cumpliese. Enresumen:

if A==B exige que todos los elementos sean iguales dos a dosif ~=B exige que todos los elementos sean diferentes dos a dos

4.2.2 SENTENCIA SWITCH

La sentencia switch realiza una función análoga a un conjunto de if...elseifconcatenados. Su forma general es la siguiente:

switch expresioncase case_expr1,

bloque1case {case_expr2, case_expr3, case_expr4,...}

bloque2...otherwise,

bloque3end

Al principio se evalúa la expresion, cuyo resultado debe ser un número escalar o unacadena de caracteres. Este resultado se compara con las case_expr, y se ejecuta elbloque de sentencias que corresponda con ese resultado. Si ninguno es igual a expresionse ejecutan las sentencias correspondientes a otherwise. Según puede verse en elejemplo anterior, es posible agrupar varias condiciones dentro de unas llaves; basta quese cumpla cualquier condición para que se ejecute ese bloque de sentencias.. Sólo seejecuta uno de los bloques relacionado con un case.

Página 18 de 32

Page 21: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

4.2.3 SENTENCIA FOR

La sentencia for repite un conjunto de sentencias un número predeterminado de veces.La siguiente construcción ejecuta sentencias con valores de i de 1 a n, variando de unoen uno.

for i=1:nsentencias

end

En el siguiente ejemplo se presenta el caso más general para la variable del bucle(valor_inicial: incremento: valor_final); el bucle se ejecuta por primera vez con i=n, yluego i se va reduciendo de 0.2 en 0.2 hasta que llega a ser menor que 1, en cuyo caso elbucle se termina:

for i=n:-0.2:1sentencias

end

En el siguiente ejemplo se presenta una estructura correspondiente a dos buclesanidados. La variable j es la que varía más rápidamente (por cada valor de i, j tomatodos sus posibles valores):

for i=1:mfor j=1:n

sentenciasend

end

4.2.4 SENTENCIA WHILE

La estructura del bucle while es muy similar a la de la mayoría de los lenguajes deprogramación. Su sintaxis es la siguiente:

while condicionsentencias

end

4.2.5 SENTENCIA BREAK

La sentencia break hace que se termine la ejecución del bucle más interno de los quecomprenden a dicha sentencia.

4.3 Lectura y escritura interactiva de variables

Se verá a continuación una forma sencilla de leer variables desde teclado y escribirmensajes en la pantalla de la PC.

Página 19 de 32

Page 22: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

4.3.1 FUNCIÓN INPUT

La función input permite imprimir un mensaje en la línea de comandos de MATLAB yrecuperar como valor de retorno un valor numérico o una cadena de caracteres tecleadapor el usuario.

Después de imprimir el mensaje, el programa espera que el usuario teclee el valornumérico o la cadena de caracteres. El usuario puede teclear simplemente un escalar, unvector o una matriz. En el caso de una cadena de caracteres, la misma debe ser tecleadaentre apóstrofos. Veamos los siguientes ejemplos de uso de esta función:

n = input('Teclee el número de ecuaciones')nombre = input('Ingrese su nombre (encerrado entre apóstrofos)')

Otra posible forma de esta función es la siguiente (observemos el parámetro 's'):

nombre = input('¿Cómo te llamas?','s')

En este caso no es necesario encerrar entre apóstrofos el texto tecleado, con lo que elmismo se almacena en la cadena nombre.

4.3.2 FUNCIÓN DISP

La función disp permite imprimir en pantalla un mensaje de texto o el valor de unavariable, pero sin imprimir su nombre. Consideremos los siguientes ejemplos de cómose utiliza:

» disp('El programa ha terminado')» A=rand(4,4)» A» disp(A)

Observemos en el ejemplo anterior la diferencia entre las dos formas de imprimir lamatriz A.

4.3.3 FUNCIÓN FPRINTF

La función fprintf permite imprimir en pantalla mensajes y valores con formato. Suforma general es:

fprintf('cadena de control', var1, var2,...)

donde la cadena de control va encerrada entre apóstrofos y contiene los formatos deescritura:

%f para variables numéricas%e para variables numéricas con notación exponencial%s para cadenas de caracteres

Página 20 de 32

Page 23: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

Por ejemplo:

fprintf('el volumen es %12.5f\n', vol)

En la cadena de control aparece 'el volumen es' que es el mensaje que se exhibirá, %12.5f es el formato con el cual se imprimirá la variable (longitud total del campo de 12dígitos, de los cuales 5 son para la parte decimal) y \n es el operador de nueva línea queavanza en una línea la posición en la pantalla. El operador de nueva línea se puedecolocar en cualquier lugar de la cadena. Por último vol es la variable que se imprimirácon formato %12.5f.

Si se ejecutan las siguientes sentencias

sup = 12345.2 fprintf('superficie: %12.5e\n', sup)

se exhibirá

superficie: 1.23452e+04

Si se escriben consecutivamente dos funciones fprintf sin \n en la primera función, porejemplo:

num = 12.3454; doble = 2 * num;fprintf('numero: %12.3f', num)fprintf('doble: %12.3f\n', doble)

toda la salida se imprimirá en una sola línea:

numero: 12.345 doble: 24.691

Para imprimir un valor entero empleando el mismo formato se debe poner un cerodespués del punto decimal, por ejemplo las sentencias:

num = 93; fprintf('numero: %3.0f\n ', num)

producen el siguiente resultado:

numero: 93

4.4 Guardar variables en archivos: Comandos save y load

En muchas ocasiones puede resultar interesante interrumpir el trabajo con MATLAB ypoderlo recuperar más tarde en el mismo punto en el que se dejó (con las mismasvariables definidas). Hay que tener en cuenta que al salir del programa todo el contenidode la memoria se borra automáticamente.

Si se teclea:

» save

Página 21 de 32

Page 24: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

antes de abandonar el programa, se crea un archivo binario llamado matlab.mat con elnombre y valor de todas las variables definidas. Dicho variables pueden recuperarse lasiguiente vez que se arranque el programa con el comando:

» load

Esta es la forma más básica de los comandos save y load. Se pueden guardar tambiénmatrices y vectores de forma selectiva y en archivos con nombre especificado por elusuario. Por ejemplo, el comando:

» save filename A, x, y

guarda las variables A, x e y en un archivo binario llamado filename.mat.

Para recuperarlas en otra sesión basta teclear:

» load filename

El comando save también permite guardar variables en un archivo de texto en formatoASCII utilizándolo de la siguiente forma:

» save datos.dat A –ascii

En este caso, se guarda la matriz A en el archivo llamado datos.dat. Cada elemento de Ase almacena con 8 cifras decimales. En cambio, si se desea almacenar 16 cifrasdecimales, se escribe:

» save datos.dat A –ascii -double

Hay que tener en cuenta que en formato ASCII sólo se guardan los valores y no otrainformación tal como los nombres de las matrices y/o vectores.

Para recuperar los datos almacenados en un archivo de texto se puede utilizar elcomando load, pero en este caso load no se comporta de forma inversa a save. La razónes que si bien save en formato ASCII puede escribir múltiples variables, load lee todo elarchivo de datos y lo almacena en una variable cuyo nombre coincide con el nombre delarchivo. Por ejemplo, el comando:

» load datos.dat

guarda el contenido de todo el archivo en una variable llamada datosindependientemente de cual sea la extensión del archivo.

Si se desea que la variable tenga un nombre distinto al del archivo, se debe utilizar elcomando load como una función que tenga como parámetro al nombre del archivo, porejemplo:

» A = load('datos.dat')

guarda el contenido del archivo en una variable llamada A

Página 22 de 32

Page 25: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

4.5 Archivos *.m

4.5.1 ARCHIVOS DE COMANDOS (SCRIPTS)

Como ya se ha dicho, los archivos de comandos (o de guión) o scripts son archivos conun nombre tal como file1.m que contienen una sucesión de comandos análoga a la quese teclearía en el uso interactivo del programa. Dichos comandos se ejecutansucesivamente cuando se teclea el nombre del archivo que los contiene (sin laextensión), es decir cuando se teclea file1 con el ejemplo considerado.

En los archivos de comandos conviene poner los puntos y coma (;) al final de cadasentencia, para evitar una salida de resultados demasiado cuantiosa. A su vez, unarchivo *.m puede llamar a otros archivos *.m.

Las variables definidas por los archivos de comandos son variables del espacio detrabajo desde el que se ejecuta el archivo, esto es variables con el mismo carácter quelas que se crean interactivamente en MATLAB si el archivo se ha ejecutado desde lalínea de comandos. Al terminar la ejecución del script, dichas variables permanecen enmemoria.

Mención especial merece el archivo de comandos startup.m. Este archivo se ejecutacada vez que se entra en MATLAB. En él puede introducir todos aquellos comandosque le interesa se ejecuten siempre al iniciar la sesión, por ejemplo format long y loscomandos necesarios para modificar el path.

4.5.2 DEFINICIÓN DE FUNCIONES

La primera línea (que no sea una línea de comentario) de un archivo llamado name.mque define una función tiene la forma:

function [lista de valores de retorno] = name(lista de argumentos)

donde name es el nombre de la función (es recomendable que el nombre del archivocoincida con el nombre de la función). Entre corchetes y separados por comas van losvalores de retorno (siempre que haya más de uno), y entre paréntesis también separadospor comas los argumentos. Puede haber funciones sin valor de retorno y también sinargumentos. Recordemos que los argumentos son los datos de la función y los valoresde retorno sus resultados. Si no hay valores de retorno se omiten los corchetes y elsigno igual (=); si sólo hay un valor de retorno no hace falta poner corchetes. Tampocohace falta poner paréntesis si no hay argumentos.

Una función no modifica nunca los argumentos que recibe. Los resultados de unafunción de MATLAB se obtienen siempre a través de los valores de retorno, que puedenser múltiples y matriciales.

Las variables definidas dentro de una función son variables locales, en el sentido de queson inaccesibles desde otras partes del programa y en el de que no interfieren convariables del mismo nombre definidas en otras funciones o partes del programa.

Página 23 de 32

Page 26: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

Se puede decir que dichas variables pertenecen al propio espacio de trabajo de lafunción y no son vistas desde otros espacios de trabajo.

Por razones de eficiencia, los argumentos que recibe una función de MATLAB no secopian a variables locales si no son modificados por dicha función (se diría que se pasanpor referencia). Esto tiene importantes consecuencias en términos de eficiencia y ahorrode tiempo de cálculo. Sin embargo, si dentro de la función se realizan modificacionessobre los argumentos recibidos, antes se sacan copias de dichos argumentos a variableslocales y se modifican las copias (se diría que en este caso los argumentos se pasan porvalor).

Dentro de la función, los valores de retorno deben ser calculados en algún momento. Laejecución de una función termina cuando se llega a su última sentencia ejecutable. Si sequiere forzar el que una función termine de ejecutarse se puede utilizar la sentenciareturn, que devuelve inmediatamente el control al entorno de llamada.

También las funciones creadas por el usuario pueden tener su help, análogo al quetienen las propias funciones de MATLAB. Esto se consigue de la siguiente forma: lasprimeras líneas de comentarios de cada archivo de función son muy importantes, puespermiten construir un help sobre esa función.

En otras palabras, cuando se teclea en la ventana de comandos de MATLAB:

» help mi_func

el programa responde escribiendo las primeras líneas del archivo mi_func.m quecomienzan por el carácter (%), es decir, que son comentarios.

5. Gráficos bidimensionales

5.1 Funciones gráficas 2D elementales

Los gráficos 2-D de MATLAB están fundamentalmente orientados a la representacióngráfica de vectores (y matrices). MATLAB utiliza un tipo especial de ventanas pararealizar las operaciones gráficas. Ciertos comandos abren una ventana nueva y otrosdibujan sobre la ventana activa, bien sustituyendo lo que hubiera en ella, bien añadiendonuevos elementos gráficos a un dibujo anterior.

MATLAB dispone de cuatro funciones básicas para crear gráficos 2-D. Estas funcionesse diferencian principalmente por el tipo de escala que utilizan en los ejes de abscisas yde ordenadas.

Estas cuatro funciones son las siguientes:

plot() crea un gráfico a partir de vectores y/o columnas de matrices, conescalas lineales sobre ambos ejes.

loglog() ídem con escala logarítmica en ambos ejessemilogx() ídem con escala lineal en el eje de ordenadas y logarítmica en el

eje de abscisas

Página 24 de 32

Page 27: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

semilogy() ídem con escala lineal en el eje de abscisas y logarítmica en el ejede ordenadas

En lo sucesivo se hará referencia casi exclusiva a la primera de estas funciones (plot).Las demás se pueden utilizar de un modo similar.

5.2 Función plot

Esta es la función clave de todos los gráficos 2-D en MATLAB. Ya hemos dicho que elelemento básico de los gráficos bidimensionales es el vector. Se utilizan tambiéncadenas de 1, 2 ó 3 caracteres para indicar colores y tipos de línea. La función plot(), ensus diversas variantes, no hace otra cosa que dibujar vectores. Un ejemplo muy sencillode esta función, en el que se le pasa un único vector como argumento, es el siguiente:

» x = [1 3 2 4 5 3]x =1 3 2 4 5 3» plot(x)

El resultado de este comando es que se abre una ventana mostrando un gráfico dondepor defecto, los distintos puntos del gráfico se unen con una línea continua. Tambiénpor defecto, el color que se utiliza para la línea es el azul. Cuando a la función plot() sele pasa un único vector como argumento, dicha función dibuja en ordenadas el valor delos n elementos del vector frente a los índices 1, 2, ... n del mismo en abscisas.

En la pantalla de la computadora se puede ver que MATLAB utiliza por defecto el colorblanco para el fondo de la pantalla y otros colores más oscuros para los ejes y lasgráficas.

Una segunda forma de utilizar la función plot() es con dos vectores como argumentos.En este caso los elementos del segundo vector se representan en ordenadas frente a losvalores del primero, que se representan en abscisas. Veamos por ejemplo cómo se puededibujar un cuadrilátero de esta forma (observemos que para dibujar un polígono cerradoel último punto debe coincidir con el primero):

» x = [1 6 5 2 1]; » y = [1 0 4 3 1];» plot(x,y)

Pero uno de los usos más importantes de la función plot() es poder graficar funcionesmatemáticas, para ello se debe definir un vector de abscisas utilizando el operador dospuntos, donde el primer y último valor sean los valores extremos entre los cuales sedesea graficar, y el incremento sea lo suficientemente pequeño como para que losdistintos puntos del gráfico que se unen con una línea recta simulen ser una curvacontinua. Luego se debe evaluar la función en dichas abscisas y posteriormente graficarcon la función plot(). Observemos el siguiente ejemplo:

» x = 0:pi/100:pi;» y = sin(x);» plot(x,y)

Página 25 de 32

Page 28: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

Los dos últimos comandos anteriores se podrían haber resumido en un único comandode la siguiente forma:

» x = 0:pi/100:pi;» plot(x,sin(x))

La función plot() permite también dibujar múltiples curvas introduciendo varias parejasde vectores como argumentos. En este caso, cada uno de los segundos vectores sedibujan en ordenadas como función de los valores del primer vector de la pareja, que serepresentan en abscisas. Si el usuario no decide otra cosa, para las sucesivas líneas seutilizan colores que son permutaciones cíclicas del azul, verde, rojo, cyan, magenta,amarillo y negro. Observemos bien cómo se dibujan el seno y el coseno en el siguienteejemplo:

» x = 0:pi/25:6*pi;» y = sin(x); z = cos(x);» plot(x,y,x,z)

5.2.1 COLORES, ESTILOS DE LÍNEA Y MARCADORES EN LA FUNCIÓN PLOT

En la sección anterior se ha visto cómo la tarea fundamental de la función plot() eradibujar los valores de un vector en ordenadas, frente a los valores de otro vector enabscisas. En el caso general esto exige que se pasen como argumentos un par devectores. En realidad, el conjunto básico de argumentos de esta función es una tripletaformada por dos vectores y una cadena de 1, 2 ó 3 caracteres que indica el color y el tipode línea o de marker. En la tabla siguiente se pueden observar las distintas posibilidades.

Color SímboloAzul bVerde gRojo rCyan cMagenta mAmarillo yNegro k

Tipo de línea SímboloContinua -A trazos --Punteada :A trazos y puntos -.

Tipo de marca SímboloPuntos .Círculos oMarcas en x xMarcas en + +Marcas en * *

Por ejemplo, se pueden graficar los datos con marcas sin estar conectados por líneas dela siguiente manera:

Página 26 de 32

Page 29: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

» x = 0:0.4:10;» y = sin(x).*exp(-0.4*x);» plot(x,y,'+')

El tipo de línea por omisión es el continuo. Si se desea graficar con un tipo de línea enparticular, se debe indicar específicamente. Por ejemplo, para graficar con líneas atrazos:

» plot(x,y,'--')

Los símbolos del color se utilizan igual que los tipos de línea:

» plot(x,y,'g')

También es posible combinar marcas y colores:

» plot(x,y,'g+')

en este último caso se grafican los datos con marcas + de color verde.

5.3 Añadir nuevos elementos a un gráfico ya existente

Existe la posibilidad de añadir líneas a un gráfico ya existente, sin destruirlo o sin abriruna nueva ventana. Se utilizan para ello los comandos hold on y hold off. El primero deellos hace que los gráficos sucesivos respeten los que ya se han dibujado en la figura (esposible que haya que modificar la escala de los ejes); el comando hold off deshace elefecto de hold on. El siguiente ejemplo muestra cómo se añade la gráfica del coseno a lagráfica del seno previamente creada:

» x = 0:pi/100:pi;» y = sin(x);» plot(x,y)» hold on» y2 = cos(x);» plot(x,y2)» hold off

Existen además otras funciones orientadas a añadir títulos al gráfico, a cada uno de losejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc. Estas funciones son lassiguientes:

title('título') añade un título al dibujoxlabel('abscisas') añade una etiqueta al eje de abscisas. Con xlabel off desapareceylabel('ordenadas') añade una etiqueta al eje de ordenadas. Con ylabel off desaparecetext(x,y,'texto') introduce 'texto' en el lugar especificado por las coordenadas x e

y. Si x e y son vectores, el texto se repite por cada par deelementos. Si texto es también un vector de cadenas de texto de lamisma dimensión, cada elemento se escribe en las coordenadascorrespondientes

grid Con grid on se activa la inclusión de una cuadrícula en el dibujo.Con grid off desaparece la cuadrícula

Página 27 de 32

Page 30: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

5.4 Control de los ejes

También en este punto MATLAB tiene sus opciones por defecto, que en algunasocasiones puede interesar cambiar. El comando básico es el comando axis. Por defecto,MATLAB ajusta la escala de cada uno de los ejes de modo que varíe entre el mínimo yel máximo valor de los vectores a representar. Este es el llamado modo "auto", o modoautomático. Para definir de modo explícito los valores máximo y mínimo según cadaeje, se utiliza el comando:

axis([xmin, xmax, ymin, ymax])

mientras que :

axis(’auto’)

devuelve el escalado de los ejes al valor por defecto o automático. Otros posibles usosde este comando son los siguientes:

v=axis devuelve un vector v con los valores [xmin, xmax, ymin, ymax]axis(axis) mantiene los ejes en sus actuales valores, de cara a posibles

nuevas gráficas añadidas con hold onaxis('xy') utiliza ejes cartesianos normales, con el origen en la esquina

inferior izda. y el eje y vertical ascendenteaxis('ij') utiliza ejes de pantalla, con el origen en la esquina superior izda.

y el eje j en dirección vertical descendenteaxis('equal') el escalado es igual en ambos ejesaxis('square') la ventana será cuadradaaxis('normal') elimina las restricciones introducidas por ’equal’ y’square’axis('off') elimina las etiquetas, los números y los ejesaxis('on') restituye las etiquetas, los números y los ejes

5.5 Función fplot

La función fplot admite como argumento un nombre de función o un nombre de archivo*.m en el cual esté definida una función de usuario. La función puede ser escalar (unúnico resultado por cada valor de x) o vectorial. La forma general de esta función es lasiguiente:

fplot(’funcion’, limites, ’cadena’, tol)

donde:'funcion' representa el nombre de la función o del fichero *.m entre apóstrofos

(pasado como cadena de caracteres),limites es un vector de 2 ó 4 elementos que puede tomar los valores [xmin,xmax]

o [xmin,xmax,ymin,ymax],'cadena' tiene el mismo significado que en plot y permite controlar el color, los

markers y el tipo de línea.tol es la tolerancia de error relativo. El valor por defecto es 2e-03. El

máximo número de valores en x es (1/tol)+1

Página 28 de 32

Page 31: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

Veamos un ejemplo de utilización de esta función. Se comienza creando un archivollamado mifunc.m que contenga las líneas siguientes:

function y = mifunc(x)y = 200*sin(x)./x;

y a continuación se ejecuta el comando:

» fplot('mifunc', [-20 20], 'g')

5.6 Función subplot

Una ventana gráfica se puede dividir en m particiones horizontales y n verticales, conobjeto de representar múltiples gráficos en ella. Cada una de estas subventanas tiene suspropios ejes, aunque otras propiedades son comunes a toda la figura. La forma generalde este comando es:

subplot(m,n,i)

donde m y n son el número de subdivisiones en filas y columnas, e i es la subdivisiónque se convierte en activa. Las subdivisiones se numeran consecutivamente empezandopor las de la primera fila, siguiendo por las de la segunda, etc. Por ejemplo, la siguientesecuencia de comandos genera cuatro gráficos en la misma ventana:

» y = sin(x); z = cos(x); w = exp(-x*.1).*y; v = y.*z;» subplot(2,2,1), plot(x,y)» subplot(2,2,2), plot(x,z)» subplot(2,2,3), plot(x,w)» subplot(2,2,4), plot(x,v)

Se puede practicar con este ejemplo añadiendo títulos a cada subplot, así como rótulospara los ejes. Se puede intentar también cambiar los tipos de línea. Para volver a laopción por defecto basta teclear el comando:

» subplot(1,1,1)

5.7 Eliminar elementos de un gráfico ya existente

Borrar texto (u otros elementos gráficos) es un poco más complicado; de hecho, hay quepreverlo de antemano. Para poder hacerlo hay que recuperar previamente el valor deretorno del comando con el cual se ha creado. Después hay que llamar a la funcióndelete con ese valor como argumento. Considérese el siguiente ejemplo:

» v = text(1,0,'seno');» delete(v)

El comando clf elimina el contenido de la ventana gráfica, es decir, la deja abierta perovacía. En cambio el comando cla borra las curvas graficadas y redibuja los ejes.

Página 29 de 32

Page 32: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

5.8 Control de ventanas gráficas: Función figure

Si se llama a la función figure sin argumentos, se crea una nueva ventana gráfica con elnúmero consecutivo que le corresponda. El valor de retorno es dicho número. Por otraparte, el comando figure(n) hace que la ventana n pase a ser la ventana o figura activa.Si dicha ventana no existe, se crea una nueva ventana con el número consecutivo que lecorresponda (que se puede obtener como valor de retorno del comando). La funciónclose cierra la figura activa, mientras que close(n) cierra la ventana o figura número n.La función gcf devuelve el número de la figura activa en ese momento.

Para practicar un poco con todo lo que se acaba de explicar, ejecutemos las siguientesinstrucciones de MATLAB, observando con cuidado los efectos de cada una de ellas enla ventana activa. El comando figure(gcf) (get current figure) permite hacer visible laventana de gráficos desde la ventana de comandos.

» x = -4*pi:pi/20:4*pi;» plot(x,sin(x),'r',x,cos(x),'g')» title('Función seno(x) -en rojo- y función coseno(x) -en verde-')» xlabel('ángulo en radianes'), figure(gcf)» ylabel('valor de la función trigonométrica'), figure(gcf)» axis([-12,12,-1.5,1.5]), figure(gcf)» axis('equal'), figure(gcf)» axis('normal'), figure(gcf)» axis('square'), figure(gcf)» axis('off'), figure(gcf)» axis('on'), figure(gcf)» axis('on'), grid on, figure(gcf)

6. Gráficos tridimensionales

6.1 Dibujo de líneas: función plot3

La función plot3 es análoga a su homóloga bidimensional plot. Su forma más sencilla esla siguiente:

» plot3(x,y,z)

que dibuja una línea que une los puntos (x(1), y(1), z(1)), (x(2), y(2), z(2)), etc. y laproyecta sobre un plano para poderla representar en la pantalla. Al igual que en el casoplano, se puede incluir una cadena de 1, 2 ó 3 caracteres para determinar el color, losmarkers, y el tipo de línea:

» plot3(x,y,z,'r+')

Ejecutemos los siguientes comandos que dibujan una línea espiral:

» fi = [0:pi/20:6*pi];» plot3(cos(fi),sin(fi),fi,'g')

Página 30 de 32

Page 33: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

6.2 Dibujo de mallas: funciones meshgrid, mesh y surf

Ahora se verá cómo se puede dibujar una función de dos variables (z=f(x,y)) sobre undominio rectangular. Se verá que también se pueden dibujar los elementos de una matrizcomo función de los dos índices.

Sean x e y dos vectores que contienen las coordenadas en una y otra dirección de laretícula (grid) sobre la que se va a dibujar la función. Después hay que crear dosmatrices X (cuyas filas son copias de x) e Y (cuyas columnas son copias de y). Estasmatrices se crean con la función meshgrid y representan respectivamente lascoordenadas x e y de todos los puntos de la retícula.

La matriz de valores Z se calcula a partir de las matrices de coordenadas X e Y.Finalmente hay que ejecutar la función mesh con las matrices X, Y y Z comoargumentos. De esta forma se dibuja una superficie cuyos puntos tienen comocordenadas (X(i,j),Y(i,j),Z(i,j)).

Veamos como ejemplo el dibujo de la función x*exp(-x^2-y^2):

» x = -2:0.2:2;» y = x;» [X,Y] = meshgrid(x,y);» Z = X.*exp(-X.^2-Y.^2);» mesh(X,Y,Z)

Se habrá podido comprobar que la función mesh dibuja en perspectiva una función enbase a una retícula de líneas de colores, rodeando cuadriláteros del color de fondo, coneliminación de líneas ocultas. El color depende del valor z de la función. Ejecutemosahora el comando:

» surf(X,Y,Z)

y observemos la diferencia. En vez de líneas aparece ahora una superficie faceteada,también con eliminación de líneas ocultas. El color de las facetas depende también delvalor de la función.

6.3 Otros elementos de los gráficos tridimensionales

Las funciones surf y mesh dibujan funciones tridimensionales en perspectiva. Lalocalización del punto de vista o dirección de observación se puede hacer mediante lafunción view, que tiene la siguiente forma:

view(azimut, elev)

donde azimut es el ángulo de rotación de un plano horizontal, medido sobre el eje z apartir del eje x en sentido antihorario, y elev es el ángulo de elevación respecto al plano(x-y).Ambos ángulos se miden en grados, y pueden tomar valores positivos y negativos (susvalores por defecto son -37.5 y 30). También se puede definir la dirección del punto devista mediante las tres coordenadas cartesianas de un vector (sólo se tiene en cuenta ladirección):

Página 31 de 32

Page 34: Introducción a MATLAB - fceia.unr.edu.arericah/Soft/matlab_2005_FCEIA.pdfIntroducción a MATLAB Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura

Métodos Computacionales – Informática Aplicada

view([xd,yd,zd])

En los gráficos tridimensionales existen funciones para controlar los ejes, por ejemplo:

axis([xmin,xmax,ymin,ymax,zmin,zmax])

También se pueden utilizar las funciones siguientes: xlabel, ylabel, zlabel, axis('auto'),axis(axis), etc.

Las funciones mesh y surf disponen de un algoritmo de eliminación de líneas ocultas(los polígonos o facetas, no dejan ver las líneas que están detrás). El comando hiddenon/off activa y desactiva la eliminación de líneas ocultas.

En el dibujo de funciones tridimensionales, a veces también son útiles los NaNs.Cuando una parte de los elementos de la matriz de valores Z son NaNs, esa parte de lasuperficie no se dibuja, permitiendo ver el resto de la superficie.

Página 32 de 32