matlaboctave aprender matlaboctave en 25 horas

145
MATLAB + OCTAVE APRENDER MATLAB/OCTAVE EN 25 HORAS TERESA ARIAS-MARCO JOSÉ LUIS BRAVO IGNACIO OJEDA Mª ISABEL PARRA CONCHITA MARÍN © Editorial Tébar. Prohibida la reproducción sin la autorización expresa de la editorial

Upload: tbautistadiego

Post on 08-Nov-2015

38 views

Category:

Documents


3 download

DESCRIPTION

MatlabOctave, MatlabOctave

TRANSCRIPT

  • MATLAB + OCTAVEAPRENDER MATLAB/OCTAVE EN 25 HORAS

    TERESA ARIAS-MARCO JOS LUIS BRAVO IGNACIO OJEDA M ISABEL PARRA CONCHITA MARN

    Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    ISBN digital: 978-84-7360-472-7

    ISBN digital: 978-84-7360-472-7

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    Indice

    1. Introduccion a MATLAB/Octave 91.1. Primeros pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    1.2. Atajos de teclado. El comando help . . . . . . . . . . . . . . . 12

    1.3. Escalares, operaciones aritmeticas y variables . . . . . . . . . . 13

    1.4. Operadores y funciones . . . . . . . . . . . . . . . . . . . . . . 17

    1.5. Gestion de cheros . . . . . . . . . . . . . . . . . . . . . . . . . 20

    1.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

    1.7. Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    2. Matrices y vectores 292.1. Denicion desde el teclado . . . . . . . . . . . . . . . . . . . . . 29

    2.2. Otras formas de denir matrices y vectores . . . . . . . . . . . 31

    2.3. Acceso a los elementos de una matriz . . . . . . . . . . . . . . . 34

    2.4. Operaciones con vectores y matrices . . . . . . . . . . . . . . . 35

    2.5. Calculos con polinomios . . . . . . . . . . . . . . . . . . . . . . 40

    2.6. Resolucion de sistemas de ecuaciones lineales . . . . . . . . . . 42

    2.7. Gestion de cheros de hojas de calculo . . . . . . . . . . . . . . 45

    2.8. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    2.9. Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

    3. Gracos 593.1. Creacion y manipulacion basica de gracos . . . . . . . . . . . 59

    3.2. Creacion especializada de gracos . . . . . . . . . . . . . . . . . 72

    3.2.1. Gracos 2D . . . . . . . . . . . . . . . . . . . . . . . . . 73

    3.2.2. Gracos 3D . . . . . . . . . . . . . . . . . . . . . . . . . 82

    3.2.3. Gracos Estadsticos . . . . . . . . . . . . . . . . . . . . 85

    5

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    6 Aprende MATLAB/OCTAVE en 25 horas

    3.3. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913.4. Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

    4. Introduccion a la programacion 974.1. Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.2. Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004.3. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . 1044.4. Entrada y salida . . . . . . . . . . . . . . . . . . . . . . . . . . 1094.5. Manejo de funciones . . . . . . . . . . . . . . . . . . . . . . . . 1124.6. Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144.7. Soluciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    5. Ajuste de curvas a datos 1195.1. La funcion polyfit . . . . . . . . . . . . . . . . . . . . . . . . 119

    6. Autovalores y autovectores 1256.1. La funcion eig . . . . . . . . . . . . . . . . . . . . . . . . . . . 1256.2. Un ejemplo clasico . . . . . . . . . . . . . . . . . . . . . . . . 127

    7. Animaciones con MATLAB 1317.1. Creacion de animaciones . . . . . . . . . . . . . . . . . . . . . . 1317.2. Pelculas o MOVIES . . . . . . . . . . . . . . . . . . . . . . . . 1327.3. Ejemplos de pelculas o MOVIES . . . . . . . . . . . . . . . . . 133

    8. Ecuaciones diferenciales 1378.1. Ecuaciones Diferenciales Ordinarias . . . . . . . . . . . . . . . . 1378.2. Ecuaciones en derivadas parciales . . . . . . . . . . . . . . . . . 139

    Bibliografa 143

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    Prologo

    Este libro surge a partir del material elaborado para impartir un cursointensivo de MATLAB/Octave para profesores de la Universidad de Extrema-dura. La primera edicion de este curso tuvo lugar en mayo de 2010 con una muybuena acogida por parte de los profesores participantes, lo que propicio unasegunda edicion en 2011.

    Los contenidos expuestos se presentan como un curso de auto-aprendizajede modo que el lector puede conseguir una vision global de las posibilidadesde este software al tiempo que puede ir ejercitandose en el uso del mismo. As,es fundamental que se realice una lectura atenta delante de un ordenador conMATLAB u Octave instalado.

    El libro consta de dos partes bien diferenciadas. La primera parte, captu-los del 1 al 4, corresponde a los aspectos generales e imprescindibles para elmanejo de MATLAB/Octave. Cada uno de los captulos de esta parte con-tiene una serie de ejercicios de auto-evaluacion a n de que el lector puedaponer en practica los contenidos tratados. La segunda parte del libro muestraalgunos ejemplos concretos del uso de este software en el ambito academicouniversitario.

    Esperamos que esta obra contribuya a la difusion del uso del software ma-tematico (representado aqu por MATLAB/Octave) como instrumento ecazde aprendizaje en ambitos docentes y como herramienta fundamental paraabordar sin temor las matematicas.

    Badajoz, 16 de julio de 2011

    7

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 9

    Captulo 1

    Introduccion aMATLAB/Octave

    Este y todos los demas captulos del manual estan pensados para ser tra-bajados delante de un ordenador con MATLAB u Octave instalado1, y nopara ser ledos como una novela. En vez de eso, cada vez que se presente uncomando de MATLAB/Octave, se debe introducir el comando, pulsar la tecla para ejecutarlo y ver el resultado. Mas aun, se desea que se veriqueel resultado. Asegurese de que se comprende perfectamente lo que se obtieneantes de continuar con la lectura.

    1.1. Primeros pasos

    Los primeros parrafos de esta seccion, as como algunas frases aisladas enlas siguientes, estan tomados, con ligeras variaciones, del libro de A. Quar-teroni y F. Saleri Calculo Cientco con MATLAB y Octave, citado en labibliografa; una fuente excelente para introducirse en el conocimiento de losmetodos numericos mas usados en el calculo cientco.

    MATLAB y Octave, los programas, son entornos integrados para el calculocientco y la visualizacion de datos. Ambos estan escritos en los lenguajes Cy C++.

    1Concretamente estas practicas estan realizadas para MATLAB 7.0 (R14) y Octave 3.2.3

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    10 Aprende MATLAB/OCTAVE en 25 horas

    MATLAB esta distribuido por The MathWorks (http://www.mathworks.com). El nombre proviene de MATrix LABoratory, pues originariamente fuedesarrollado para el calculo matricial. Octave, tambien conocido como GNUOctave (http://www.gnu.org/software/octave/), es un software que se dis-tribuye libremente sujeto a los terminos de la licencia GPL (GNU Public Li-cense).

    A lo largo del manual haremos uso frecuente de la expresion comando deMATLAB; en ese caso, MATLAB debera ser entendido como el lenguaje quees el subconjunto comun a ambos programas MATLAB y Octave.

    Una vez llevada a cabo la instalacion, la ejecucion de MATLAB y Octa-ve nos da acceso a un entorno de trabajo caracterizado por los indicadores(prompt) >> y octave:1>, respectivamente.

    Despues de presionar la tecla (enter, return), todo lo que este es-crito a continuacion del indicador sera interpretado2. Si la instruccion es inco-rrecta, MATLAB devuelve un aviso de error. En caso contrario, el comandoes ejecutado y si procede se mostrara una salida.

    Ejemplo 1. Escribe 2+2 en el indicador de MATLAB, pulsa la teclaintro y observa el resultado:

    2 + 2

    Escribe ahora pepe y pulsa intro

    pepe

    Que ha ocurrido?

    Finalmente, el sistema devuelve el indicador para poner de maniesto queesta preparado para un nuevo comando. En todo caso, conviene saber quecualquier comando puede abortarse pulsando simultaneamente las teclas con-trol () y (). Para cerrar una sesion de MATLAB se debe escribirel comando quit (o exit) y pulsar la tecla intro . En adelante seentendera que para ejecutar un programa o un comando se tiene que pulsar

    2Por tanto, un programa en MATLAB no necesita ser compilado como ocurre con otroslenguajes (Fortran o C, por ejemplo).

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 11

    . Ademas, los terminos programa, funcion o comando se utilizaran deforma equivalente.

    Mas adelante veremos que la sintaxis de MATLAB no es muy distinta dela de cualquier otro lenguaje; las diferencias seran las habituales, los smbolosde continuacion, los comentarios, ... Veamos algunos de estos smbolos:

    Las comillas simples o apostrofes - sirven para introducir un texto literal.

    Ejemplo 2. Escribe pepe

    pepe

    Observese que MATLAB no nos ha devuelto ahora un mensaje de error,sino que ha devuelto como salida la variable por defecto ans (abreviatura deanswer) al igual que ocurrio en el ejemplo 1 cuando escribimos 2+2. Si ahoraescribimos una cadena de caracteres (numero o comando) diferente, la variableans tomara este nuevo valor.

    Ejemplo 3.

    Bienvenido a la UEx

    El porcentaje % es el smbolo usado para los comentarios. Todo lo queesta por detras de este smbolo en una lnea es ignorado por el interprete.

    Ejemplo 4.

    2 + 2 % Esto es un comentario

    Si anadimos tres puntos ... al nal de una lnea signica que se tomara lasiguiente lnea como continuacion.

    Ejemplo 5.

    2 + 2 ...- 3

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    12 Aprende MATLAB/OCTAVE en 25 horas

    Se pueden escribir varios comandos en una misma lnea, separandolos poruna coma , o por un punto y coma ; El punto y coma sirve ademas parainhibir que el resultado se muestre en la pantalla.

    Ejemplo 6.

    2 + 2, 2 - 1, ans + 3, 3 + 5;

    Notese que, aunque hemos realizado cuatro sumas, solo se han mostradolos resultados de las tres primeras ya que hemos prohibido que se muestrela salida de la ultima. No obstante, MATLAB ha interpretado la orden y haguardado resultado en la variable por defecto.

    Ejemplo 7.

    ans

    1.2. Atajos de teclado. El comando help

    La consola de MATLAB es un entorno de trabajo mas potente de lo queparece gracias a una serie de atajos de teclado de gran utilidad.

    Ejemplo 1. En la lnea de comandos de MATLAB, pulsa la echahacia arriba una vez que ha ocurrido? Pulsa ahora la echa haciaarriba varias veces y observa lo que sucede, repite el experimentopulsando tambien la echa hacia abajo . Puedes recuperar todastus ordenes anteriores y volver a ejecutarlas si lo deseas.

    Tambien se pueden usar las echas izquierda y derecha del teclado para mover el cursor a derecha e izquierda y editar as una lnea decomandos. De este modo se pueden corregir errores, recuperando un comandocon la echa hacia arriba y usando a continuacion la edicion para corregirlo.Como es natural se pueden cambiar tantos smbolos como se quiera o utilizarla tecla de retroceso para borrar.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 13

    Ejemplo 2.

    sqrt(5) % Raz cuadrada de 5

    Utilizando la echa arriba podemos editar el comando sqrt(5), cam-biar el 5 por un 4 y calcular as el valor de la raz cuadrada de 4.

    sqrt(4)

    MATLAB posee una amplia coleccion de mensajes de ayuda. Si conocesel nombre de un comando, se puede encontrar la sintaxis correcta para elcomando y ejemplos de su uso escribiendo help nombre comando.

    Ejemplo 3.

    help sqrt help help

    Una forma alternativa de obtener ayuda consiste en utilizar la tecla detabulacion :

    Ejemplo 4. Escribe sq en la lnea de comandos y pulsa paraobtener la lista funciones y comandos que comienzan por sq. Obvia-mente sqrt es uno de ellos.

    Finalmente, el comando lookfor nos muestra una lista de comandos encuyas explicaciones aparezca cadena de texto especicada.

    Ejemplo 5.

    lookfor square root help lookfor

    1.3. Escalares, operaciones aritmeticas y variables

    A decir verdad MATLAB no distingue entre escalares y matrices. Paramayor claridad, nosotros s haremos tal distincion.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    14 Aprende MATLAB/OCTAVE en 25 horas

    Esencialmente podemos utilizar numeros enteros, reales y complejos:

    Ejemplo 1.

    15, -21 % Son numeros enteros 0.32, -1.27, .065 % Son numeros reales -5.32e+5, 4.78e-3 % Tambien son numeros reales 1-i, 2+3i, -3+j % Son numeros complejos

    A pesar de que en apariencia MATLAB usa cuatro cifras decimales pa-ra representar los numeros reales y complejos, la representacion interna delnumero se hace con 16 cifras decimales. De modo que lo que hemos visto essimplemente uno de los varios posibles formatos de salida de MATLAB (elutilizado por defecto). El mismo numero puede tener diferentes expresionesdecimales dependiendo de la declaracion especca de formato que se haga.

    Ejemplo 2. Veamos distintas representaciones de 1/7

    format long 1/7 format short e 1/7 format long e 1/7 format rat 1/7

    El formato por defecto es el formato corto (4 cifras decimales). El comandoformat a secas nos devuelve al formato por defecto.

    format

    El numero esta predenido en MATLAB,

    pi

    Dos representaciones aritmeticas predenidas que pueden ser de utilidadconocer son Inf y NaN, la primera representa un numero mas grande que cual-

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 15

    quier numero que MATLAB pueda almacenar3 y juega el papel de innito,mientras que la segunda representa lo que solemos denominar una indetermi-nacion (Not a Number).

    Ejemplo 3.

    1/0 0/0 Inf + 1

    Las convenciones para las operaciones aritmeticas en MATLAB son simi-lares a las de cualquier otro lenguaje de programacion. El orden de asociacionde las operaciones es tambien el mismo. Primero operan las funciones ma-tematicas elementales (senos, cosenos, logaritmos, ...), las multiplicaciones ydivisiones y luego las sumas y restas. Como es natural, los parentesis sirvenpara modicar el orden normal de las operaciones a realizar.

    Ejemplo 4. Calculemos

    12

    0,11/2 0,4

    21/3

    3(1 2i)

    1/((2/0.1^(1/2))-(0.4/2^(1/3)))-3*(1-2i)

    El comando = permite la asignacion de un valor (o de una cadena decaracteres) a una variable dada.

    3Los numeros reales positivos mas grande xmax y mas pequeno xmin en MATLAB sonrealmax y realmin, respectivamente. El numero mas proximo a uno dado x es x + eps(x).Se puede comprobar que los numeros reales en MATLAB son mas densos cerca de xmin ymenos densos cuando se aproximan a xmax.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    16 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 5. Para asignar la cadena Bienvenido a la UEx a la variablesaludo podemos escribir:

    saludo = Bienvenido a la UEx

    Para asignar el valor de resultado de la suma 2 + 3 a la variable apodemos escribir:

    a = 2 + 3

    De este modo no hay necesidad de declarar el tipo de una variable, MATLABlo hara automatica y dinamicamente. Por ejemplo, si escribimos

    saludo = 3

    la variable saludo contendra ahora un numero y no una cadena de caracteres.Esta exibilidad no es gratis. Si ponemos una variable de nombre quit igual alnumero 5 estamos inhibiendo el comando de MATLAB quit. Por consiguien-te, deberamos tratar de evitar el uso de variables que tengan el nombre decomandos de MATLAB. Sin embargo, mediante el comando clear seguido delnombre de una variable, es posible cancelar cualquier asignacion y restaurar,por ejemplo, el signicado original del comando quit.

    Ejemplo 6.

    quit = 5 quit clear quit quit

    La funcion clear a secas cancela todas las asignaciones de valores a varia-bles que hayamos realizado.

    Los nombres de las variables pueden tener a lo sumo 63 caracteres alfa-numericos (no se admiten ni tildes ni la letra n y s el guion bajo ). Esimportante tener presente que el primer caracter siempre debe ser una letra yque para MATLAB las letras mayusculas son distintas de las minusculas.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 17

    Ejemplo 7.

    a = 5 hola = 3 Hola hola a 1 = 12 2a = -3 a2 = -3

    El comando clc limpia la consola de comandos manteniendo los valoresasignados a variables.

    Ejemplo 8.

    clc a

    Como se habra observado para conocer el valor de una variable previamentedenida basta con teclear su nombre. Tambien se pueden conocer todas lasvariables denidas hasta el momento usando los comandos who y whos.

    Ejemplo 9.

    who whos clear % Cancelamos los valores dados a las variables who

    1.4. Operadores de comparacion y logicos. Algunasfunciones elementales

    Como cualquier lenguaje de programacion, MATLAB dispone de operado-res que nos permiten comparar valores.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    18 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 1.

    2 < 3 2 > 3

    Observese que la respuesta ha sido 1 para la armacion que es verdadera y0 para la falsa. Otros operadores de comparacion son = (mayor o igual que), == (igual a) y ~= (distinto de). En todos los casos lasalida es 1 si la armacion es cierta y 0 si es falsa.

    Ejemplo 2.

    2 >= 3 4 >= 3 Inf == Inf+1 3 ~= 4

    Los operadores logicos de MATLAB son: & o and (conjuncion), | o or(disyuncion), ~ (negacion logica), xor (disyuncion exclusiva). Cuando se uti-lizan estos operadores, se evaluan siempre ambos operandos. Sin embargo,MATLAB ofrece la posibilidad de utilizar los operadores breves: &&, para laconjuncion y || para la disyuncion, que simplica la operacion de compara-cion evitando operaciones innecesarias, y errores que se produciran caso deevaluar incondicionalmente el segundo argumento (por ejemplo, para evitar ladivision por cero, podemos utilizar (b~=0)&&(a/b>0)). Solo evaluan el se-gundo operando en caso de ser imprescindible, cuando el resultado del primeroperando sea 1 para la conjuncion o 0 para la disyuncion.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 19

    Ejemplo 3.

    2

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    20 Aprende MATLAB/OCTAVE en 25 horas

    Ahora podemos utilizar las operaciones y las funciones elementales intro-ducidas arriba para construir nuevas funciones. Para ello denimos lo que seconoce como una funcion anonima. Las funciones anonimas responden a lasiguiente sintaxis:

    nombre funcion = @(argumentos) expresion

    Veamos algunos ejemplos:

    Ejemplo 5.

    fun1 = @(x) x^2-1+exp(x) fun1(0) fun2 = @(x,y) cos(x)*sin(y) fun2(pi,pi/3) fun2(pi/3,pi/2)

    Un ejemplo de una funcion a trozos podra ser

    Ejemplo 6.

    fun3 = @(x) exp(x)*(x0)

    1.5. Gestion de cheros

    Todo trabajo que se realiza durante una sesion MATLAB, se puede escribiren un archivo a modo de diario. Este archivo contendra una transcripcioncompleta y literal de todos los comandos que ha interpretado MATLAB ysus correspondientes respuestas. El contenido del archivo se puede editar concualquier procesador de textos.

    Para iniciar un archivo de diario llamado, por ejemplo, prueba.txt , de-bemos escribir

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 21

    diary prueba.txt

    en la lnea de comandos de MATLAB y, como siempre, pulsar . Pro-bablemente no se percibira ningun cambio, pero el ordenador ha comenzado aregistrar todo lo que ocurre en la consola de MATLAB en el chero prueba.txt

    %Esto se incluira en nuestro diario

    En cualquier momento se puede suspender esta orden escribiendo

    diary off

    Escribiendo ahora diary on (o diary prueba.txt) se volvera a guardartoda la sesion en el archivo de diario que previamente se haba creado, anadien-do la informacion nueva a continuacion de la ya registrada. Si hay un diarioactivo al salir de MATLAB, el archivo de diario sera cerrado automaticamente.

    Al salir de una sesion de MATLAB, los valores de todas las variables sepierden. El archivo de diario solo mantiene un registro de lo que ha aparecidoen la pantalla, no se almacenan los valores de las variables. Si se desea, antesde salir de MATLAB, se pueden guardar los valores actuales de las variablesen un archivo para su uso en una sesion futura. El siguiente comando guardalos valores de todas las variables existentes en un archivo que llamaremosmis datos.mat; por defecto, MATLAB (pero no Octave) anade la extension.mat si no ha sido especicada.

    save mis datos.mat

    Los valores de todas las variables se guardaran en forma binaria (ilegible,por tanto, para los seres humanos) en un archivo llamado mis datos.matdentro del directorio de trabajo. Para cargar estos valores de las variables enuna futura sesion de MATLAB se escribe

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    22 Aprende MATLAB/OCTAVE en 25 horas

    load mis datos

    Es posible salvar el valor de una serie de variables determinadas sin nece-sidad de guardar el resto.

    Ejemplo 1.

    a = 1; b = sqrt(2); c = no se guarda; save var ab.mat a b clear a b c load var ab a, b c

    Finalmente, podemos pedir a MATLAB que nos indique cual es el direc-torio de trabajo actual con la orden pwd y su contenido con la orden dir. Elcontenido de un chero concreto se muestra con el comando type seguido delnombre del chero. Tambien podemos borrar cheros del directorio de traba-jo usando el comando delete y cambiar de directorio con el comando cd deforma similar a como se haca en MS-DOS.

    Ejemplo 2.

    dir trab=pwd dir type var ab.mat delete var ab.mat

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 23

    dir

    cd(C:\) % Si estas usando Windows y hay unidad C.cd(home) % Si estas usando Linux.

    dir pwd cd(dir trab) pwd dir

    En MATLAB existen funciones especicas para importar datos de hojas decalculo generadas con otros programas. El abanico de formatos que reconoceMATLAB es mucho mas amplio que en Octave. Esencialmente, Octave reco-noce bases de datos separados por delimitadores, por ejemplo comas (cheros.csv). Mientras que MATLAB puede leer los datos de hojas de calculo massosticadas, por ejemplo de Excel (cheros .xls).

    En la siguiente sesion mostraremos brevemente el uso de las funcionescsvread y dlmread (validas en MATLAB y Octave) y de xlsread (exclusivade MATLAB).

    De forma analoga, los datos numericos generados en MATLAB se puedenexportar a hojas de calculo para su lectura y manipulacion con otros progra-mas. En este caso, la funciones que veremos seran csvwrite y dlmwrite (paraMATLAB y Octave) y xlswrite (solo para MATLAB).

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    24 Aprende MATLAB/OCTAVE en 25 horas

    1.6. Ejercicios

    Antes de comenzar escribe lo siguiente5

    clear all diary capitulo1.txt

    Ejercicio 1. Asigna a una variable a el numero uno. Sobre esa variable calculaa = 2a. Repite esta operacion hasta alcanzar el valor de 128.

    Ejercicio 2.

    1. Escribe un numero entero menor que 777.

    2. Divdelo entre 7 (si la division es exacta elige otro numero y vuelve adividirlo).

    3. Suma los valores de los seis primeros decimales.

    Si no nos hemos equivocado te ha salido 27.

    Ejercicio 3. Calcula el valor de ((1 + x) 1)/x para x = 1015 (obviamenteel resultado es 1 para todo x = 0).

    Ejercicio 4. Dene tres variables a, b y c con valores 10308, 1.110308 y 1.00110308, respectivamente. Compara, usando los operadores de comparacion, elvalor de a + (b + c) con el de (a + b) + c (evidentemente, por la propiedadasociativa de la suma, son iguales para todo a, b y c).

    Ejercicio 5. Dene una variable z cuyo valor sea un numero complejo no real.Calcula su modulo usando la conocida formula |z| =

    z z (la barra superior

    es la conjugacion). El modulo de un numero complejo se puede calcular deforma directa usando la funcion abs. Compara el valor obtenido antes con elvalor que te da la funcion abs.

    5Si no deseas hacer un diario de la sesion, no hace falta que lo escribas. En otro caso,el chero que se genere se guaradara en el directorio en el que te encuentres; recuerda quepuedes saber cual es escribiendo pwd .

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 25

    Ejercicio 6. Usando la ayuda de MATLAB (comando help), explica la dife-rencia entre los comandos floor, ceil, round y fix. Escribe tus explicacio-nes con comentarios, %, en la ventada de comandos e ilustrarla con ejemplosen MATLAB.

    Ejercicio 7. Calcula el coseno de 43 grados [Pista: usa el comando help deMATLAB para encontrar la funcion apropiada]

    diary off

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    26 Aprende MATLAB/OCTAVE en 25 horas

    1.7. Soluciones

    Ejercicio 1. a = 1a = 1

    a = 2*aa = 2

    a = 2*aa = 4

    a = 2*aa = 8

    a = 2*aa = 16

    a = 2*aa = 32

    a = 2*aa = 64

    a = 2*aa = 128

    Ejercicio 2. format long 776/7ans=110.857142857143

    8+5+7+1+4+2ans=27

    format short

    Ejercicio 3. x = 10^(-15); ((1+x)-1)/xans = 1.1102

    Observamos que el resultado se desva en un 11 por ciento del valor esperado.El problema es que estamos dividiendo por un numero muy proximo a cero.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 1. INTRODUCCION A MATLAB/OCTAVE 27

    Ejercicio 4. a = 10^308; b = 1.1*10^308; c = -1.001*10^308; a + (b + c) == (a + b) + cFalso? Deberia ser cierto. Veamos que ha ocurrido: a + (b + c)ans = 1.0990e+308

    (a + b) + cans = Inf

    Al sumar a y b hemos sobrepasado el innito de MATLAB.

    Ejercicio 5. z = 3+i; mod z = sqrt(z*conj(z))mod z = 3.1623

    abs(z)ans = 3.1623

    abs(z) == mod zans = 1

    Ejercicio 6. help floorfloor(x) el mayor numero entero menor o igual que x help ceilceil(x) el menor numero entero mayor o igual que x help roundround(x) es el numero entero mas proximo a x help fixfix(x) numero (entero) que esta a la izquierda de la coma en la expresiondecimal de x

    Ejercicio 7. help coscos(x) calcula el coseno de x en radianes help cosdcosd(x) calcula el coseno de x en grados

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    28 Aprende MATLAB/OCTAVE en 25 horas

    cosd(43)ans = 0.73135

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 29

    Captulo 2

    Matrices y vectores

    Como ya mencionamos en el captulo anterior, MATLAB u Octave sonfundamentalmente programas para el calculo matricial. En realidad, todoslos datos son matrices, siendo los vectores y escalares casos particulares. Co-menzaremos esta segunda sesion aprendiendo a introducir matrices y vectoresdesde el teclado, para continuar, mas adelante, con otras formas mas potentesde denir matrices. Asmismo, experimentaremos con algunas de la funcio-nes incorporadas en MATLAB, que lo convierten en una potente calculadoramatricial.

    2.1. Denicion desde el teclado

    Para denir una matriz no hace falta declararla o establecer de antemanosu tamano. De hecho, se puede denir un tamano y cambiarlo posteriormente.Las matrices se denen o introducen por las1; los elementos de una la seseparan por espacios en blanco o por comas. Para cambiar de la se puedeescribir punto y coma o .

    1Sin embargo, se almacenan por columnas. Este dato sera de utilidad mas adelante, paracomprender como actuan ciertas funciones.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    30 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 1. Introduce el siguiente comando, que dene una matriz4x3:

    A=[1,2,3;4,5,6;7,8,9;10,11,12]

    O bien

    A = [ 1 2 34 5 6

    7 8 9 ]

    Una sencilla operacion con matrices es calcular su traspuesta. Para ello,basta con escribir su nombre seguido del apostrofo ().

    Ejemplo 2.

    A

    Como el resultado de la operacion no ha sido asignado a ninguna variable,MATLAB utiliza, por defecto, la variable ans, que puede ser usada poste-riormente. Sin embargo, una opcion mas adecuada generalmente hubiera sidoasignarle un nombre:

    Ejemplo 3.

    B=A

    MATLAB determina el numero de las y de columnas en funcion del nume-ro de elementos que se proporcionan (o utilizan).

    Ejemplo 4.

    C(4,2)=-1

    En el ejemplo, hemos denido una matriz de orden 4 2 con todos loselementos nulos excepto el segundo elemento de la cuarta la, cuyo valor es-1.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 31

    De forma analoga a las matrices, es posible denir un vector la x (conlos numeros separados por comas o espacios en blanco) o un vector columna y(con los numeros separados por puntos y coma). Para pasar de un vector laa uno columna, basta con usar la funcion traspuesta.

    Ejemplo 5.

    x=[1 2 3]

    x

    y=[1;4;7]

    y

    2.2. Otras formas de denir matrices y vectores

    Introducir matrices a traves del teclado solo es practico en algunas situa-ciones, por ejemplo cuando su tamano es pequeno o no es necesario repetirlomuchas veces.

    MATLAB dispone de varias funciones orientadas a denir matrices y vec-tores de tipos particulares2, algunas de las cuales son las siguientes:

    eye matriz unidadzeros matriz de cerosones matriz de unosrand matriz de numeros aleatorios entre 0 y 1diag matriz diagonal o diagonal de una matrizlinspace vector de particion de un intervalo: vector de sucesion aritmetica

    2Para obtener una lista de todas las matrices elementales escribir help elmat. Este co-mando no funciona en Octave.Para obtener informacion detallada sobre una de dichas funciones en concreto, tanto enMATLAB como en Octave, escribir help seguido del nombre de la funcion.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    32 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 1. Construir algunas matrices, utilizando funciones:

    A=eye(5)

    B=ones(3)

    D=rand(3,6)

    E=zeros(3,4)

    F=diag([-1,0,1])

    Para construir vectores, podemos tener en cuenta que se trata de un casoparticular de matrices, o bien utilizar alguna de las funciones especcas paraello.

    El operador : es muy importante en MATLAB, y puede usarse de variasformas, que iremos practicando a lo largo de la sesion. Para empezar, nospermite generar vectores cuyos elementos son los valores contenidos entre dosvalores, inferior y superior, a incrementos regulares, que por defecto seran launidad.

    Ejemplo 2.

    x=1:100 % incremento por defecto

    x1=1:2:100 % incremento de dos unidades

    x2=2:2:100

    Puede utilizarse con valores enteros y reales, positivos o negativos.

    Ejemplo 3.

    y=100:-10:1

    z=0:pi/4:2*pi

    Una opcion alternativa para generar vectores con valores igualmente espa-ciados es utilizar la funcion linspace.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 33

    Ejemplo 4. Veamos como generar los vectores de los ejemplos ante-riores, utilizando linspace:

    x=linspace(1,100) % por defecto 99 particiones

    x1=linspace(1,99,50) % 50 particiones

    x2=linspace(2,100,50)

    y=linspace(100,10,10)

    z=linspace(10,2*pi,9)

    Ejemplo 5. Compara los vectores resultantes de las siguientes ins-trucciones:

    x=1:3:10

    y=linspace(1,10,4)

    y de estas otras x=1:4:10

    y=linspace(1,10,3)

    Finalmente, MATLAB tambien ofrece la posibilidad de denir una matriza partir de otra u otras, denidas previamente, recibiendo alguna de sus pro-piedades (por ejemplo el tamano, su diagonal, ...), por composicion de variassubmatrices o modicando de alguna forma otra matriz.

    Ejemplo 6.

    A=rand(4)

    B=diag(diag(A))

    C=[A B]

    D=[A;B]

    E=[A,eye(4);zeros(4),B]

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    34 Aprende MATLAB/OCTAVE en 25 horas

    Una caracterstica peculiar de algunas funciones en MATLAB es que de-pendiendo del tipo de argumentos que reciban, as seran los valores de retorno,determinandose en tiempo de ejecucion. Un ejemplo claro es la funcion diag,que hemos utilizado en el ejemplo anterior para construir la matriz B. Al apli-carla sobre una matriz, devuelve un vector con su diagonal principal, mientrasque al aplicarla sobre un vector, nos devuelve la matriz diagonal. Por defecto,dicha diagonal sera la principal, aunque admite un segundo argumento parareferirse a las diagonales secundarias.

    2.3. Acceso a los elementos de una matriz

    En MATLAB se accede a los elementos de un vector o matriz escribiendo elndice o los ndices correspondientes entre parentesis. Como ya mencionamos,las matrices se almacenan por columnas, aunque se introduzcan por las, porlo que se puede acceder a cualquiera de sus elementos con un unico ndice.

    Ejemplo 1.

    A=rand(5)

    A(3,2)

    A(7)

    A(8)

    x=[-2,-1,0,1,2]

    x(3)

    Observar que se ha obtenido el mismo valor escribiendo A(3,2) que A(8).

    Tambien es posible acceder a un bloque de componentes de una matriz ovector, indicando los ndices mnimo y maximo o indicando un subconjuntode ndices, En este contexto, el smbolo : indica todo el rango.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 35

    Ejemplo 2.

    x(2:4)

    A(1:3,[1,3,5])

    A(:,1) % Primera columna de la matriz A

    A(3,:) % Tercera fila de la matriz A

    Acceder a elementos de un vector o matriz de esta forma tiene abundantesaplicaciones, por ejemplo la de modicar selectivamente esos elementos.

    Ejemplo 3.

    A=rand(6)

    A(:,2)=1 % Transforma en 1 los elementos de lasegunda columna

    A(1:2:6,:)=0 % Transforma en 0 los elementos de lasfilas impares

    Como ya hemos mencionado, podemos redimensionar las matrices en cual-quier momento, anadiendo o eliminando componentes. Para esa ultima accionutilizaremos la matriz vaca (representada en MATLAB por [ ]).

    Ejemplo 4.

    B=[] % Define una matriz vaca llamada B

    A(:,7)=7 % A~nade una columna de sietes

    A(2:2:6,:)=[] % Elimina las filas pares

    2.4. Operaciones con vectores y matrices

    MATLAB puede operar con matrices por medio de operadores y de fun-ciones.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    36 Aprende MATLAB/OCTAVE en 25 horas

    Los operadores aritmeticos son: + (adicion o suma), - (sustraccion oresta), * (multiplicacion), ^ (potenciacion).

    Todos estos operadores son coherentes con las correspondientes operacionesmatriciales.

    Ejemplo 1.

    A=[1 2;3 4]

    A^2

    A*A

    A/2

    Los cuatro ultimos operadores, precedidos de un punto (.), representan lamisma operacion pero llevada a cabo elemento a elemento.

    Ejemplo 2. Comparar con los resultados anteriores: A.^2

    A.*A

    Como ya vimos en la practica anterior, tambien se aplican a variables ovalores escalares, y, por supuesto, de modo mixto operando un escalar con unamatriz o vector.

    Ejemplo 3. A=[0 -2 3 5;7 2 -3 4;1 5 -6 -7]

    A+2

    A*2

    Si se usan de modo incorrecto (por ejemplo, intentando operar matricescon dimensiones incompatibles) se obtiene un mensaje de error.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 37

    Ejemplo 4. B=[-1,0,1,2;3,2,1,0;2,4,6,8]

    x=[0;1;-1;0]

    B*x

    x*B

    Al igual que con los numeros, los operadores relacionales son: < (me-nor), (mayor), >= (mayor o igual), == (igual), ~= (distin-to) y los operadores logicos son: & o and (conjuncion), | o or (disyuncion),~ (negacion logica), xor (disyuncion exclusiva). Cuando se aplican a dos vecto-res o matrices del mismo tamano, la operacion se realiza elemento a elementoy el resultado es otra matriz, del mismo tamano, de ceros y unos, que recogeel resultado de cada operacion.

    Ejemplo 5. A=[1,2;3,4]

    B=[-1,2;3,-4]

    C=(A==B)

    D=(A~=B)

    C+D % Debe ser una matriz de unos

    Los operadores logicos se combinan con los relacionales para poder com-probar el cumplimiento de condiciones multiples.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    38 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 6. Analiza el resultado obtenido al ejecutar las siguientesinstrucciones. (Tengase en cuenta que los operadores logicos breves &&y || no funcionan con matrices)

    A=rand(4);A(:,5)=1;A(:,6)=1/2;A(:,7)=0

    (A>1/4)&&(A1/4)&(A

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 39

    Ejemplo 7. A=magic(5) % Matriz definida en MATLAB

    sum(A)

    x=[-5,3,0,2,1,-2]

    sum(x)

    mean(x)

    mean(x)

    exp(x)

    Cuando una funcion tiene en su denicion mas de un argumento de salida,puede ser utilizada de varias formas. Las funciones max y min nos proporcionanun ejemplo. Si utilizamos la funcion en la forma max(x) MATLAB devuelveel maximo valor de las componentes del vector, pero si utilizamos la forma[m,i]=max(x), el valor maximo quedara almacenado en la variable m y laposicion que ocupa en la variable i.

    Ejemplo 8. max(x)

    [m,i]=max(x)

    Algunas funciones especcas para el manejo de matrices son:

    size da el numero de las y columnasinv calcula la inversa de una matrizrank rangodiag obtiene una diagonaldet calcula el determinante de la matriz

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    40 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 9. D=eye(5)

    B=diag([1,2,3,4],1)

    C=diag([5,6,7,8],-1)

    A=D+B+C

    IA=inv(A)

    A*IA

    det(A)

    rank(A)

    size(A)

    2.5. Calculos con polinomios

    Para MATLAB, un polinomio se puede denir mediante un vector con suscoecientes, permitiendo ademas realizar diversas operaciones sobre el, comopor ejemplo:

    roots Calcula las races del polinomio que recibe como argumento.En general, calcula aproximaciones.

    poly Si recibe como argumento un vector columna, devuelve unpolinomio que tiene dichas races. Si el argumento es unamatriz cuadrada, la salida sera el polinomio caracterstico.

    polyval Evalua el polinomio para un determinado valor.conv Calcula el producto de dos polinomios.deconv Calcula la division de dos polinomios. Devuelve tanto el co-

    ciente como el resto.polyder Devuelve la derivada del polinomio.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 41

    Ejemplo 1. Por ejemplo, el polinomio

    3x4 8x2 + 6x 1

    se puede representar por el vector p p=[3,0,-8,6,-1]

    r=roots(p)

    polyval(p,[0,r(1),r(2),5])

    poly(r)

    3*poly(r) % Volvemos al polinomio original

    Tomemos ahora como ejemplo los polinomios: p(x) = 4x3 x y q(x) =x2 + 6 y operemos con ellos. Para sumar y restar polinomios, hay que buscaruna estrategia para que los dos vectores que los representan tengan el mismotamano, puesto que en otro caso obtenemos un mensaje de error.

    Ejemplo 2.

    p=[4,0,-1,0]

    q=[1,0,6]

    q1=[0,1,0,6]

    p+q

    p+q1

    conv(p,q) % Multiplicacion de polinomios

    [c,r]=deconv(p,q) % Cociente de polinomios

    polyder (p)

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    42 Aprende MATLAB/OCTAVE en 25 horas

    2.6. Resolucion de sistemas de ecuaciones lineales

    MATLAB utiliza el operador division a izquierda (\) (division-derecha)para calcular una solucion particular de cualquier sistema de ecuaciones linea-les, incluso si el sistema es incompatible! En este caso, calculara una solucionaproximada; concretamente, el vector de norma mnima que este a menor dis-tancia del espacio de soluciones del sistema.

    Un sistema de ecuaciones lineales, con m ecuaciones y n incognitas,

    a11x1 + a12x2 + + a1nxn = b1a21x1 + a22x2 + + a2nxn = b2...

    ......

    ......

    am1x1 + am2x2 + + amnxn = bm

    se puede escribir en forma matricial

    Ax = b

    donde x y b son vectores columna y A una matriz. Una formulacion tan sencilla,puede esconder complicaciones. Aparentemente, la solucion es:

    x = A1b

    que en MATLAB sera x=inv(A)*b. Sin embargo no siempre es posible calcularla inversa de la matriz A.

    Una opcion alternativa es utilizar la division izquierda (x=A\b) que calculauna solucion del sistema, aunque la matriz no tenga inversa, o incluso no seacuadrada, tras realizar un analisis previo de la matriz A para decidir cual es elmetodo mas adecuado.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 43

    Ejemplo 1. Resolver el siguiente sistema de ecuaciones:

    4x+ 3y + 2z = 52x 7y + 2z = 73x+ 2y + 8z = 3

    A=[4 3 2; 2 -7 2; 3 2 8]

    b=[5; -7; -3]

    sol1=inv(A)*b

    sol2=A\b

    Para comprobar que efectivamente se trata de la solucion, podemoscalcular:

    A*sol1-b

    A*sol2-b

    Por otra parte, en el caso de un sistema de ecuaciones incompatible, lasolucion particular es el punto mas cercano, de norma mnima, aunque nocumpla exactamente ninguna de las ecuaciones.

    Ejemplo 2. Analizar que ocurre al resolver el sistema de ecuaciones:

    x+ 2y = 2x = 0y = 0

    A=[1 2; 1 0; 0 1]

    b=[2; 0; 0]

    sol=A\b

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    44 Aprende MATLAB/OCTAVE en 25 horas

    Como el sistema es incompatible la solucion obtenida es una solucionaproximada. Para ver el error cometido:

    norm(A*sol-b)

    En otras ocasiones, MATLAB nos avisa que la solucion puede ser incorrec-ta.

    Ejemplo 3.

    A=[1 2 3;4 5 6;7 8 9], b=[1;0;0]

    A\b

    Una vez sabemos como calcular una solucion particular de un sistema deecuaciones lineales podemos hallar todas las soluciones del sistema usando lafuncion null. La funcion null devuelve una base del espacio de solucionesdel sistema homogeneo. As, teniendo en cuenta que todas las soluciones delsistema son la suma de una solucion particular mas una solucion del sistemahomogeneo, podremos resolver cualquier sistema de ecuaciones lineales (deforma aproximada en el caso de los sistema incompatibles).

    Ejemplo 4. Calculemos todas las soluciones del sistema:

    x+ 2y + 3z = 6x+ y + z = 1

    A = [1, 2, 3; 1, 1, 1], b=[6;1]

    x=A\b

    H=null(A)

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 45

    Las soluciones de nuestro sistema son aquellas de la forma x + H, porejemplo:

    y = x + rand()*H

    Comprobemoslo, por ejemplo, escribiendo:

    A*y - b

    Hay que tener en cuenta que todo este trabajo previo del operador \ paradevolver una solucion en distintas situaciones conlleva un coste de tiempo decomputacion.

    2.7. Gestion de cheros de hojas de calculo

    Como se comento en el primer captulo, vamos a mostrar el uso de unaserie de funciones de MATLAB para importar/exportar datos de/a cherosde hojas de calculo. Las primeras csvread, csvwrite, dlmread y dlmwrite,funcionan tanto en MATLAB como Octave, mientras que las dos ultimas,xlsread y xlswrite, solo funcionan en MATLAB.

    Ejemplo 1. Vamos a leer los datos del chero fichero.csv que pue-des descargar en http://www.editorialtebar.com.

    csvread(fichero.csv)

    Si quieres puedes ver su contenido abriendo el chero con un editor detexto cualquiera.

    Como es natural, podemos asignar el contenido de una hoja de calculo auna variable.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    46 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 2.

    A = csvread(fichero.csv)

    La variable A es una matriz, y como tal admite las funciones usualesde las matrices. Por ejemplo podemos preguntarnos su tamano:

    size(A)

    Es posible que no queramos importar todos los datos de un chero .csv.Por ejemplo, ocurre a menudo que las primeras las o columnas correspondena los encabezados de una tabla. En casos como este, podemos jar a partir deque la y columna exportaremos los datos.

    Ejemplo 3. Supongamos que solo queremos importar las entradasde nuestro chero fichero.csv que se encuentran por debajo de laprimera la y a la derecha de la segunda columna, en este caso escri-biremos:

    csvread(fichero.csv,1,2)

    O si, por ejemplo, queremos excluir los datos de las dos primeras co-lumnas, escribiremos:

    csvread(fichero.csv,0,2)

    Tambien podemos delimitar hasta que la y columna se exportaran losdatos de un chero .csv.

    Ejemplo 4. Para importar las entradas de nuestro cherofichero.csv que se encuentran entre la segunda y la cuarta la (am-bas inclusive) y la primera y la tercera columnas (ambas inclusive),escribiremos:

    csvread(fichero.csv,1,0,[1,0,3,2])

    En Octave: csvread(fichero.csv,[1,0,3,2])

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 47

    La funcion csvwrite no entrana gran complicacion, con ella podemos ex-portar los datos de una matriz de MATLAB a un chero .csv.

    Ejemplo 5. Comencemos generando una matriz aleatoria con treslas y cuatro columnas que llamaremos A.

    A = rand(3,4)

    Guardemos ahora los datos de A en un chero .csv

    csvwrite(datosA.csv,A)

    Quiza la unica observacion a tener en cuenta es que podemos exportarnuestros datos dejando las o columnas vacas arriba o a la izquierda, respec-tivamente; de tal modo que luego podamos editar el chero .csv creado paraanadir nombres a las las o columnas.

    Ejemplo 6. Si, por ejemplo, quisieramos guardar el contenido de lavariable A reservando espacio para anadir una la y una columna pos-teriormente, bastara escribir

    csvwrite(datosA.csv,A,1,1)

    Recuerda que si lo deseas, puedes ver el contenido de los cheros creadosabriendolos con cualquier editor de texto o importandolos a un gestor de hojasde calculo.

    La funciones csvread y csvwrite son casos especiales de la funcionesdlmread y dlmwrite, respectivamente. Estas ultimas permiten especicar eltipo de delimitador del chero de datos (puntos y comas, espacios, ... y porsupuesto comas) a diferencia de las primeras donde el delimitador es siempreuna coma.

    Veamos un ejemplo:

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    48 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 7. Denamos una matriz aleatoria con cinco las y trescolumnas

    B = rand(5,3)

    Guardemos ahora los datos de B en un chero .txt separando lascolumnas por puntos y comas (tambien puedes utilizar tu smbolofavorito).

    dlmwrite(datosB.txt,B,;)

    Puedes ver el contenido del chero creado abriendolo con cualquiereditor de textos y recuperar su contenido en MATLAB con la funciondlmread especicando el delimitador usado; en nuestro caso ;.

    A=dlmread(datosB.txt,;)

    Si quieres puedes repetir el ejemplo anterior cambiando de delimitador.

    Como ya se apunto anteriormente, las funciones xlsread y xlswrite so-lamente estan implementadas en MATLAB (no en Octave). Su uso no es muydiferente del de las funciones csvread y csvwrite, aunque xlsread permiteademas importar el texto contenido en una hoja de calculo, por ejemplo losnombres de las las y columnas. Mostremos algunos ejemplos:

    Ejemplo 8. Descarga el chero excel.xls de http://www.editorialtebar.com y colocalo donde MATLAB pueda leerlo. Unavez descargado puedes abrir el chero .xls para ver su contenidousando Excel u otro programa de gestion de hojas de calculo. A con-tinuacion escribe:

    xlsread(excel)

    El contenido numerico del chero .xls se mostrara en la ventana deMATLAB.

    Generalmente no nos interesara ver el contenido del chero. Recuerda quepuedes inhibir la salida en pantalla escribiendo punto y coma ; al nal de lafrase.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 49

    Al igual que ocurra con csvread y dlmread, podemos asignar a una va-riable el contenido numerico de una hoja de calculo de Excel.

    Ejemplo 9. En nuestro ejemplo, para guardar los datos numericos denuestra hoja de calculo en una variable de MATLAB que llamaremosdatos, basta escribir:

    datos = xlsread(excel);

    Tambien podemos importar el texto de una hoja de calculo de Excel.

    Ejemplo 10. Si queremos importar el contenido numerico y el textode nuestra hoja de calculo excel.xls y guardarlo en sendas variablesllamadas datos y texto, respectivamente, escribiremos:

    [datos, texto] = xlsread(excel);

    La primera variable contiene los datos numericos y la segunda el textocontenido en nuestra hoja de calculo.

    texto

    Al igual que ocurra con la funcion csvread podemos importar determi-nadas las o columnas de una hoja de calculo de Excel utilizando la funcionxlsread. Dado que el uso es totalmente analogo al de csvread no pondremosningun ejemplo ilustrativo. De igual modo, como el comando xlswrite funcio-na exactamente igual que csvwrite, tampoco propondremos ningun ejemplopara mostrar su uso. La unica diferencia es la salida, la funcion csvwrite ge-nera un chero de datos separados por comas y la funcion xlswrite una hojade calculo de Excel. En todo caso, animamos al lector interesado a inventarsey jugar con sus propios ejemplos.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    50 Aprende MATLAB/OCTAVE en 25 horas

    2.8. Ejercicios

    Antes de comenzar escribe lo siguiente4

    clear all diary capitulo2.txt

    Ejercicio 1. Obten las siguientes matrices sin escribirlas explcitamente yutilizando en menor numero de comandos posible:

    (i)

    1 0 0 0 00 1 0 0 00 0 1 0 0

    (ii)

    0 0 0 01 0 0 00 2 0 00 0 3 0

    (iii)

    0 1 0 00 0 1 00 0 0 10 1 2 3

    Ejercicio 2. Escribe un comando MATLAB que genere una matriz 5 4 convalores aleatorios enteros entre 5 y 5.

    Ejercicio 3. Calcula el rango, el determinante y la inversa de cada una de lassiguientes matrices:

    A =

    1 2 11 2 12 4 2

    B =

    1 2 11 4 12 4 2

    C =

    1 2 11 4 12 4 5

    Ejercicio 4. Construir una matriz 9 3 cuya primera columna sean valoresentre 0 y 2, igualmente espaciados, y las columnas segunda y tercera, el senoy el coseno de dichos valores.

    Ejercicio 5. Crear una matriz cuadrada 100 100 de valores aleatorios y de-terminar cuantos de ellos son mayores que 1/2. Puesto que rand genera nume-ros aleatorios distribuidos uniformemente en el intervalo (0,1), este numerosera aproximadamente 100 100/2

    4Si no deseas hacer un diario de la sesion, no hace falta que lo escribas. En otro caso,el chero que se genere se guaradara en el directorio en el que te encuentres; recuerda quepuedes saber cual es escribiendo pwd .

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 51

    Ejercicio 6. Realiza las operaciones propuestas sobre los siguientes polino-mios:

    p(x) = 3x3 + 2x2 x+ 1

    q(x) = 7x3 + 3x2 + 2x 15

    t(x) = 3x2 + 2x 15

    1. p(x) + q(x) + t(x)

    2. q(x) t(x)

    3.p(x)q(x)

    4. Calcular las races de p(x) y evaluar cuanto vale el polinomio en ellas.

    Ejercicio 7. Obten la solucion del sistema de ecuaciones y comprueba que escorrecta.

    3x+ 2y z = 15x+ y + 3z = 23y 4z = 3

    Ejercicio 8. Calcula el maximo autovalor y el autovector asociado (para ello,utilizar el comando eig) a la matriz de coecientes del sistema anterior.

    Ejercicio 9. Descarga el chero comprimido hipotecas.zip de http://www.editorialtebar.com y descomprmelo donde MATLAB pueda encontrarlo.Veras que hay seis cheros, tres estan en formato .csv y otros tres en formato.xls. Los cheros contienen los datos del numero e importe total (en miles deeuros) de hipotecas suscritas mensualmente entre enero de 2003 y diciembrede 2008 en Badajoz (BA), Caceres (CA) y Espana (ES).

    Se pide:

    1. Guarda en sendas variables de MATLAB los datos las hipotecas en Ba-dajoz, Caceres y Espana.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    52 Aprende MATLAB/OCTAVE en 25 horas

    2. Calcula el precio medio mensual de una hipoteca en Badajoz, Caceresy Espana dividiendo los datos de la segunda columna (importe totalen miles de euros) por los de la primera (numero total de hipotecassuscritas).

    3. En cada caso, guarda el resultado en un vector columna y anadelo comoultima columna a la variable correspondiente.

    4. Exporta el contenido de las variables modicas en sendas hojas de calculocon los nombres hipoBA, hipoCA y hipoES.

    Recuerda que si usas Octave debes elegir los cheros .csv y anadir la extensionque corresponda, en otro caso, elige el formato que preeras para hacer elejercicio.

    diary off

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 53

    2.9. Soluciones

    Ejercicio 1. eye(3,5)ans =1 0 0 0 00 1 0 0 00 0 1 0 0 diag([1,2,3],-1)ans =0 0 0 01 0 0 00 2 0 00 0 3 0 [zeros(4,1),[eye(3);1:3]]ans =0 1 0 00 0 1 00 0 0 10 1 2 3

    Ejercicio 2. round(10*rand(5,4)-5)

    Ejercicio 3. A = [1 2 1; -1 -2 -1; 2 4 2]A =

    1 2 11 2 12 4 2

    rank(A), det(A), inv(A)ans =

    1ans =

    0Warning: Matrix is singular to working precision.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    54 Aprende MATLAB/OCTAVE en 25 horas

    ans =Inf Inf InfInf Inf InfInf Inf Inf B = [1, 2, 1; -1, 4, -1; 2, 4, 2]B =

    1 2 11 4 12 4 2

    rank(B), det(B), inv(B)ans =

    2ans =

    0Warning: Matrix is singular to working precision.ans =Inf Inf InfInf Inf InfInf Inf Inf C = [1, 2, 1; -1, 4, -1; 2, 4, 5]C =

    1 2 11 4 12 4 5

    rank(C), det(C), inv(C)ans =

    3ans =

    18ans =

    1,3333 0,3333 0,33330,1667 0,1667 0

    0,6667 0 0,3333

    Ejercicio 4. x = linspace(0,2*pi,9); D = [x, sin(x), cos(x)]

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 55

    D =0 0 1,0000

    0,7854 0,7071 0,70711,5708 1,0000 0,00002,3562 0,7071 0,70713,1416 0,0000 1,00003,9270 0,7071 0,70714,7124 1,0000 0,00005,4978 0,7071 0,70716,2832 0,0000 1,0000

    Ejercicio 5. M = rand(100); N = M >= 1/2; sum(sum(N))ans =

    5105

    Ejercicio 6. p = [3, 2, -1, 1]; q = [-7,3, 2, -15]; t = [3, 2, -15]; tt = [0, 3, 2, -15]tt =

    0 3 2 15 p+q+ttans =

    4 8 3 29 conv(q,t)ans =

    21 5 117 86 60 225 [c,r] = deconv(p,q)c =

    -0.4286r =

    0 3,2857 0,1429 5,4286 R = roots(p)R =

    -1.1852

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    56 Aprende MATLAB/OCTAVE en 25 horas

    0.2593+0.4626i

    0.2593-0.4626i

    polyval(p,R)ans =

    1.0e-014*

    0.8882

    0.0222+0.0888i

    0.0222-0.0888i

    Ejercicio 7. A = [3, 2, -1; 5, 1, 3; 0, 3, -4]; b = [1,-2,3]; u = A\bu =

    0,14290,14290,8571 A*uans =

    1,00002,00003,0000

    A*u - bans =

    1.0e-015 *0,222000

    Ejercicio 8. help eig [V,D] = eig(A)V =0,5515 0,3940 0,21010,7949 0,7616 0,51600,2530 0,5146 0,8304D =

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 2. MATRICES Y VECTORES 57

    5,4239 0 00 0,4402 00 0 5,8641

    [m,i] = max(sum(D))m =

    5.4239 i =1 v = V(:,i)v =0,55150,79490,2530

    Ejercicio 9. BA = csvread(hipotecas BA 2003-2008.csv);(ocultamos la salida) CA = csvread(hipotecas CA 2003-2008.csv); ES = dlmread(hipotecas ES 2003-2008.csv,;);(separado por punto y coma) BA(:,3) = BA(:,2)./BA(:,1); CA(:,3) = CA(:,2)./CA(:,1); ES(:,3) = ES(:,2)./ES(:,1); csvwrite(hipoBA.csv,BA) csvwrite(hipoCA.csv,CA) csvwrite(hipoES.csv,ES)

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 59

    Captulo 3

    Gracos

    Antes de comenzar con este captulo , es importante saber que al ejecu-tar cualquier comando de tipo graco, se obtiene una nueva ventana llamadaFigure 1 donde se dibuja el objeto o se realiza el cambio requerido. As, des-pues de ejecutar la primera orden graca, organiza el escritorio de forma quepuedas ver a la vez, tanto la ventana de comandos de MATLAB/Octave comola ventana Figure 1.

    MATLAB tiene mas y mejores opciones para las cuestiones gracas queOctave y esto se observa claramente en las diferencias existentes entre la ven-tana Figure 1 de MATLAB y la de Octave. Por ello, aunque se indicaranexplicitamente las diferencias existentes entre MATLAB y Octave1, sugerimosque esta sesion se realice con MATLAB.

    3.1. Creacion y manipulacion basica de gracos

    La forma mas sencilla de dibujar una funcion de una variable es medianteel uso de ezplot que tan solo necesita la expresion de la propia funcion quese desea dibujar.

    1MATLAB indicara que la orden debe ejecutarse solamente en MATLAB y Octaveindicara que la orden debe ejecutarse solamente en Octave.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    60 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 1. Dibujemos la graca de la funcion f(x) = x2 + x+ 1:

    ezplot(x^2+x+1)

    Si el intervalo de denicion por defecto no parece el mas adecuado,podemos cambiarlo:

    ezplot(x^2+x+1,[-2,2])

    Tambien podemos utilizar una funcion anonima como argumento

    f= @(x) x^2+x+1;

    ezplot(f,[-2,2]) % Dara error

    Ahora, prueba escribiendo

    f= @(x) x.^2+x+1;

    ezplot(f,[-2,2])

    Sabes por que dio error? Si no es as, no te preocupes pues lo enten-deras en la siguiente seccion.

    Dibujar una funcion de dos variables se puede realizar facilmente utilizandola funcion ezmesh.

    Ejemplo 2. Dibujemos la graca de la funcionf(x, y) = x exp(x2 y2):

    ezmesh(x*exp(-x^2-y^2))

    Podemos cambiar el intervalo de denicion por defecto por un dominiodel tipo [2, 2] [2, 2] escribiendo

    ezmesh(x*exp(-x^2-y^2),[-2,2])

    o del tipo [2, 2] [5, 7] escribiendo

    ezmesh(x*exp(-x^2-y^2),[-2,2,-5,7])

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 61

    Finalmente, el argumento puede ser una funcion anonima

    f= @(x,y) x.*exp(-x.^2-y.^2);

    ezmesh(f,[-2,2,-5,7])

    Ahora, NO cierres la ventana Figure 1 y continua leyendo. Es mas,no cierres dicha ventana hasta que se indique explcitamente.

    Las funciones ezplot y ezmesh no son las unicas existentes en MATLAB/Octave para dibujar gracas de funciones dadas mediante sus expresionesanalticas como las que acabamos de dibujar. De hecho, existen muchas otrasque incluso nos permitiran dibujar listas de datos dados como pares/ternas depuntos. Analizaremos algunas de las funciones mas importantes de represen-tacion graca en la siguiente seccion.

    Cuando realizamos una representacion graca con MATLAB/Octave lo quenecesitamos es obtener una optima visualizacion de la misma en la ventanaFigure 1. Los comandos que introduciremos en lo que resta de seccion nosayudaran a conseguirla independientemente de la funcion utilizada paracrear la graca.

    El comando axis es de gran utilidad para seleccionar el dominio y la escalade representacion adecuados. Ademas, complementado con la funcion gridpodemos elegir como mostrar el objeto representado. Para la representacionde gracas en tres dimensiones tambien contamos con la ayuda del comandoview.

    Ejemplo 3. Uso de la funcion axis.

    Guardamos el intervalo de denicion de la graca activa

    v=axis

    La funcion axis puede utilizarse tanto para modicar el dominio dedenicion de la funcion como para determinar los factores de escala delos ejes.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    62 Aprende MATLAB/OCTAVE en 25 horas

    Establecemos el intervalo de denicion deseado para los ejes x, y, z

    axis([-2,6,-20,10,-1,1])

    Imponemos los lmites establecidos por defecto de MATLAB/Octave

    axis auto

    Recuperamos los lmites originales

    axis(v)

    Establecemos los mismos factores de escala en todos los ejes enMATLAB y en los ejes OX y OY en Octave

    axis equal

    Restablecemos los factores de escala anteriores

    axis normal

    Finalmente, podemos eliminar o no los ejes del dibujo

    axis off

    axis on

    La funcion grid controla la rejilla que genera cada uno de los ejes y la ordenview nos permite especicar el punto de observacion del objeto representadoen los gracos en tres dimensiones.

    Ejemplo 4. grid off % Elimina la malla.

    grid on % Dibuja una malla en la grafica.

    grid minor % Dibuja una malla mas tupida.

    grid off % Elimina la malla.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 63

    A continuacion, indicamos que el punto de observacion del objeto seade 28 grados de rotacion horizontal (i.e. en el plano OXY ) con respectoal eje OY y de 90 grados de elevacion vertical con respecto del planoOXY .

    view(28,90)

    Los puntos de observacion por defecto en un espacio de dos y tresdimensiones son respectivamente

    view(2) % equivale a view(0,90)

    view(3) % equivale a view(-37.5,30)

    Para conseguir una interpretacion mas clara del objeto representado sepuede anadir un ttulo y nombres a los ejes. Para ello, utilizaremos las funcionestitle, xlabel, ylabel y zlabel.

    Ejemplo 5. title (Realizado con la funcion ezmesh)

    xlabel(Eje de Abcisas)

    ylabel(Eje de Ordenadas)

    zlabel(Eje 3D)

    Ademas de los comandos descritos antes para etiquetar gracas, existela posibilidad de escribir una anotacion en cualquier otro lugar de la guramediante el uso de la funcion text. Para ello, debemos escribir

    text(X,Y,Z,{primera lnea,segunda lnea})

    donde X, Y, Z denotan las coordenadas del punto (X,Y, Z) de la graca, eneste caso en tres dimensiones, donde se realiza la anotacion.

    MATLAB/Octave por defecto interpreta todos los caracteres empezadoscon una barra invertida \ como palabras clave en TeX. As, podemos intro-ducir en los gracos caracteres especiales o letras griegas.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    64 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 6. text(0.8,0.05,0.435,{

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 65

    habitual debemos asignar un nombre o referencia al propio graco. Despues,con la funcion get obtendremos informacion sobre las posibles opciones demanipulacion y con la funcion set podremos modicarlas a nuestro gusto.

    Ejemplo 8.

    Asignamos un nombre al graco

    p3=ezmesh(x*exp(-x^2-y^2));

    Obtenemos todas las opciones posibles de control sobre el graco

    get(p3)

    Supongamos que queremos cambiar el aspecto y los colores de la su-percie.

    Obtenemos el valor actual de la opcion FaceColor y lo guardamos enFC

    FC=get(p3,FaceColor)

    Obtenemos todos los posibles valores que puede tomar la opcion Fa-ceColor. Esta funcion solo esta disponible en MATLAB.

    MATLAB set(p3,FaceColor)

    Establecemos el intervalo de denicion de los ejes para obtener unamejor visualizacion de las siguientes ordenes

    Octave axis([-4,4,-4,4,-0.5,0.5])

    A continuacion, probamos los distintos valores hasta elegir el deseado.En nuestro caso recuperaremos el original.

    set(p3,FaceColor,none)

    set(p3,FaceColor,flat)

    set(p3,FaceColor,interp)

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    66 Aprende MATLAB/OCTAVE en 25 horas

    set(p3,FaceColor,texturemap)

    set(p3,FaceColor,[0 0.5 1])

    set(p3,FaceColor,[1 2 3])

    Que ha ocurrido?Podras explicarlo?

    set(p3,FaceColor,FC)

    Las funciones get y set son realmente muy utiles pues no solo funcionansobre el graco dibujado sino tambien sobre cualquier accion que realicemossobre este. Tan solo hay que recordar que al mismo tiempo que se ejecutael comando de dibujo para obtener un resultado sobre la ventana Figure 1debemos asignar un nombre a dicha accion. As, por ejemplo, si realizamos unaanotacion sobre el graco y, despues, queremos modicar su posicion, estilode letra, tamano,..... podremos hacerlo.

    Ejemplo 9. t=text(0.8,0.05,0.435,{

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 67

    set(t,FontName,Times)

    set(t,FontName,Arial)

    set(t,FontName,Cambria)

    set(t,FontName,FN)

    Ahora cambia el color y el tamano de la anotacion realizada en elejemplo anterior y, si es necesario, tambien su posicion. Finalmente,vuelve al dibujo original.

    En determinadas ocasiones es necesario dibujar mas de una graca en laventana Figure 1, para ello utilizaremos el comando hold. Ademas, cuan-do se dibuja mas de una graca utilizando los mismos ejes de coordenadas,es necesario poder distingir entre las mismas. Utilizando la funcion legend,podremos dar un nombre a cada una de las gracas dibujadas.

    Ejemplo 10. p1=ezplot(x*exp(-x^2));

    hold on

    p2=ezplot(x*exp(-x^2)+0.5);

    axis auto

    set(p2,Color,[0 1 0])

    title(Uso del comando hold)

    legend(Funcion x*exp(-x^2),Funcion x*exp(-x^2)+1)

    set(p1,Color,[1 0 0])

    hold off

    Sin embargo, a veces nos sera de mas utilidad dibujar gracas en diferentesventanas y poder manipularlas independientemente. Para ello, utilizaremos loscomandos figure, gcf, shg, clf y close.

    El comando figure crea una nueva ventana graca, la activa y la trae al

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    68 Aprende MATLAB/OCTAVE en 25 horas

    frente. Ademas, le asigna un numero n y la denomina Figure n.

    Ejemplo 11. p3=ezmesh(x*exp(-x^2-y^2));

    Octave axis([-4,4,-4,4,-0.5,0.5])

    figure

    p4=ezmesh(x*exp(-x^2-y^2)+3);

    Octave axis([-4,4,-4,4,2.5,3.5]) set(p4,EdgeColor,[0 0.5 1])

    figure(4) %Elegimos el numero de la nueva ventana.

    p5=ezmesh(x*exp(-x^2-y^2)-3);

    Octave axis([-4,4,-4,4,-3.5,-2.5])

    set(p5,FaceColor,[1 0.5 0])

    figure

    p6=ezmesh(x*exp(-x^2-y^2)+6);

    Octave axis([-4,4,-4,4,5.5,6.5])

    set(p6,EdgeColor,[0 1 0.5])

    Cuando tenemos mas de una ventana graca es conveniente saber comomanipularlas. El comando gcf (abreviatura de get current gure) nos de-vuelve el numero de la ventana graca activa en ese momento. La funcion shg(abreviatura de show graph) trae la ventana graca activa al frente de todas(solamente disponible en MATLAB). Utilizando el comando clf (abreviatu-ra de clear gure) podemos borrar el contenido de la ventana graca quenecesitemos sin cerrarla. Finalmente, utilizando close cerramos las ventanasgracas que no necesitamos.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 69

    Ejemplo 12. gcf

    MATLAB shg

    Limpiamos la ventana activa

    clf

    p7=ezmesh(x*exp(-x^2-y^2)-6);

    set(p7,FaceColor,[0.5 0 1])

    Elegimos la ventana a limpiar

    clf(2)

    Activamos la ventana sobre la que queremos trabajar

    figure(2)

    p8=ezplot(x*exp(-x^2));

    set(p8,Color,[1 0.5 0])

    figure

    p9=ezplot(x*exp(-x^2));

    set(p9,LineStyle,-.)

    figure(500)

    p10=ezplot(x*exp(-x^2));

    set(p10,LineWidth,10)

    gcf

    Cerramos la ventana activa

    close

    Cerramos la ventana Figure 4

    close(4)

    MATLAB close(1,3) % Cerramos las ventanas Figure 1 yFigure 3

    close all % Cerramos todas las ventanas graficas

    CAPITULO 3. GRAFICOS 69

    Ejemplo 12. gcf

    MATLAB shg

    Limpiamos la ventana activa

    clf

    p7=ezmesh(x*exp(-x^2-y^2)-6);

    set(p7,FaceColor,[0.5 0 1])

    Elegimos la ventana a limpiar

    clf(2)

    Activamos la ventana sobre la que queremos trabajar

    figure(2)

    p8=ezplot(x*exp(-x^2));

    set(p8,Color,[1 0.5 0])

    figure

    p9=ezplot(x*exp(-x^2));

    set(p9,LineStyle,-.)

    figure(500)

    p10=ezplot(x*exp(-x^2));

    set(p10,LineWidth,10)

    gcf

    Cerramos la ventana activa

    close

    Cerramos la ventana Figure 4

    close(4)

    MATLAB close(1,3) % Cerramos las ventanas Figure 1 yFigure 3

    close all % Cerramos todas las ventanas graficas

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    70 Aprende MATLAB/OCTAVE en 25 horas

    Otra opcion interesante de visualizacion graca que ofrece MATLAB es laposibilidad de dividir una ventana gura en subventanas gracas. Para ello,se utiliza el comando subplot que permite dividir la ventana Figure en unamatriz m n de subventanas gracas. La orden para realizar esto es de laforma

    subplot(m,n,p)

    donde los dos primeros argumentos hacen referencia a las dimensiones de lamatriz y el ultimo argumento p que toma valores desde 1 hasta m*n hace refe-rencia a la subventana que se quiere activar. Debemos contar las subventanasdel modo siguiente: desde la primera la a la ultima y dentro de cada la deizquierda a derecha.

    Ejemplo 13. subplot(3,2,1); p1=ezmesh(x*exp(-x^2-y^2));

    subplot(3,2,2); p2=ezplot(x*exp(-x^2));

    subplot(3,2,3); p3=ezmesh(x*exp(-x^2-y^2)+6);

    set(p3,EdgeColor,[0 0 1])

    subplot(3,2,4); p4=ezplot(x*exp(-x^2));

    set(p4,LineWidth,10)

    subplot(3,2,5); p5=ezmesh(x*exp(-x^2-y^2)-6);

    set(p5,EdgeColor,[1 0 0])

    subplot(3,2,6); p6=ezplot(x*exp(-x^2));

    set(p6,Color,[1 0 0],LineWidth,10)

    close

    Finalmente, veamos como modicar la apariencia tanto de la ventanaFigure como de los ejes de coordenadas. Para ello, debemos ampliar el usode los comandos get y set mediante las variables gcf (abreviatura de getcurrent gure) y gca (abreviatura de get current axis) que, como su nom-

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 71

    bre indica, hacen referencia a la ventana Figure y a los ejes de coordenadasactivos, respectivamente.

    Ejemplo 14. ps=ezplot(sin(x),[pi,5*pi]);

    hold on

    pc=ezplot(cos(x),[pi,5*pi]);

    hold off

    set(pc,Color,[1 0 0])

    legend(sin,cos)

    A continuacion cambiaremos propiedades de los ejes y de la propiaventana. En primer lugar, obtenemos todas las opciones posibles decontrol sobre los ejes.

    get(gca)

    Cambiamos el color de fondo, subdividimos los intervalos del eje x ycambiamos la escala del eje OX de lineal a logartmica.

    set(gca,Color,[1 1 0],XMinorTick,on,XScale,log)

    Obtenemos ahora todas las opciones posibles de control sobre la ven-tana graca

    get(gcf)

    Cambiamos el color de fondo e identicamos la ventana graca con unnombre especco.

    set(gcf,Color,[0.88 1 1],Name,Graficas del ...seno y del coseno)

    Seguramente, una vez dibujada y modicada a nuestro gusto la graca deuna funcion, o de un conjunto de datos, necesitaremos guardarla. Para ello,podemos utilizar el comando print. Su estructura es la siguiente:

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    72 Aprende MATLAB/OCTAVE en 25 horas

    print(n,Extension,Nombre)

    donde n indica el numero de la ventana Figure donde se encuentra el graco aguardar y Extension toma el valor -djpeg o -dpsc dependiendo de si desea-mos guardar la imagen como un archivo jpeg o como un archivo ps. El archivogenerado se guarda en el directorio de trabajo con el nombre especicado enNombre.

    Ejemplo 15. dir

    print(1,-dpsc,SinCos1) % Genera SinCos1.ps

    print(1,-djpeg,SinCos2) % Genera SinCos2.jpeg

    dir % Observa que se han creado dos nuevos archivos.

    close

    Utiliza los comandos introducidos hasta ahora para mostrar la gracade la funcion x2 + x + 1 a tu gusto. Finalmente guardala en formatojpeg.

    3.2. Creacion especializada de gracos

    Con los comandos introducidos a lo largo de la primera seccion podemosrealizar casi cualquier cambio que nos propongamos sobre una o varias repre-sentaciones gracas realizadas en una o varias ventanas Figure. Sin embargo,los comandos ezplot y ezmesh no cubren todas las posibles necesidades dereprensentacion graca. En este segundo apartado, estudiaremos diversos co-mandos de dibujo especializados que cubriran dicha necesidad.

    En MATLAB (pero no en Octave) podemos tener una vision de conjuntode todos los posibles comandos para la creacion y tratamiento de gracos.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 73

    Ejemplo 1.

    Podemos solicitar informacion de tipo general, sobre gracos 2D, sobregracos 3D o informacion especializada

    MATLAB help graphics

    MATLAB help graph2d

    MATLAB help graph3d

    MATLAB help specgraph

    En lo que resta nos centraremos en conocer los comandos basicos de crea-cion de gracos bidimensionales, tridimensionales y estadsticos.

    3.2.1. Gracos 2D

    Gracos elementales

    La forma mas sencilla de crear un graco en MATLAB/Octave es unirmediante lneas unos puntos del plano dados. Para ello, los puntos del planodados se interpretan como una lista de coordenadas (x, y) dadas y se creandos vectores: el vector X, formado por los valores que toma la coordenada x,y el vector Y, formado por los valores que toma la coordenada y. Finalmente,la funcion plot une los puntos (x, y) con segmentos lineales.

    Ejemplo 2. Conexion de los puntos (1, 3), (4, 9) y (6, 4).

    X=[1,4,6]; Y=[3,9,4];

    plot(X,Y)

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    74 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 3. Teclea los siguientes comandos:

    hold on

    px=plot(X); set(px,Color,[1 0 0])

    Que puntos acabamos de conectar?

    py=plot(Y); set(py,Color,[0 1 0])

    Y ahora, que puntos hemos conectado? Como funciona la funcionplot al hacerla actuar sobre un unico vector?

    Ejemplo 4. Propagacion del SIDA.

    meses =[20,21,24,26,29,31,35,37,41,45];

    casos=[110,129,220,257,439,514,878,1029,1756,2057];

    plot(meses,casos)

    xlabel(Meses transcurridos desde enero de 1980)

    ylabel(Numero de casos)

    title(Propagacion del SIDA en EE.UU.)

    Notar que tambien podemos representar las lneas que unen varios puntospara crear polgonos y ademas pintarlos utilizando la funcion fill.

    Ejemplo 5. Conexion cerrada de los puntos (1, 3), (4, 9) y (6, 4).

    X=[1,4,6,1]; Y=[3,9,4,3];

    plot(X,Y)

    Triangulo de vertices (1, 3), (4, 9) y (6, 4) con relleno de color [1 0 1].

    fill(X,Y,[1 0 1])

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 75

    Funciones de la forma y = f(x)

    Como en el caso de gracas elementales, para hacer gracas de funcionesde una variable MATLAB/Octave necesita conocer primero la tabla de valoresde la variable x para despues dibujar la funcion. En particular, conocido elvector X formado por un numero nito de valores de x se crea el vector imagenY utilizando la relacion y = f(x). Despues, MATLAB interpreta los vectoresX e Y como listas de coordenadas (x, y) de puntos sucesivos en el graco arepresentar. Finalmente, une los puntos (x, y) con segmentos lineales. Si elnumero de valores contenido en X es sucientemente grande, en el graco noapreciaremos los puntos de union.

    El comando ezplot crea la tabla de valores de la variable x automati-camente y, por tanto, no tenemos un control total sobre la graca pues nopodemos elegir que o cuantos puntos representar. Para conseguirlo debemosutilizar la funcion plot.

    Ejemplo 6. Dibujamos la graca de y = cos(x).

    Primero, creamos una tabla de valores para x con 200 valores entre 0y 2.

    X=linspace(0,2*pi,200);

    Segundo, calculamos los valores de y.

    Y=cos(X);

    Finalmente, dibujamos

    plot(X,Y)

    Si la tabla de valores para x no tuviera una cantidad suciente devalores obtendramos:

    X=linspace(0,2*pi,10);

    Y=cos(X);

    plot(X,Y)

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    76 Aprende MATLAB/OCTAVE en 25 horas

    Ahora, veamos un ejemplo un poco mas complicado:

    Ejemplo 7. Dibujamos la graca de y = xex2.

    X=-3:.01:3;

    Y=X.*exp(-X.^2);

    Por que hay que poner los puntos antes de las operaciones?

    plot(X,Y)

    Sabras responder ahora a la pregunta formulada en el Ejemplo 1 dela primera seccion?

    Algunas funciones gracas de MATLAB, como la que actualmente estudia-mos plot, nos permiten simplicar el procedimiento de realizacion de cambiossobre el aspecto de la graca. Es decir, a veces podremos evitar el uso dehold y, para ciertas propiedades podremos evitar el uso de las funciones gety set. El uso del comando help nos permitira conocer las propiedades desimplicacion que ofrece cada funcion de dibujo graco.

    Ejemplo 8.

    Observar como la funcion plot ofrece posibilidades, por ejemplo sobreel color o tipo de linea, que no ofrece ezplot.

    help plot

    help ezplot

    As, para cambiar el color o tipo de lnea con ezplot es necesario el usode set mientras que su uso puede ser evitado en el caso de dibujar con lafuncion plot. A continuacion, estudiaremos las posibilidades de simplicacionmas relevantes que ofrece el comando plot con mas detalle.

    Anadiendo un parametro opcional al comando plot podemos controlar elcolor y el estilo de lneas y puntos.

    Las opciones predenidas para los colores son: b (azul), g (verde), r(rojo), c (cian), m (magenta), y (amarillo), k (negro) y w (blanco). Las

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 77

    opciones predenidas de estilo de lnea son: - (lnea continua), : (lnea depuntos), -. (lnea que alterna el guion con el punto) y - - (lnea de guiones).

    Ejemplo 9.

    Dibujamos la graca anterior eligiendo el color magenta y el tipo delnea que alterna el guion con el punto.

    plot(X,Y,m-.)

    Sabras colorearla utilizando un color no predenido?

    Tambien podemos elegir un marcador para destacar los puntos (x, y) enla graca. Es mas, si no nos interesa que los puntos de la graca se visua-licen conectados por segmentos lineales, tan solo debemos especicar el tipode marcador que deseamos para pintar los puntos y no decir nada sobre eltipo de lnea. Los tipos de puntos predenidos son: . (puntos), o (crcu-los), x (aspas), + (sumas), * (estrellas), s (cuadrados), d (diamantes),p (pentagonos), h (hexagonos) y v,, (triangulos con orientaciondistinta).

    Ejemplo 10.

    Dibujamos la graca del coseno eligiendo el color verde y el tipo depunto diamante. Primero, con lneas continuas que conectan los puntosy luego sin ellas.

    X=linspace(0,2*pi,20);

    Y=cos(X);

    plot(X,Y)

    plot(X,Y,gd-)

    plot(X,Y,gd)

    Ahora mostramos una aplicacion de su utilidad:

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    78 Aprende MATLAB/OCTAVE en 25 horas

    Ejemplo 11.

    Representacion graca de la inuencia que tienen las embarcaciones amotor en la muerte de los manates.

    matriculas=[13 21 24 16 24 20 15 34 33 33 39 43 50 47];

    muertes = [447 460 481 498 513 512 526 559 585 614 ...645 675 711 719];

    plot(matriculas,muertes, bo)

    xlabel(Embarcaciones matriculadas (en miles) desde ...1977)

    ylabel(Manates hallados muertos)

    title(Mortalidad de los manates en Florida)

    Finalmente, una de las propiedades de simplicacion mas interesantes deplot es el poder evitar el uso del comando hold.

    Ejemplo 12.

    X=0:.5:20;

    Y=exp(0.1*X);

    Y1=Y.*sin(X); Y2=Y.*cos(X);

    plot(X,Y,X,-Y,X,Y1,X,Y2)

    plot(X,Y,kv,X,-Y,k^,X,Y1,ms:,X,Y2,co-)

    Sin embargo, cuando utilicemos esta ultima opcion debemos llevar cuidadopues el comando plot tiene otras propiedades de simplicacion graca espec-cas sobre el aspecto de la lnea. En el caso de MATLAB estas se asignaran atodas las lneas del graco y en el caso de Octave solo a algunas de ellas sino se indican correctamente. Estas otras propiedades se especican medianteparejas de nombre de la propiedad y su valor como se muestra en el siguiente

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 79

    ejemplo.

    Ejemplo 13.

    plot(X,Y1,ms:,X,Y2,co-)

    Ahora, jamos el grosor de la lnea en pxeles.

    plot(X,Y1,ms:,X,Y2,co-,LineWidth,2)

    Ademas, jamos el tamano del marcador.

    plot(X,Y1,ms:,X,Y2,co-,LineWidth,2, ...MarkerSize, 10)

    Notar que en MATLAB las propiedades especicadas afectan a todaslas lneas mientras que en Octave solo afectan a la graca de Y2!

    Sabes que hacer para que cada lnea tenga su propio grosor y ambasse dibujen sobre los mismos ejes de coordenadas?

    En ciertas ocasiones nos puede resultar de utilidad pintar la graca de unafuncion o de unos datos dados en escala logartmica. En el Ejemplo 14 de laprimera seccion se muestra como podemos conseguirlo utilizando la funcionset; Sin embargo, las funciones semilogx, semilogy y loglog, nos permitenobtener la representacion graca directamente con escala logartmica en el ejeOX, en el eje OY o en ambos, respectivamente.

    Ejemplo 14. Descarga el archivo Ejemplo14.m que esta en http://www.editorialtebar.com y guardalo en el directorio de trabajo.En este archivo se encuentran ciertos datos obtenidos de forma expe-rimental. Cargamos los datos

    Ejemplo14

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    80 Aprende MATLAB/OCTAVE en 25 horas

    Representamos gracamente los resultados con escala lineal en ambosejes de coordenadas.

    subplot(1,2,1)

    plot(diametros,tasas,ro)

    title(Grafica dN/dp versus p)

    xlabel(Diametros p de las particulas)

    ylabel(Densidad del tama~no dN/dp)

    Representamos gracamente los resultados con escala lineal en el ejeOX y escala logartmica en el eje OY .

    subplot(1,2,2)

    semilogy(diametros,tasas,b*)

    title(Grafica SemiLog: dN/dp versus p)

    xlabel(Diametros p de las particulas)

    ylabel(Logaritmo de la densidad del tama~no dN/dp)

    Curvas en parametricas

    Veamos ahora como se pueden representar curvas en el plano dadas enforma parametrica, es decir, de la forma r(t) = (x(t), y(t)), t [a, b]. Paraello, se utilizan principalmente los comandos plot y ezplot.

    Ejemplo 15. Dibujamos la circunferencia unidad.

    subplot(1,2,1)

    ezc=ezplot(cos(t),sin(t));

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 81

    set(ezc,color,[1 0 1])

    axis square

    subplot(1,2,2)

    t=0:.01:1;

    plot(cos(2*pi*t),sin(2*pi*t),g)

    axis square

    Compara ambas gracas. Como es mas sencillo elegir el color de lagraca? Que otras diferencias visuales observas? Si lo has realizadocon MATLAB, donde resulta mas necesario forzar la misma escala enambos ejes de coordenadas?

    Notar que hemos utilizado ; despues de la sentencia de ezplot. Sin embar-go, la ventana graca se ha abierto igualmente. El uso de ; tan solo suprimeel texto de salida en la ventana de comandos.

    Una particularidad de las curvas en parametricas es que se pueden dibujarsobre ellas los vectores velocidad, utilizando el comando quiver cuya sintaxispara este caso es

    quiver(r(t),r(t))

    donde r(t) denota la derivada de r(t) respecto de t.

    Ejemplo 16.

    hold on

    s=linspace(0,2*pi,20);

    quiver(cos(s),sin(s),-sin(s),cos(s))

    axis([-1.5,1.5,-1.5,1.5])

    Notar que es mejor elegir un numero reducido de puntos con el coman-do linspace, pues este sera el numero de vectores que se dibujen.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    82 Aprende MATLAB/OCTAVE en 25 horas

    Finalmente, tambien podemos saber la direccion en que se pinta la curvautilizando el comando comet.

    Ejemplo 17.

    clf

    MATLAB t=linspace(-5,5,1000);

    Octave t=linspace(-5,5,100);

    Ahora, asegurate de ver la ventana Figure a la vez que ejecutas laorden siguiente:

    comet((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))

    Notar que la velocidad de ejecucion depende del numero de puntos quehayamos generado con el comando linspace.

    3.2.2. Gracos 3D

    Curvas en el espacio

    El comando mas sencillo para dibujar curvas en el espacio es el ezplot3.Sin embargo, al igual que ocurre con los comandos ezplot y plot, si utilizamosel comando plot3 tendremos un mayor control sobre la curva.

    Ejemplo 18.

    close all

    subplot(1,2,1)

    ezplot3(cos(2*pi*t),sin(2*pi*t),t)

  • Editorial Tbar. Prohibida la reproduccin sin la autorizacin expresa de la editorial

    CAPITULO 3. GRAFICOS 83

    subplot(1,2,2)

    T=-2:0.01:2;

    plot3(cos(2*pi*T),sin(2*pi*T),T,r)

    Podras conseguir que ambas gracas sean exactamente iguales?Pista: Comienza de la forma siguiente

    subplot(1,2,1)

    ezp=ezplot3(cos(2*pi*t),sin(2*pi*t),t,[-2,2]);

    set(ezp,color,r)

    Funciones de la forma z = f(x, y)

    Para dibujar gracos de funciones de dos variables, al igual que para fun-ciones de una variable, en primer lugar hay que generar tablas de valores paralas variables x e y. en realidad, ahora lo que tenemos que hacer es generaruna malla sobre un rectangulo del plano OXY . Para ello se utiliza el comandomeshgrid.

    Una vez generada la malla hay dos comandos basicos para dibujar super-ces en el espacio tres dimensional: mesh y surf. Su unica diferencia es que conmesh obtenemos una supercie mallada transparente y con surf la superciemallada es opaca.

    Ademas, vimos que la forma mas sencilla de dibujar una supercie eracon la funcion ezmesh ya que la malla se genera de forma automatica. Porsupuesto, existe el comando ezsurf cuya unica diferencia es que la superciese dibuja opaca en lugar de transparente.

  • Editorial Tbar. Prohibida la reproduccin sin la autorizaci