Gu´ R´pida de Matlab
     ıa a

       ´
       Oscar Angulo, Eduardo Cuesta,
Cesar Gutierrez y Mar´ del Carmen Mart´
 ´        ´          ıa               ınez

               diciembre de 2001
Pr´logo
  o

Este libro inicia una serie de gu´ dedicadas a MATLAB.
                                 ıas


El objetivo de esta gu´ es servir de apoyo para el manejo de MATLAB en las asignaturas en las que se emplea el citado
                      ıa
software y en las que las limitaciones de tiempo no permiten una dedicaci´n muy exhaustiva a su explicaci´n. Hemos
                                                                         o                               o
pretendido mostrar en esta gu´ los comandos y estructuras b´sicas de MATLAB de una manera clara y concisa con
                             ıa                            a
algunos ejemplos que hemos considerado interesantes. Pretendemos as´ mismo que esta gu´ sea una gu´ viva que siga
                                                                   ı                  ıa          ıa
evolucionando con el tiempo, como lo ha hecho hasta ahora, gracias a la experiencia en el uso docente de MATLAB y
gracias a las sugerencias de compa˜eros y alumnos a los cuales les queremos mostrar nuestro agradecimiento.
                                  n


                                                                  Valladolid, diciembre de 2001
                                                                  Los Autores




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                             1
m
                                                                                                                  at




    .




No est´ permitida la reproducci´n total o parcial de esta gu´ ni su tratamiento inform´tico, ni la transmisi´n de
      a                        o                            ıa,                       a                     o
ninguna forma o por cualquier medio, ya sea electr´nico, mec´nico, por fotocopia, por registro u otros m´todos, ni
                                                  o         a                                           e
su pr´stamo, alquiler o cualquier otra forma de cesi´n de uso del ejemplar, sin el permiso previo y por escrito de los
     e                                              o
titulares del Copyright.




              ´
Angulo Torga, Oscar; Cuesta Montero, Eduardo; Guti´rrez Vaquero, C´sar; Mart´
                                                  e               e         ınez Mart´
                                                                                     ınez, Mar´ del Carmen:
                                                                                              ıa
Profesores del Departamento de Matem´tica Aplicada a la T´cnica; Valladolid, 2001.
                                    a                    e
                                                                 ´
UNIVERSIDAD DE VALLADOLID. INSTITUTO DE INVESTIGACION DE CIENCIAS DE LA EDUCACION. ´


ISBN: 84-


Imprime: Servicio Reprograf´ COPIPAUMA
                           ıa




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                              2
Contenidos

1 Introducci´n a MATLAB
            o                                                                                                               4
    1.1   Comentarios previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       4
    1.2   Iniciando y finalizando una sesi´n con MATLAB
                                         o                      . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   4
    1.3   El entorno gr´fico de MATLAB bajo Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                       a                                                                                                    5
    1.4   Entorno gr´fico de MATLAB para Linux
                    a                                   . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   6

2 Breve Introducci´n a la Programaci´n en MATLAB
                  o                 o                                                                                        7
    2.1   Principios con MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          7
          2.1.1   Entrada y salida en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           7
          2.1.2   Aritm´tica elemental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                       e                                                                                                     7
          2.1.3   Diferentes formatos para los datos      . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    8
    2.2   Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       9
    2.3   Ficheros *.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      11
    2.4   Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      12
    2.5   Lectura y escritura de datos (Entrada/salida de datos) . . . . . . . . . . . . . . . . . . . . . . . . . .        15
          2.5.1   Escritura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      15
          2.5.2   Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      17
    2.6   Programaci´n modular: Funciones
                    o                             . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   18
    2.7   Otras Observaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       19

3 Gr´ficos con MATLAB
    a                                                                                                                       20
    3.1   Gr´ficos de dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
            a                                                                                                               20
          3.1.1   El comando    plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      20
          3.1.2   Opciones del comando   plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         22
          3.1.3   Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        24
    3.2   Gr´ficos con n´meros complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
            a          u                                                                                                    25
    3.3   Gr´ficos en otros sistemas coordenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
            a                                                                                                               27
    3.4   Controlando los gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                            a                                                                                               28
    3.5   Dibujando curvas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       35
    3.6   Gr´ficos en 3-D
            a                 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   37
    3.7   Control del color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     43
    3.8   Copia de la ventana gr´fica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                                a                                                                                           45




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                       3
Cap´
   ıtulo 1

Introducci´n a MATLAB
          o

1.1       Comentarios previos
Comencemos destacando que la filosof´ del entorno MATLAB no es la de otros paquetes de matem´ticas usuales,
                                   ıa                                                      a
tales como Derive, Maple o Mathematica.
    Su filosof´ se asemeja m´s a la de un lenguaje de programaci´n que al de un paquete est´ndar de matem´ticas
             ıa            a                                   o                          a             a
pues, aunque podemos ejecutar desde la linea de comandos mediante los nombres de dichos operaciones como en los
paquetes mencionados, lo habitual con MATLAB es crear un fichero de texto externo que contenga la secuencia de
comandos que se desea ejecutar y llamar a este “programa” desde MATLAB.
    Algunas de las ventajas e inconvenientes de MATLAB son:

  1) Ventajas que el entorno MATLAB tiene frente a un lenguaje de programaci´n:
                                                                            o

         (a) No hay que definir el tipo de las variables que se van a utilizar, ni el tama˜o de las mismas.
                                                                                         n

         (b) No hay que compilar los programas, como ocurre en los entornos de programaci´n.
                                                                                         o

         (c) Se pueden utilizar extens´
                                      ısimas librer´ de funciones ya definidas.
                                                   ıas

         (d) Presenta un manejo muy pr´ctico de vectores y matrices.
                                      a

  2) Frente a un lenguaje de programaci´n no presenta incovenientes destacables.
                                       o                                                   Adem´s las sentencias y las
                                                                                               a
        estructuras que se manejan son muy similares a las que se usan en el entorno de C.

        Algunos de los inconvenientes frente a otros paquetes inform´ticos son, entre otros:
                                                                    a

         (a) Al no estar pensado para el trabajo en linea de comandos no presenta ning´n men´ de acceso r´pido a
                                                                                      u     u            a
              procedimientos de uso frecuente (como el que tiene por ejemplo Derive).

         (b) No posee una librer´ de c´lculo simb´lico propio por lo que recurre a comandos de Maple. No obstante,
                                ıa    a          o
              este no es el fin ´ltimo de este programa y hay otros en el mercado m´s optimizados para este tipo de
                               u                                                  a
              c´lculos.
               a



1.2       Iniciando y finalizando una sesi´n con MATLAB
                                         o
MATLAB se arranca pulsando con el rat´n en el icono correspondiente, e inmediatamente aparece la pantalla de la
                                     o
figura   ??.
    Cualquier comando que se escribe tras el cursor de MATLAB ser´ procesado cuando se presione la tecla [ENTER].
                                                                 a
Por ejemplo, el comando que hay que ejecutar para salir de MATLAB es        quit:


    >>        quit [ENTER]

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                              4
1.3 El entorno gr´fico de MATLAB bajo Windows
                 a                                                                                               m
                                                                                                                 at




    Si se necesita detener la ejecuci´n de un programa o de un comando MATLAB antes de su finalizaci´n normal es
                                     o                                                             o
necesario presionar simult´neamente la tecla [CTRL] y la tecla [C]. MATLAB detiene as´ cualquier comando o programa
                          a                                                          ı
que estuviera ejecut´ndose en ese momento y devuelve el cursor a su estado original quedando preparado para ejecutar
                    a
el siguiente comando.



1.3      El entorno gr´fico de MATLAB bajo Windows
                      a
La ventana de trabajo de MATLAB es una cl´sica ventana de Windows en la que aparece un men´ de opciones y unos
                                         a                                                u
cuantos botones de acceso r´pido.
                           a
    El men´ de opciones se compone de cinco submen´s
          u                                       u         File , Edit , View, Window y Help , cada uno de ellos con
las siguientes opciones

    • Men´ File : Con esta opci´n se puede, entre otras
         u                     o
      cosas crear un nuevo elemento (bien un fichero
      M-File, una figura o un modelo de Simulink);
      abrir una nueva sesi´n, o un fichero M-File; gra-
                          o
      bar, leer o mostrar el campo de trabajo (variables
      utilizadas); seleccionar el directorio de trabajo;
      seleccionar diversas preferencias, que van desde el
      color de la pantalla hasta el tipo de datos con los
      que trabaja por defecto; imprimir el documento
      activo, una selecci´n o elegir las preferencias de
                         o
      impresi´n; los ´ltimos archivos utilizados; y aban-
             o       u
      donar el programa.




    • Men´ Edit :
         u             Posee las opciones de un edi-
      tor cl´sico de textos para Windows, seleccionar
            a
      un texto (con los cursores o el rat´n), cortar
                                         o
      un texto, copiar o pegar lo que tengamos se-
      leccionado en el portapapeles, deshacer la ´ltima
                                                 u
      acci´n, seleccionar todo el documento o bien bor-
          o
      rar las variables de la sesi´n.
                                  o




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                             5
1.4 Entorno gr´fico de MATLAB para Linux
              a                                                                                                    m
                                                                                                                   at




    • Men´ Help : Muestra todas las ayudas que nos
         u
      ofrece MATLAB y sobre las que nos extendere-
      mos algo m´s en la ´ltima parte de esta intro-
                a        u
      ducci´n.
           o




      Diversas operaciones se pueden realizar a trav´s de los botones de acceso r´pido, como abrir una nueva sesi´n,
                                                    e                            a                               o
      imprimir un fichero, obtener ayuda, seleccionar un nuevo directorio de trabajo o ver el n´mero de variables que
                                                                                              u
      estamos utilizando en este momento.




1.4      Entorno gr´fico de MATLAB para Linux
                   a
Se˜alemos para los usuarios de Linux que algunas versiones antiguas de MATLAB no incluyen un editor propio como
  n
el descrito para Windows por lo que utilizaremos cualquiera de los que Linux tiene disponibles (joe, vi, kedit,...). En
este caso, la ventana de trabajo tendra una presentaci´n similar a la siguiente:
                                                      o
    Destaquemos por ´ltimo que tanto bajo Windows como bajo Linux se puede utilizar cualquier editor que permita
                    u
grabar los ficheros en formato ASCII para elaborar nuestros programas.




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                               6
Cap´
   ıtulo 2

Breve Introducci´n a la Programaci´n
                o                 o
en MATLAB

2.1      Principios con MATLAB
2.1.1      Entrada y salida en MATLAB
Al arrancar MATLAB aparecer´ el s´
                           a     ımbolo del sistema (adem´s de algunos mensajes)
                                                         a



    >>

    El s´
        ımbolo   >> determina la linea de comandos donde podremos escribir y ejecutar los comandos. Para salir de
MATLAB teclearemos:



    >>     quit [ENTER]

2.1.2      Aritm´tica elemental
                e
Comenzaremos viendo con varios ejemplos que las operaciones aritm´ticas habituales se realizan del modo esperado
                                                                 e
con los operadores

                              suma:   +, resta: −, producto: ∗, divisi´n: /, y exponencianci´n: ˆ.
                                                                      o                     o

Escribamos en linea de comandos lo siguiente:

    >>     1+2 [ENTER]                                                     Suma de dos enteros.
         ans =     3
    >>     sin(pi/2) [ENTER]                                                         Seno de π/2.
         ans =     1
    >>     2.45*3.1415 [ENTER]                               Producto de dos n´meros reales.
                                                                              u
         ans =     7.6967
    >>     2,34*3 [ENTER]                                    Ponemos una coma en lugar de un punto
         ans =     2
         ans =     102                                                            ¿Qu´ ha hecho MATLAB?
                                                                                     e
    >>     2E-2*3E8 [ENTER]                                                   Uso del exponente.

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                         7
2.1 Principios con MATLAB                                                                                        m
                                                                                                                 at




         ans =     6000000
    >>     log(10) [ENTER]                                            Logaritmo neperiano.
         ans =     2.3026
    >>     (3+2^3*i)+(-1+5*i) [ENTER]                                   Suma de complejos.
         ans =     2.0000+13.0000i
    >>     (1-2*i)*(2+2*i) [ENTER]                                Producto de complejos.
         ans =     6.0000-2.0000i

    Existen otras muchas funciones disponibles en MATLAB y que son an´logas a las que maneja Derive, Maple u
                                                                     a
otros; as´ por ejemplo:
         ı

   arco seno:    asin(x), arco tangente: atan(x), ra´ cuadrada: sqrt(x), logaritmo en base 10: log10(x), . . .
                                                    ız

    Si no queremos que aparezca por pantalla el resultado de una operaci´n tendremos que poner al final de la linea
                                                                        o
punto y coma ”;” .

    >>     tan(pi/4) [ENTER]                                             Tangente de π/4.
         ans =     1.0000
    >>     tan(pi/4); [ENTER]                     La misma operaci´n pero sin salida por pantalla.
                                                                  o
    >>

2.1.3      Diferentes formatos para los datos
Existen diferentes formatos de salida para los datos en MATLAB. Veamos algunos ejemplos.



    >>     d=1/33
           d=      0.0303
    >>     format long, d [ENTER]                                           Formato largo.
           d=      0.03030303030303
    >>     format short e, d [ENTER]           Formato corto con mantisa y exponente.
           d=      3.0303e-002
    >>     format long e, d [ENTER]            Formato largo con mantisa y exponente.
           d=      3.030303030303030e-002
    >>     format rat, d [ENTER]                                         Formato racional.
           d=      1/33

Se puede realizar algunas ”operaciones” con alguna indeterminaci´n.
                                                                o

    >>     1/0 [ENTER]                                                  Divisi´n por cero.
                                                                              o
         ans =     Inf
    >>     5*Inf [ENTER]                                   Multiplicaci´n por infinito.
                                                                       o
         ans =     Inf

Para la primera de ellas nos avisa que divide por cero.




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                            8
2.2 Asignaciones                                                                                                    m
                                                                                                                    at




2.2        Asignaciones
Uno de los elementos fundamentales en la programaci´n son la variables:
                                                   o
    Variable: Objeto que puede tomar el mismo valor a lo largo de todo el programa o bien puede ir cambiando al
ejecutar diferentes acciones.
    El nombre de cada variable puede ser el que el programador quiera siempre que no coincida con alguna palabra
clave de MATLAB, en cuyo caso nos informar´ mediante un mensaje de error. De todos modos es recomendable que
                                          a
el nombre que elijamos para cada variable sea alusivo a su contenido o a su aplicaci´n.
                                                                                    o
    Destaquemos un hecho importante: MATLAB distingue entre may´sculas y min´sculas por lo que
                                                               u            u                           x y X no ser´n
                                                                                                                    a
las mismas variables ni lo ser´n tampoco
                              a            Nodos, nodos y NODOS.
    Para realizar la asignaci´n de valores a las variables en MATLAB no hace falta declarar el tipo de dato que se va a
                             o
asignar (entero, real, complejo o car´cter) ni el tama˜o del mismo (escalar, vector o matriz del tama˜o que sea).
                                     a                n                                              n
    Seudoc´digo: La asignaci´n de un valor
          o                 o                 a a una variable llamada VARIABLE escribiremos

                                                   VARIABLE ←− a

donde   a puede ser una constante, el valor de otra variable o el valor de una expresi´n aritm´tica.
                                                                                      o       e

  1) Comencemos con algunos ejemplos elementales de asignaciones y alguna de las operaciones que se pueden
        realizar.

             >>      a=2 [ENTER]               Asignaci´n del valor 2 a la variable a.
                                                       o
                      a=    2
             >>      x=a [ENTER]               Asignaci´n del valor 2 a la variable x.
                                                       o
                      x=    2
             >>      x=x+2 [ENTER]             Asignaci´n del valor 4 a la variable x.
                                                       o
                      x=    4
             >>      b=1:1:10 [ENTER]      Asignamos a b el vector de datos [1,2,3,4,...,10]
                      b=    1 2 3 4 5 6 7 8 9 10
             >>      a+b [ENTER]                          Sumamos un escalar y un vector.
                    ans =   3 4 5 6 7 8 9 10 11 12                             ¿Qu´ ha hecho MATLAB?
                                                                                  e
             >>      a*b [ENTER]                    Producto de un vector y un escalar.
                    ans =   2 4 6 8 10 12 14 16 18 20

  2) Si sumamos vectores de tama˜o diferente tenemos lo siguiente.
                                n

             >>      c=1:5:25 [ENTER]                               Declaramos el vector c.
                      c=    1 6 11 16 21
             >>      b+c [ENTER]                                               Sumamos los vectores b y c.
                     ??? Error using ==> +
                     Matrix dimensions must be agree

  3) Podemos multiplicar vectores, bien como producto escalar de ellos o bien componente a componente.

             >>      b=0:2:20 [ENTER]                               Declaramos el vector b.
                      b=    0 2 4 6 8 10 12 14 16 18 20
             >>      c=0:1:10 [ENTER]                               Declaramos el vector c.
                      c=    0 1 2 3 4 5 6 7 8 9 10
             >>      b.*c [ENTER] Producto de dos vectores componente a componente.
                    ans =   0 2 8 18 ...200

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                               9
2.2 Asignaciones                                                                                                 m
                                                                                                                 at




           >>     b’*c [ENTER]          Matriz resultado de multiplicar b traspuesto por c (ver
                  pantalla)
           >>     b*c’ [ENTER]          Producto de b por c traspuesto (producto interior)
                ans =    770

  4) No s´lo se pueden sumar vectores o multiplicar por una constante si no que se puede calcular el logaritmo de un
         o
      vector o el seno de un vector, etc... obteniendo el logaritmo o el seno de cada una de sus componentes.

           >>     b=1:10; [ENTER]                                                Declaramos el vector b.
           >>     log(b) [ENTER]                                  Logartimo del vector b.
                ans =    Columns 1 through 7                             Siete primeras columnas.
                         0 0.6931 ...1.9459
                         Columns 8 through 10                               Tres ´ltimas columnas.
                                                                                 u
                         2.0794 2.1972 2.3026
           >>     sin(b) [ENTER]                                        Seno del vector b.
                ans =    Columns 1 through 7                             Siete primeras columnas.
                         0.8415 0.9093 ...0.6570
                         Columns 8 through 10                               Tres ´ltimas columnas.
                                                                                 u
                         0.98954 0.4121 -0.5440
           >>     c=1:1:5 [ENTER]
                   c=    1 2 3 4 5
           >>     2.^c [ENTER]             2 elevado a las potencias que determina c.
                ans =    2 4 8 16 32
           >>     c.^ 2 [ENTER]            Las componentes de c elevadas al cuadrado.
                ans =    1 4 9 16 25

      Un punto delante de los operadores   .*, .^ y ./ indica que las operaciones se realizan componente a componente
      en los vectores o las matrices.

  5) En relaci´n a la aritm´tica matricial mostramos algunas de las funciones m´s habituales.
              o            e                                                   a

           >>     A=[1 2 3;4 5 6;7 8 9] [ENTER]                       Definici´n de la matriz A.
                                                                              o
                   A=    1 2 3
                         4 5 6
                         7 8 9
           >>     A(2,2) [ENTER]                                 Elemento (2,2) de la matriz A.
                ans =    5
           >>     A(:,3) [ENTER]                  Muestra la tercera columna de la matriz A.
                ans =    3
                         6
                         9
           >>     size(A) [ENTER]                                          Tama~o de la matriz A.
                                                                               n
                ans =    3 3
           >>     B=[1 2 1;2 1 2;1 2 1] [ENTER]
                   B=    1 2 1
                         2 1 2
                         1 2 1
           >>     A*B [ENTER]                               Producto matricial habitual.


Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                            10
2.3 Ficheros *.m                                                                                                  m
                                                                                                                  at




               ans =      8 10 8
                         20 25 20
                         32 40 32

    Un comando de uso frecuente es     who que nos permite conocer el n´mero y nombre de las variables usadas a lo
                                                                       u
largo del programa o de la sesi´n. Su formato es:
                               o

    >>     who [ENTER]
           Your variables are:
            A    u      vfil x
            ans vcol w         y
donde las variables corresponden a otra ejecuci´n del programa.
                                               o
    El comando   whos nos muestra, adem´s del nombre de las variables, informaci´n adicional de cada variable, distin-
                                       a                                        o
guiendo si es vector o escalar.

    >>     whos [ENTER]
            Name Size Bytes            Class

             A       3x4          96   double   array
             ans     4x1          32   double   array
             u       1x1           8   double   array
                                                         Grand total is 28 elements usign 224 bytes
             vcol    4x1          32   double   array
             vfil    1x4          32   double   array
             w       1x1           8   double   array
             x       1x1           8   double   array
             y       1x1           8   double   array
    Debemos tener en cuenta que MATLAB en cada sesi´n mantiene en memoria todas las variables utilizadas hasta
                                                   o
ese momento y que ´nicamente el comando
                  u                            clear hace que elimine el valor de todas las variables.
    >>     clear [ENTER]

Si ahora tecleamos   who no se produce ninguna salida.


2.3      Ficheros *.m
Como ya hemos dicho la filosof´ de MATLAB se asemeja m´s a la de un lenguaje de programaci´n que a la de un
                             ıa                      a                                   o
software matem´tico de resoluci´n de problemas simb´licos. En concreto, permite ejecutar una secuencia de comandos
              a                o                   o
escritos en un fichero ASCII sin m´s que hacer una llamada al mismo, como si se tratase de un programa en lenguaje
                                 a
C, Fortran u otros, pero sin necesidad de ”linkar” y ”compilar” dicho fichero.
    Estos ficheros se pueden editar con cualquier editor o procesador de textos, como el que incluye el propio MATLAB,
el usual Word (siempre que almacenemos el fichero sin formato), edit (de MSDOS), kedit, joe, vi,. . . , siempre que
permita guardalo en formato texto.
    Un sencillo ejemplo nos pertimitir´ aclarar estas ideas.
                                      a

  1) En primer lugar abrimos un fichero con el editor elegido.

  2) Tecleamos lo siguiente:



      numerador=12^3                    % Asignamos el valor 12^3 a la variable numerador.
      denominador=3.2E-3                % Asignamos el valor 3.2E-3 a la variable denominador.

      x = numerador/denominador % Calculamos la division de la anteriores variables.

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                             11
2.4 Estructuras de control                                                                                     m
                                                                                                               at




  3) Grabamos el fichero en el directorio en el que hemos arrancado MATLAB con el nombre “prueba1.m”. Es
      un error frecuente grabar el fichero en un directorio diferente al que tenemos fijado para MATLAB. Si no se
      hubiese grabado en ese directorio podemos cambiar desde MATLAB el directorio de trabajo haciendo uso de los
      comandos del sistema (para LINUX:      ls, cd, mv,. . . para WINDOWS: dir, cd, move,. . . )

  4) Volvemos a la ventana de MATLAB y tecleamos

           >> prueba1
          numerador = 1728
          denominador =       0.0032
                  x=     540000

    En lo sucesivo ´sta ser´ la forma de trabajar con MATLAB: escribir en un fichero la secuencia de comandos que
                   e       a
vamos a ejecutar. Con este planteamiento elaboraremos programas (secuencia de comandos) que nos permitan resolver
problemas con un cierto grado de complejidad.



2.4      Estructuras de control
                                                                                                       ´
Las estructuras de control permiten organizar adecuadamente las acciones a realizar por el procesador. Estas son de
tres tipos:

    • Secuenciaci´n: Es la estructura de control m´s sencilla y f´cil de utilizar y
                 o                                a              a
                        consiste en la enumeraci´n consecutiva de acciones a realizar.
                                                o
                        No existe seudoc´digo expl´
                                        o         ıcito para esta estructura aparte de
                        la propia escritura de las acciones

    • Selecci´n: Esta estructura act´a sobre una proposici´n o condici´n boo-
             o                      u                     o           o
                   leana con dos posibles valores mutuamente excluyentes: Ver-
                   dadero o Falso
      Si C es la condici´n y A y B son las acciones o secuencia de acciones
                        o

                             ´
                       SEUDOCODIGO:                                            ´
                                                                     CODIFICACION EN MATLAB:
                       si C entonces                                 if C
                              acci´n A
                                  o                                         acci´n A
                                                                                o
                       sino                                          else
                              acci´n B
                                  o                                         acci´n B
                                                                                o
                       finsi                                          end



      Como ejemplo escribamos el siguiente fichero



      if n>2                           % Si el valor de n es menor que 2 haz:
          disp(’Has cometido un error’)   % Muestra un mensaje por pantalla.
      end

      if n>0 & n<2                               % Si n>0 Y n<2 entonces haz...
          disp(’Has acertado’)
      end

      if n<-2 | n>10                             % Si n<-2 O n>10 entonces haz...

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                          12
2.4 Estructuras de control                                                                                         m
                                                                                                                   at




            disp(’Es otra prueba’)
      end


      Observemos que la opcion        else no es necesario utilizarla. Veamos otro ejemplo con la opci´n else.
                                                                                                      o



      if n>0 & n<2                      % Si n>0 y n<2 entonces haz...
          disp(’Estas en el intervalo’)
      else                             % en caso contrario haz...
          disp(’No estas en el intervalo’)
      end


      Las estructuras de selecci´n se pueden anidar de diferentes formas. Mostramos una de esas posibilidades.
                                o

                             ´
                       SEUDOCODIGO:
                       si C1 entonces                                           ´
                                                                      CODIFICACION EN MATLAB:
                              acci´n A1
                                  o                                   if C1
                       sino                                                    acci´n A1
                                                                                   o
                              si C2                                   elseif C2
                                        acci´n A2
                                            o                                  acci´n A2
                                                                                   o
                              finsi                                    else
                              acci´n A3
                                  o                                            acci´n A3
                                                                                   o
                       finsi                                           end



      Como ejemplo podemos escribir el siguiente fichero.



      if abs(x)<2               % Si el valor absoluto de x es menor que 2 haz
          disp(’La variable x esta acotada’)
      elseif x>-3               % Si no es as’{i} y si x>-3 haz
          disp(’La variable no esta acotada’)
      end


      Existen otras estructuras de selecci´n con fines m´s espec´
                                          o            a       ıficos como es la estructura        switch que se puede
      consultar en cualquier manual de MATLAB.

    • Iterativa. La estructura iterativa responde al caso de las acciones consis-
                  tentes en la repetici´n de una o de varias subacciones
                                       o
      Existen varios tipos de estructuras iterativas que se pueden englobar en una sola pero nosotros vamos a presentar
      los casos particulares m´s habituales:
                              a

        1) Sin n´mero predeterminado de iteraciones y con la condici´n al principio. Si C es la condici´n y A es la
                u                                                   o                                  o
             acci´n o secuencia de acciones:
                 o
                                ´
                          SEUDOCODIGO:                                             ´
                                                                         CODIFICACION EN MATLAB:
                          mientras C hacer                               while C
                                 acci´n A
                                     o                                             acci´n A
                                                                                       o
                          finmientras                                     end




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                              13
2.4 Estructuras de control                                                                                              m
                                                                                                                        at




            Proponemos el siguiente ejemplo


            n=1;

            while prod(1:n)<1e100
                n=n+1;
                disp(’Nos llegamos en’),n
            end
        2) Sin n´mero predeterminado de iteraciones y con la condici´n al final. Si C es la condici´n y A es la acci´n
                u                                                   o                             o                o
            o secuencia de acciones:
                                                                                       ´
                                                                             CODIFICACION EN MATLAB:
                                     ´
                               SEUDOCODIGO:                                  while 1
                               hacer                                                   acci´n A
                                                                                           o
                                       acci´n A
                                           o                                       if C,break, end
                               mientras C                                    end


        3) Con n´mero predeterminado de iteraciones. Esta estructura repite una acci´n o una secuencia de ellas un
                u                                                                   o
            n´mero fijo de veces que viene determinado por una variable
             u                                                            contador que toma valores entre un valor
            inicial   vi y un valor final vf, cuando la variable contador se incrementa un valor paso que puede ser
            negativo.
            Si A es una acci´n o secuencia de acciones:
                            o
                            ´
                      SEUDOCODIGO:
                      para    contador=vi hasta vf incr. paso                                ´
                                                                                   CODIFICACION EN MATLAB:
                      hacer                                                        for   contador=vi,vf,paso
                               acci´n A
                                   o                                                         acci´n A
                                                                                                 o
                      finpara                                                       end


            Como ejemplo editemos el fichero prueba.m con los siguientes comandos


            for n=1:1:10                %   Cuenta desde 1 hasta 10 de 1 en 1.
                y(n)=n^2;               %   Declara un vector cuyas componentes son de la forma n^2.
                x(n)=2*y(n);            %   Declara un vector cuyas componentes son de la forma 2*y_n.
            end                         %   Fin del bucle.

            y,x                         % Muestra por pantalla los vectores declarados.


            Ejecutamos en MATLAB el fichero prueba y obtenemos lo siguiente

                  >>         prueba [ENTER]
                             y = 1 4 9 16...100
                             x=    2 8 18...200
            A diferencia de lo que ocurre con algunos lenguajes de programaci´n y con la mayor parte del software
                                                                             o
            matem´tico, la variable
                 a                          contador puede recorrer los valores que queramos como se muestra en el siguiente
            ejemplo (modificamos el fichero anterior).


            for n=[1 3 7 2 5.5 3] % Recorre los valores 1 3 7 2 5.5 y 3 de n.
                x(n)=2*n;         % Declara un vector .
            end                   % Fin del bucle.

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                   14
2.5 Lectura y escritura de datos (Entrada/salida de datos)                                                            m
                                                                                                                      at




            x                             % Muestra por pantalla los vectores declarados.


            La ejecuci´n del fichero prueba muestra
                      o



                  >>    prueba [ENTER]
                        x=     2 4 6 0 0 11 14
            >> prueba [ENTER]
            Destaquemos que el vector muestra los valores ordenados desde la primera componente hasta la ´ltima que
                                                                                                         u
            contiene la variable n (contador), en el caso de encontrarse ´ ındices no enteros redondea (de todos modos
            se avisa con un   warning) y en el caso de faltar ´
                                                              ındices ´stos se rellenan con valores nulos.
                                                                      e



2.5      Lectura y escritura de datos (Entrada/salida de datos)
2.5.1      Escritura de datos
La escritura de datos nos permite enviar el valor de una o m´s variables externamente, bien a la pantalla del ordenador,
                                                            a
bien a un fichero.
seudoc´digo. Si el nombre de la variable es
      o                                        VARIABLE la acci´n escritura se escribe como
                                                               o

                                                     escribe   VARIABLE


  1) Para que el valor de     VARIABLE aparezca por pantalla bastar´ teclear el nombre de la variable
                                                                   a

           >>      VARIABLE [ENTER]

  2) Para escribir el valor de una variable en un fichero con un formato establecido utilizaremos los siguientes comandos:

         • Abrimos el fichero en el que vamos a guardar los datos:
                  >>    fid=fopen(’nombre-fichero’,permisos)
            donde

                – fid es el identificador que Matlab utiliza para reconocer el fichero.
                – nombre-fichero es el nombre con el que aparecer´ en nuestro directorio
                                                                 a
                – permiso es un    cadena que indica la operaci´n a realizar con el fichero,
                                                               o
                      ’r’ −→       Lectura
                     ’w’  −→       Escritura (se crea si es necesario)
                     ’a’  −→       A˜adir a un fichero ya existente (se crea si es necesario)
                                    n
                    ’r+’  −→       Lectura y escritura
                   ’w+’ −→         Trunca el fichero o lo crea para lectura o escritura
                   ’a+’   −→       Lectura y a˜adir a un fichero ya existente (se crea si es necesario)
                                              n
         • Escribimos el contenido de la variable o variables datos con el formato que indiquemos en format con el
            siguiente comando

                  >>    fprintf(fid,format,datos)
         • Cerramos el fichero abierto con el comando
                  >>    fclose(fid)
            En caso de que se produzca alg´n error al cerrar el fichero MATLAB devolver´ el valor
                                          u                                           a                  −1 y si no es as´
                                                                                                                         ı
            devolver´ 0.
                    a


Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                 15
2.5 Lectura y escritura de datos (Entrada/salida de datos)                                                      m
                                                                                                                at




      Editemos un fichero que haga uso de los anteriores comandos



      t=0:1:10                                % Crea un vector con los datos 0,1,2,3,...,10.
      y=t.^2                                  % Crea un vector con los datos 0,1,4,9,...,100.

      fid=fopen(’parabola.dat’,’w’)           % Crea un puntero a un fichero llamado
                                              % parabola.dat para escribir en el (w)

      x=[t;y];                                % Crea la matriz de datos que vamos a escribir en
                                              % el fichero.

      fprintf(fid,’%1.1f          % 2.6e’,x) %   Escribe en el fichero los datos con el
                                             %   siguiente formato:
                                             %   La primera columna [un entero].[un decimal]
                                             %   La segunda [dos enteros].[6 decimales en
                                             %   modo exponencial]


      fclose(fid)                  % Manda los datos al fichero fid


      En los manuales se pueden encontrar m´s detalles sobre el formato de los datos.
                                           a

    Cuando no sea necesario manejar directamente un fichero con los datos sino que ´nicamente necesitamos guardar
                                                                                  u
los datos para otra su uso en otra sesi´n, podemos utilizar el comando
                                       o                                 save. El formato se muestra en el siguiente
ejemplo:

    >>     a=[1 2 3;4 5 6];                                                             Crea la variable a
    >>     b=2:2:10;                                                                    Crea la variable b
    >>     save datos1          Guarda el valor de todas las variables en el fichero datos1.mat
    >>     save datos2 a                                 Guarda en el fichero datos2 la variable a
    >>     clear                                                         eliminamos todas las variables
    >>     whos                                                             No hay variables declaradas
    >>     load datos2                        El comando load lee el fichero de datos datos2.mat
    >>     a
           a=      1 2 3
                   4 5 6
    >>     clear
    >>     load datos1
    >>     a,b
           a=      1 2 3
                   4 5 6
           b=      2 4 6 8 10

    Otras opciones como el comando   diary se pueden consultar en los manuales.




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                           16
2.5 Lectura y escritura de datos (Entrada/salida de datos)                                                       m
                                                                                                                 at




2.5.2      Lectura de datos
La lectura de datos nos permite asignar un valor a una o a m´s variables mediante acciones externas. bien desde el
                                                            a
teclado del ordenador ´ bien desde un fichero.
                      o
seudoc´digo. Si el nombre de la variable es
      o                                       VARIABLE la acci´n lectura se escribe como
                                                              o

                                                      lee   VARIABLE


  1) El comando de MATLAB para la lectura de un dato desde el teclado es       input que se utiliza como aparece en
      el ejemplo

           >>      z=input(’El valor de la variable z es:n’) [ENTER]
                   El valor de la variable z es:
                   12
                   z=     12

  2) Para leer el valor de una variable en un fichero con un formato establecido se puede utilizar el comando   load.
      Mostremos el siguiente ejemplo: Dado el fichero        data.dat

      1 2 3
      4 5 6
      7 8 9

      podemos teclear

           >>      load data.mat [ENTER] Carga los datos del fichero data.dat en la variable
                   data
           >>      data
                data =    1 2 3
                          4 5 6
                          7 8 9

  3) Otra opci´n para leer el valor de una variable en un fichero con un formato establecido hace uso de los comandos
              o
      descritos para la apertura y el cierre de un fichero, y de otro para la lectura propiamente dicha, en concreto:



           >>      A=fscanf(fid,format,tama~o)
                                           n

      donde

         • fid es el identificador del fichero.
         • format es un cadena con las mismas opciones que fprintf.
         • tama~o es un argumento optativo que permite limitar el n´mero de datos leidos. El valor que puede tomar
               n                                                   u
            este argumento es uno de los siguientes

                – N: Lee un vector de hasta N componentes.
                – inf: Lee datos hasta el final del fichero.
                – [N,M]: Lee una matriz de tama˜o N x M por columnas (M puede se inf).
                                               n

    En el siguiente ejemplo se muestra como se puede leer el fichero creado en el ejemplo anterior




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                           17
2.6 Programaci´n modular: Funciones
              o                                                                                                   m
                                                                                                                  at




fid=fopen(’parabola.dat’,’r’)            % Crea un puntero a un fichero llamado
                                         % parabola.dat para leer de ’el (r)

z=fscanf(fid,’%1.1f             %2.6e’,11) % Lee del fichero los datos con el
                  %           siguiente formato:
                  %           La primera columna [un entero].[un decimal]
                  %           La segunda [dos enteros].[6 decimales en
                  %           modo exponencial]

fclose(fid)              % Cierra el fichero identificado por fid



2.6      Programaci´n modular: Funciones
                   o
En programaci´n, al realizar una operaci´n, aparecen con frecuencia los siguientes problemas:
             o                          o

    • La tarea debe realizarse varias veces.

    • Dicha tarea es realizada en varios programas.

    • Aparece en el contexto de un programa muy extenso que conviene simplificar.

Para resolver este tipo de problemas se usan lo que se llaman funciones que no son m´s que programas que son utilzados
                                                                                    a
por otros programas.
    Cualquier programa puede considerarse como una funci´n subceptible de ser usado por otro programa
                                                        o
    La posibilidad de llamar a estas funciones tantas veces como sea necesario nos permite no tener que escribir el
programa cada vez que lo necesitemos.       Por otra parte, las funciones nos permiten descomponer el programa en
subprogramas m´s sencillos.
              a
    En relaci´n con el modo de definir funciones haremos las siguientes observaciones:
             o

  1) Se guarda como un fichero       funcion.m cuyo nombre ha de coincidir con el de la funci´n.
                                                                                            o

  2) Ha de estar encabezado por la linea

      function[salida1,...,salidaN]=nombre(entrada1,...,entradaM)
      seguido por los comandos del programa.

  3) La funci´n termina su tarea con el ´ltimo comando del programa, sin necesidad de ning´n comando espec´
             o                          u                                                 u               ıfico,
      aunque ´sta acci´n es posible con el comando
             e        o                               return.

  4) Desde la propia funci´n se puede hacer llamadas a otras funciones o incluso a ella misma (lo que se conoce como
                          o
      recursividad).

  5) Las variables usadas en cada funci´n toman un valor local. Por tanto, una variable con el mismo nombre en una
                                       o
      funci´n y en el programa principal mantiene el valor que tome en cada uno de los contextos.
           o

    Escribimos un sencillo ejemplo que hace llamada a una funci´n llamada
                                                               o            factorial

m=input(’Da el numero de sumandos n’);
x=0;
for n=1:1:m
    x=x+1/factorial(n);
end
x

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                             18
2.7 Otras Observaciones                                                                                          m
                                                                                                                 at




    donde la funci´n
                  o     factorial viene definida por


function[k]=factorial(n)
k=1;
for m=2:1:n
    k=k*m;
end



2.7      Otras Observaciones
Para terminar esta introducci´n a˜adimos algunas observaciones m´s.
                             o   n                              a

  1) Los s´
          ımbolos “,” “;” “:” sirven para: separar operaciones dentro de un l´
                                                                             ınea (“,”); para delimitar campos dentro
      de un comando (“:”) ´ para evitar que el resultado de un comando no salga por pantalla (“;”).
                          o

           >>     2+3; 3+4 [ENTER]
                ans =     7

      Los puntos “...” se usar´n para continuar un comando cuando no nos quepa completo en un sola l´
                              a                                                                     ınea.

  2) Con las flechas     ↑ y ↓ recuperamos las operaciones realizadas anteriormente.

  3) Para obtener ayuda sobre MATLAB debemos de teclear cualquiera de los comandos



           >>     help [ENTER]
           >>     helpwin [ENTER]                            Aparece una ventana de ayuda en Windows.

  4) El s´
         ımbolo “%” indica a MATLAB que no tenga en cuenta lo que se encuentra a continuaci´n en la misma l´
                                                                                           o               ınea
      (comentario). Esto vendr´ bien cuando queremos explicar los programas que hagamos.
                              a

  5) Desde la l´
               ınea de comandos de MATLAB podemos ejecutar comandos propios del sistema (MSDOS, Linux,...)
      como por ejemplo

           >>     dir
           >>     cd directorio
           >>     del fichero




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                            19
Cap´
   ıtulo 3

Gr´ficos con MATLAB
  a

3.1      Gr´ficos de dos dimensiones
           a
El usuario de MATLAB puede dibujar f´cilmente un conjunto de pares de puntos, y una forma de hacerlo es mediante
                                    a
el comando   plot.

3.1.1      El comando plot
El uso del comando    plot es el siguiente

    >>     plot(argumentos)

y los argumentos que toma pueden ser


                     Argumentos                  Explicaci´n
                                                          o
                              n
      plot(x)        x ∈IR                       Dibuja los pares de puntos  (i, xi ), 1 ≤ i ≤ n, unidos por segmentos.
      plot(x,y)      x, y ∈ I n
                            R                    Dibuja los pares de puntos (xi , yi ), 1 ≤ i ≤ m, unidos por segmentos.
                                                 Dibuja en el plano complejo los pares de puntos ( (zi ), (zi )), 1 ≤
      plot(z)        z ∈ Cn
                                                 i ≤ n , unidos por segmentos.
                                                 Para cada j , 1 ≤ j ≤ n, dibuja los pares de puntos (i, aij ), 1 ≤ i ≤ m,
                                                 unidos por segmentos.
      plot(A)        A ∈ Mm×n
                                                 En la misma gr´fica, cada l´
                                                               a           ınea se dibuja con un color y con un tipo
                                                 de l´
                                                     ınea diferente.
                                                 Independientemente de que x sea un vector fila o columna, ejecuta
                                                 plot(x,y) donde y es una fila o columna de A, para la elecci´n de la
                                                                                                            o
      plot(x,A)      x ∈ I n , A ∈ Mm×n
                         R                       fila y columna se tiene en cuenta la coincidencia de dimensiones.
                                                 En la misma gr´fica, cada l´
                                                               a           ınea se dibuja con un color y con un tipo
                                                 de l´
                                                     ınea diferente.
                                                 En las mismas condiciones que el caso anterior dibuja los pares orde-
      plot(A,x)      x ∈ I n , A ∈ Mm×n
                         R
                                                 nados siendo  x el valor de las ordenadas
                                                 Ejecuta   plot(x,y), donde x es una columna de A e y es una columna
                                                 de   B.
      plot(A,B)      A,B ∈ Mm×n
                                                 En la misma gr´fica, cada l´
                                                               a           ınea se dibuja con un color y con un tipo
                                                 de l´
                                                     ınea diferente.


    Veamos algunos ejemplos. Al ejecutarlos por primera vez aparece una nueva ventana que es la ventana gr´fica, en
                                                                                                          a
esta se muestra el dibujo realizado por   plot (o cualquiera de los comandos que introduciremos), sin embargo, si vamos


Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                   20
3.1 Gr´ficos de dos dimensiones
      a                                                                                                                                                                   m
                                                                                                                                                                          at




realizando los ejemplos uno a uno sin cerrar la ventana gr´fica ´sta se oculta pasando a ser una ventana secundaria
                                                          a    e
en la que se van sustituyendo las gr´ficas por las que actualmente dibujamos. Cada vez que queramos ver una gr´fica
                                    a                                                                        a
tenemos que hacerla ventana principal ya que no se realiza autom´ticamente.
                                                                a
   Dibujemos el vector de ordenadas y el de abcisas:              25



         >>    x=[-4 -2 0 1 3 5]; [ENTER]
                                                                     20
         >>    y=[16 4 0 1 9 25]; [ENTER]
         >>    plot(x,y); [ENTER]
                                                                     15




                                                                     10




                                                                         5




                                                                         0
                                                                         −4    −3       −2            −1               0       1          2             3       4     5




     Dibujemos un vector de n´meros complejos:
                             u
                                                                     1




                                                                 0.5
         >>    z=[1 2+i 3 2-i 3-2*i]; [ENTER]
         >>    plot(z); [ENTER]                                      0




                                                                −0.5




                                                                 −1




                                                                −1.5




                                                                 −2
                                                                         1    1.2     1.4       1.6              1.8       2       2.2        2.4       2.6     2.8   3


Para dibujar n´meros complejos tambi´n se pueden utilizar los comandos
              u                     e                                               polar, quiver, feather, compass, rose
y   pol2cart. (consultar la secci´n 3.2).
                                 o
     Dibujemos una matriz:                                      25



         >>    A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16              20

               -0.5; 5 25 0.5]; [ENTER]
         >>    plot(A); [ENTER]                                 15




                                                                10




                                                                 5




                                                                 0




                                                                −5
                                                                     1        1.5           2              2.5             3        3.5             4         4.5     5




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                                                    21
3.1 Gr´ficos de dos dimensiones
      a                                                                                                                                                                        m
                                                                                                                                                                               at




    Si en el ejemplo anterior elegimos las ordenadas obtenemos:     25




                                                                    20

        >>     x=[0 0.1 0.2 0.3 0.4]; [ENTER]
        >>     A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16                  15


               -0.5; 5 25 0.5]; [ENTER]
                                                                    10
        >>     plot(x,A); [ENTER]
                                                                     5




                                                                     0




                                                                    −5
                                                                         0               0.05       0.1         0.15         0.2       0.25     0.3         0.35         0.4




                                                                             1.5

    Tambi´n podemos dibujar diferentes funciones en el mismo
         e
    gr´fico.
      a                                                                          1



        >>     x=0:0.1:2; [ENTER]
                                                                             0.5
        >>     A=[sin(pi*x); 0.5+0.5*x]; [ENTER]
        >>     plot(x,A); [ENTER]
                                                                                 0




                                                                         −0.5




                                                                             −1
                                                                                     0     0.2     0.4    0.6          0.8         1    1.2   1.4     1.6          1.8    2



                                                                             2


    Podemos intercambiar los ejes sin m´s que escribir
                                       a                                 1.8


                                                                         1.6


                                                                         1.4
        >>     plot(A,x) [ENTER]
                                                                         1.2


                                                                             1


                                                                         0.8


                                                                         0.6


                                                                         0.4


                                                                         0.2


                                                                             0
                                                                             −1                  −0.5                  0               0.5            1                  1.5




3.1.2      Opciones del comando plot
Existe una serie de opciones para realizar gr´ficos con MATLAB entre las que destacamos las siguientes:
                                             a

                                                 Explicaci´n
                                                          o
                                                 Dibuja la gr´fica de abcisas
                                                             a                                    x y ordenadas y con las opciones de estilo
     plot(x,y,cad)
                                                 dadas por   cad.
                                                 Dibuja la gr´fica de abcisas
                                                             a                x1 y ordenadas y1 con las opciones de
                                                 estilo dadas porcad1, la gr´fica de abcisas x2 y ordenadas y2 con las
                                                                            a
     plot(x1,y1,cad1, x2,y2,cad2,...)            opciones de estilo dadas por cad2 y as´ con el resto de ternas. Si se
                                                                                       ı
                                                 omiten las opciones de estilo MATLAB escoge el color y estilo para
                                                 cada gr´fico.
                                                        a

    Los estilos de l´
                    ıneas y colores se determinan con una variable caracter de a lo sumo tres de caracteres que hemos



Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                                                         22
3.1 Gr´ficos de dos dimensiones
      a                                                                                                               m
                                                                                                                      at




denotado porcad. Las ternas se construyen con un car´cter de cada columna sin importar el orden. As´ por ejemplo,
                                                      a                                            ı
cad=’ys-’ dibuja una l´
                      ınea amarilla, s´lida y con cuadrados como marcadores, exactamente igual que cad=’s-y’ o
                                      o
cad=’sy-’ aunque siempre es mejor ser hom´geneos en cada uno de los usos de estos par´metros. Los tama˜os de los
                                            o                                        a                 n
s´
 ımbolos, las anchuras de las l´
                               ıneas y otros aspectos del dibujo pueden ser modificados como ya veremos posteriormente.
    Si no se especifica el estilo, MATLAB utiliza por defecto una l´
                                                                  ınea azul continua sin marcadores para los puntos
dibujados.

                                     Marcadores               L´
                                                               ıneas                Colores
                               .   punto                 -    s´lida
                                                               o                y    amarillo
                               *   estrella              --   discont´
                                                                     ınua       g    verde
                               x   cruz                  -.   punto-raya        m    magenta
                               o   c´
                                    ırculo               :    punteada          b    azul
                               +   m´s
                                    a                                           c    cyan
                               s   cuadrado                                     w    blanco
                               d   rombo                                        r    rojo
                               p   pent´gono
                                       a                                        k    negro
                               h   hex´gono
                                      a
                               v   tri´ngulo abajo
                                      a
                               <   tri´ngulo izquierda
                                      a
                               >   tri´ngulo derecha
                                      a
                               ^   tri´ngulo arriba
                                      a

    Veamos algunos ejemplos.

    Dibujamos una gr´fica con c´
                    a         ırculos.
                                                                        0.5



        >>     x=-pi:0.05:pi; [ENTER]
                                                                        0.4


                                                                        0.3
        >>     plot(x, sin(x).*cos(x),’o’);
                                                                        0.2
               [ENTER]
                                                                        0.1


                                                                         0


                                                                       −0.1


                                                                       −0.2


                                                                       −0.3


                                                                       −0.4


                                                                       −0.5
                                                                          −4   −3    −2      −1   0   1   2   3   4




    Tecleamos el siguiente fichero:


n=50;                                                          % Asignamos valores a las variables
a=0;
b=3;
x=linspace(a,b,n);                                             % Construimos el vector x
e1=exp(-x.^2);                                                 % y los vectores de abcisas
e2=(x.^2).*exp(-x.^2);
e3=x.*exp(-x.^2);
e4=exp(-x);
plot(x,e1,’+’,x,e2,’*’,x,e3,’o’,x,e4,’x’);                     % Dibujamos las gr’aficas




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                23
3.1 Gr´ficos de dos dimensiones
      a                                                                                                                                   m
                                                                                                                                          at




                                                                             1



    La ejecuci´n del fichero anterior desde la ventana de MATLAB
              o
                                                                            0.9



    nos muestra como se pueden superponer varias gr´ficas, en
                                                   a                        0.8

                                        2         2         2
    concreto las de las funciones   e−x , x2 e−x , x e−x y e−x ,            0.7



    diferenci´ndolas mediante distintos estilos de l´
             a                                      ınea.                   0.6


                                                                            0.5


                                                                            0.4


                                                                            0.3


                                                                            0.2


                                                                            0.1


                                                                             0
                                                                                  0       0.5       1       1.5       2       2.5    3




3.1.3       Otros comandos
Concluimos la secci´n con dos comandos gr´ficos de uso frecuente en MATLAB. El primero de ellos es el comando
                   o                     a
errorbar, que nos permite incorporar a la gr´fica, mediante barras verticales, el error cometido. Este comando se
                                            a
usa como el comando plot, pero con un argumento m´s que indica el margen de error. En concreto:
                                                   a

                                    Argumentos                  Explicaci´n
                                                                         o
                                                                Ejecuta plot(x,y,cad) superponiendo las barras de error
                                    x, y, e ∈ I n ,
                                               R
                                                                dadas por el vectore (de valores positivos) sim´tricamente
                                                                                                               e
     errorbar(x,y,e,cad)            cad es una
                                                                por encima y por debajo de la gr´fica. El argumento cad es
                                                                                                a
                                    variable cadena
                                                                opcional.
                                    x, y, e ∈ I n ,
                                               R                Ejecuta   plot(x,y,cad), superponiendo en la gr´fica corre-
                                                                                                               a
     errorbar(x,y,u,e,cad)          cad es una                  spondiente las barras de error dadas por los vectores positivos
                                    variable cadena             u (las cotas superiores) y l (las cotas inferiores).

    En este ejemplo generamos una serie de datos con cotas de               3.5

    error de un 15%. Mostramos la gr´fica con los errores como
                                    a
    sigue                                                                    3




        >>     x=linspace(0,10,50); [ENTER]
                                                                            2.5




        >>     y=exp(sin(x)); [ENTER]                                        2



        >>     delta=0.15*y; [ENTER]                                        1.5


        >>     errorbar(x,y,delta); [ENTER]
                                                                             1




                                                                            0.5




                                                                             0
                                                                             −2       0         2       4         6       8     10   12




                                fplot, que nos permite dibujar funciones, especificadas mediante ’fcn’. Estas
    El segundo de los comandos es
pueden ser predefinidas por MATLAB o definidas por el usuario, en este caso ’fcn’ indica una referencia a un M-file
de nombre fcn.m. M´s concretamente,
                    a




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                    24
3.2 Gr´ficos con n´meros complejos
      a          u                                                                                                                                                m
                                                                                                                                                                  at




                                      Argumentos                 Explicaci´n
                                                                          o
                                                                 Dibuja el gr´fico de la funci´n especificada en la cadena
                                                                             a               o
                                      lim ∈ I 2 ,
                                            R
      fplot(’fcn’, lim, cad)                                     fcn en el intervalo de abcisas determinado por lim.
                                      ’fcn’, cad cadenas
                                                                 La cadena cad que indica el estilo de l´
                                                                                                        ınea es opcional.
                                      lim ∈ I 4 ,
                                            R                    Idem que el anterior pero lim determina tambi´n las
                                                                                                                   e
      fplot(’fcn’, lim, cad)
                                      ’fcn’, cad cadenas         ordenadas.
                                      lim ∈ I (2 ´ 4) ,
                                            R o
      fplot(’fcn’, lim, cad,                                     En las mismas condiciones, pero especificando la pre-
                                      tol ∈ I
                                            R,
      tol)                                                       cisi´n con
                                                                     o                          tol que por defecto es 2e − 3.
                                      ’fcn’, cad cadenas

    Dibujemos la funci´n seno en el intervalo
                      o                         [0, 10]:                    1



         >>    fplot(’sin(x^2)’, [0 10]) [ENTER]                           0.8


                                                                           0.6


                                                                           0.4


                                                                           0.2


                                                                            0


                                                                          −0.2


                                                                          −0.4


                                                                          −0.6


                                                                          −0.8


                                                                           −1
                                                                                 0          1         2      3   4       5         6       7    8    9       10



    Destaquemos que MATLAB obtiene autom´ticamente la escala de los ejes de la gr´fica, utilizando el m´
                                        a                                        a                    ınimo y el
m´ximo de los datos, tanto en el eje de las ordenadas como en el de las abcisas. Para modificar dicha escala podemos
 a
utilizar el comando   axis (ver secci´n 3.4).
                                     o



3.2      Gr´ficos con n´ meros complejos
           a          u
                                  Dibuja en coordenadas polares.                               tetha son los
                                                                         Los elementos del vector
 polar(theta,r)
                                                                                r son las distancias al origen.
                                  ´ngulos en radianes, y los elementos del vector
                                  a
                                  Convierte las coordenadas polares dadas por theta y r en coordenadas car-
 pol2cart(theta,r)
                                  tesianas.

    Vamos a ver dos ejemplos.

    >>     r = linspace(0,2); [ENTER]                               2


    >>     theta = linspace(0,10*pi); [ENTER]                      1.5


    >>     [x,y] = pol2cart(theta,r); [ENTER]                       1


    >>     z = x+i*y; [ENTER]                                      0.5

    >>     plot(z); [ENTER]
                                                                    0



                                                                  −0.5



                                                                   −1



                                                                  −1.5



                                                                   −2
                                                                    −2               −1.5        −1       −0.5       0       0.5       1       1.5       2




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                                            25
3.2 Gr´ficos con n´meros complejos
      a          u                                                                                                                           m
                                                                                                                                             at




    En el segundo de los ejemplos dibujaremos la funci´n
                                                      o

                                                                            t5
                                          r = ecost − 2 cos 4 t + sin
                                                                            12
tanto en coordenadas polares como en coordenadas cartesianas.
                                                                                                        90     5.0543
                                                                                                  120              60


         >>    t = linspace(0,22*pi,1100);[ENTER]                                           150               2.5272    30



         >>    r = exp(cos(t))-2*cos(4*t)+sin(t.5 /12);[ENTER]                             180                               0



         >>    polar(t,r);[ENTER]                                                           210                         330

                                                                                                  240             300
         >>    [x,y] = pol2cart(t,r);[ENTER]                                                            270



         >>    plot(x,y);[ENTER]                                        4


                                                                        2


                                                                        0


                                                                     −2


                                                                     −4
                                                                      −3         −2   −1            0            1               2   3   4




    Un vector de n´meros complejos pueden ser dibujado tambi´n con los comandos
                  u                                         e                                       quiver, feather, compass y
rose, tal y como se detalla a continuaci´n.
                                        o

                                   Dibuja una flecha para cada par de coordenadas dadas. Muestra el argumento
     quiver(x,y)
                                   y magnitud del n´mero complejo que tiene ese par de coordenadas reales.
                                                   u
                                   Dibuja una flecha en las coordenadas  (xi , yi ) con el argumento y magnitud
     quiver(x,y,dx,dy)
                                   dados por(dxi , dyi ).
                                   El par´metro s indica la escala con la que se dibujan las flechas, que por
                                         a
     quiver(x,y, ...,s)
                                   defecto toma el valor 1.
                                   Dibuja flechas mostrando las magnitudes y argumentos de los elementos de
     feather(z)
                                   la matriz complejaz , estas flechas parten de puntos equidistantes del eje x.
                                   Como   feather pero en este caso todas ellas tienen como origen el origen de
     compass(Z)
                                   coordenadas.
                                   Dibuja un histograma de ´ngulos, es decir, un histograma circular mostrando
                                                           a
     rose(v,n)                     la frecuencia de los ´ngulos dados en el vector
                                                        a                           v ; se utilizan n intervalos. En
                                   el caso de no especificar   n, el valor por defecto es 36.
    Veamos algunos ejemplos. Sea   Z la matriz compleja definida como:
                                                                      
                                                 1+i      2 − i 3 − 5i
                                       Z =  −4 + 3 i 5 − 5 i       i  
                                                −1 − i 3 + 3 i     −1

Los siguientes comandos producen en la misma ventana las diferentes gr´ficas.
                                                                      a



    >>     Z=[1+i 2-i 3-5*i; -4+3*i 5-5*i i ;-1-i 3+3*i -1]; [ENTER]
    >>     clf; [ENTER]
    >>     subplot(2,2,1); quiver(real(Z),imag(Z)); title(’quiver’); [ENTER]
    >>     subplot(2,2,2); feather(Z); title(’feather’); [ENTER]
    >>     subplot(2,2,3); compass(Z); title(’compass’); [ENTER]
    >>     subplot(2,2,4); rose(angle(Z(:))); title(’rose’); [ENTER]



Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                       26
3.3 Gr´ficos en otros sistemas coordenados
      a                                                                                                                       m
                                                                                                                              at




                               quiver                                                 feather
       3.5                                                           4

        3
                                                                     2
       2.5

        2                                                            0

       1.5                                                         −2
        1
                                                                   −4
       0.5

        0                                                          −6
             0          1        2             3              4     −5            0              5                 10


                              compass
                                90 7.0711                                              rose 2
                                                                                        90
                        120            60                                       120                  60

                  150                 3.5355        30                    150                1            30



                 180                                      0              180                                   0



                  210                              330                    210                             330

                        240               300                                   240              300
                                270                                                    270




3.3      Gr´ficos en otros sistemas coordenados
           a
El comando         plot dibuja gr´ficos en coordenadas cartesianas; sin embargo, tambi´n es posible utilizar otros sistemas
                                 a                                                   e
de coordenadas.

                                               Utiliza coordenadas logar´
                                                                        ıtmicas en el eje x. El resultado es el mismo que
      semilogx(x,y)                            utilizarplot(log10(x),y) pero no produce ning´n error si tenemos que
                                                                                            u
                                               calcular log10 0.
                                               Es el mismo comando anterior, pero esta vez la escala logar´
                                                                                                          ıtmica est´ en el
                                                                                                                    a
      semilogy(x,y)
                                               eje y.
      loglog(x,y)                              Dibuja ambos ejes en escala logar´
                                                                                ıtmica.

    Como ejemplo dibujemos un gr´fico en un sistema de coordenadas logar´
                                a                                      ıtmicas y lo comparamos con el mismo
gr´fico en coordenadas cartesianas.
  a




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                        27
3.4 Controlando los gr´ficos
                      a                                                                                              m
                                                                                                                     at




         >>    x=linspace(0,7); [ENTER]
                                                                       1200
         >>    y=exp(x); [ENTER]                                       1000

         >>    subplot(2,1,1); plot(x,y); [ENTER]                      800


         >>    subplot(2,1,2); semilogy(x,y);                          600


               [ENTER]
                                                                       400

                                                                       200

                                                                         0
                                                                              0   1   2      3       4      5        6        7



                                                                          4
                                                                        10


                                                                          3
                                                                        10


                                                                          2
                                                                        10


                                                                          1
                                                                        10


                                                                          0
                                                                        10
                                                                              0   1   2      3       4      5        6        7




3.4      Controlando los gr´ficos
                           a
Los gr´ficos en MATLAB son objetos y los comandos que mostramos en esta secci´n son algunos de los que se utilizan
      a                                                                     o
para definir y modificar esos objetos y el entorno en el que se crean.

      figure(gfc)                   Permite mostrar la ventana gr´fica actual y crear nuevas ventanas gr´ficas.
                                                                 a                                     a
      clf                           Borra el contenido la ´ltima ventana gr´fica utilizada.
                                                          u                a
      delete(n)                     Borra la ventana gr´fica
                                                       a      n.
      clc                           Borra la ventana de comandos sin borrar la memoria.
      home                          Mueve el cursor hacia la esquina izquierda superior de la ventana de comandos.
                                    Permite superponer gr´ficos hasta que se desactiva la opci´n con el comando
                                                         a                                   o
      hold on
                                    hold off.
      hold off                      Desactiva la opci´n
                                                     o  hold on.
      hold                          Intercambia las opciones hold on a hold off y viceversa.
                                    Es un comando l´gico que devuelve 1 si para el actual gr´fico est´ activada
                                                   o                                        a       a
      ishold
                                    la opci´n
                                           o    hold on ´ 0 en caso contrario.
                                                        o

    Un comando de uso muy frecuente es      subplot, que se utiliza para dibujar en la misma ventana gr´fica varios
                                                                                                       a
dibujos. Este comando no dibuja nada, pero permite dividir la ventana gr´fica en varias subventanas y dibujar en cada
                                                                        a
una de ellas con cualquiera de los comandos vistos anteriormente y de los que veremos posteriormente.

                                    Divide la ventana gr´fica en
                                                        a          m filas y n columnas y hace que la subventana
      subplot(m,n,p)                p sea la actual. Las ventanas se numeran desde la izquierda a la derecha y
                                    desde arriba hacia abajo. Tambi´n puede ser utilizado como subplot(mnp).
                                                                   e
      subplot                       Pasa la ventana gr´fica a su estado por defecto (subplot(1,1,1)) .
                                                       a

    Los siguientes comandos dibujan la funci´n
                                            o     f (x) = −x · sin x, en la ventana superior izquierda, su derivada en
la ventana superior derecha, una aproximaci´n de la derivada en la ventana inferior izquierda y el error relativo en la
                                           o
ventana inferior derecha.



    >>     x=linspace(-10,10,1000); [ENTER]
    >>     y11=(-x).*sin(x); [ENTER]
    >>     y12=(-x).*cos(x)-sin(x); [ENTER]


Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                   28
3.4 Controlando los gr´ficos
                      a                                                                                                m
                                                                                                                       at




    >>       y21=diff(y11)./(x(2)-x(1)); [ENTER]
    >>       y22=(y21-y12(1:999))./norm(y12); [ENTER]
    >>       subplot(2,2,1); plot(x,y11); title(’La funcion’); [ENTER]
    >>       subplot(2,2,2); plot(x,y12); title(’La derivada’); [ENTER]
    >>       subplot(2,2,3); plot(x(1:999),y21); title(’Aproximacion a la derivada’) [ENTER]
    >>       subplot(2,2,4); plot(x(1:999),y22); title(’Error relativo cometido’) [ENTER]
                      La funcion                                     La derivada
         6                                       10

         4
                                                  5
         2

         0
                                                  0
       −2

       −4
                                                 −5
       −6

       −8                                        −10
       −10     −5          0         5      10    −10         −5         0          5    10


               Aproximacion a la derivada                −4    Error relativo cometido
                                                      x 10
       10                                         8

                                                  6
         5
                                                  4

         0                                        2

                                                  0
       −5
                                                 −2

      −10                                        −4
       −10     −5          0         5      10   −10          −5         0          5    10


    Las subventanas definidas por el comando             subplot pueden ser de diferentes tama˜os dentro de la misma ventana
                                                                                             n
como muestra el siguiente ejemplo.
    Editamos un fichero M-file para calcular el fractal de Mandelbrot y mostrarlo de tres formas diferentes. El programa
parte de una red de puntos definida por el usuario en el plano complejo e itera con cada n´mero ξ de la red de acuerdo
                                                                                          u
con el siguiente algoritmo:

                                                                z0     = 0
                                                                          2
                                                              zi+1     = zi + ξ.

El programa asigna al punto de la red que estamos calculando el n´mero de iteraciones (con un m´ximo de
                                                                 u                             a                 100) que
hacen falta para que los t´rminos de la sucesi´n disten del l´
                          e                   o              ımite menos que una cantidad         ε > 0. Se genera de esta
manera una matriz       mandelbrot del mismo tama˜o que la red.
                                                 n


function      y = mandelb(renum,imnum)                                 % Programa Mandelbrot

epsilon=1e-14;
renum=input(’renum:                ’);                                 % Lee el numeros de nodos en el eje real
imnum=input(’imnum:                ’);                                 % Lee el numeros de nodos en el eje imaginario

remin=-2; remax=1 ; immin=-1.5; immax=1.5;                             % Define los parametros de la red
reval1= linspace(remin,remax,renum);
imval1= linspace(immin,immax,imnum);                                   % Define vectores del tama~no correcto
[Reval, Imval]=meshgrid (reval1,imval1);                               % Define la red de puntos
Imvalreal=Imval;


Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                  29
3.4 Controlando los gr´ficos
                      a                                                                    m
                                                                                           at




Imval=Imval*i;
Cgrid=Reval+Imval;


for reind=1:renum
   disp([’reind=’,int2str(reind)]);          % Indica en que nodo estamos
   for imind= 1:imnum
      c=Cgrid(reind,imind);
      numc=0;
      zold=0.0+0.0*i;
      z=zold^2+c;

        while(abs(z) <= 2) & (abs(z-zold) >= epsilon) & ...
             (numc < 100)
             numc=numc+1;
             zold=z;
             z=zold^2+c;
        end

         Mandelbrot(reind,imind)= numc;
      end
end

% Mostramos la matriz de Mandelbrot de tres formas diferentes

clf;                                         %   Borra la figura
%whitebg(’k’);                               %   Fondo negro
subplot(2,2,1);                              %   Esquina superior izquierda
mesh(reval1,imval1,Mandelbrot);              %   Dibuja la red en tres dimensiones

axis([-2 1 -1.5 1.5 0 100])                   % Cambia los limites de los ejes

subplot(2,2,2);
contour(reval1, imval1, Mandelbrot, 100)      % Dibuja la red como un contorno

subplot(2,1,2);                               % Figura inferior, dibuja solo una
surf(Reval,Imvalreal, Mandelbrot);            % Dibuja la red como una superficie

view(2);                                     % Punto de vista abajo.

shading flat;                                % Determina que cada ret’{i}culo tiene
un color colormap(flipud(jet));                       % Define el mapa de colores.

colorbar; axis([-2 1 -1.5 1.5]);              % Dibuja la barra de colores al lado del gr’afico




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                      30
3.4 Controlando los gr´ficos
                      a                                                                                                        m
                                                                                                                               at




                                                                                       1.5

                                           100                                          1

                                                                                       0.5
                                            50
                                                                                        0

                                                                                      −0.5
                                             0
                                                  1                               1    −1
                                                      0                    0
                                                          −1          −1              −1.5
                                                                 −2                      −2   −1    0   1



                                            1.5                                                         100

                                             1                                                          80
                                            0.5
                                                                                                        60
                                             0
                                                                                                        40
                                           −0.5

                                            −1                                                          20

                                           −1.5                                                         0
                                              −2          −1.5        −1       −0.5      0    0.5   1




    Los ejes de cada dibujo son escalados autom´ticamente para mostrar todos los puntos en la ventana. Puede ocurrir
                                               a
que no se vean algunos de los puntos, porque coinciden con los ejes, pues bien, el comando              axis nos permite modificar
la escala de los ejes.

                                    Devuelve los l´
                                                  ımites del dibujo actual en un vector fila. Para gr´ficos de dos
                                                                                                    a
     axis                           dimensiones tiene los elementos [xmin xmax ymin ymax ] y para gr´ficos de
                                                                                                    a
                                    tres dimensiones [xmin xmax ymin ymax zmin zmax ].
                                    Establece    la   escala  de    los    ejes    conforme  al   vector   v
                                    que     ser´
                                               a    [xmin xmax ymin ymax ]      en    dos   dimensiones    o
     axis(v)
                                    [xmin xmax ymin ymax zmin zmax ] en tres dimensiones (en escala lo-
                                    gar´
                                       ıtmica, tambi´n se utilizan valores actuales, no logar´
                                                    e                                        ıtmicos).
                                    Bloquea la escala cuando se a˜aden dibujos posteriores a uno que se ha
                                                                 n
     axis(axis)
                                    mantenido con el comando                   hold.
                                    Obtenemos diferentes resultados dependiendo de la cadena                  cad utilizada:

                                       • ’auto’ Vuelve a la escala autom´tica.
                                                                        a

                                       • ’equal’ Da la misma escala en ambos ejes.

                                       • ’ij’ Intercambia la parte positiva y negativa del eje y.

                                       • ’xy’ Deshace el anterior.

                                       • ’image’ Igual que equal pero se ajusta al dibujo.
     axis(cad)
                                       • ’square’ Modifica la ventana gr´fica para hacer que la caja del dibujo
                                                                       a
                                          sea cuadrada.

                                       • ’normal’ Modifica la ventana gr´fica para que la caja del dibujo vuelva
                                                                       a
                                          al tama˜o habitual.
                                                 n

                                       • ’off’ No se muestran los ejes.

                                       • ’on’ Deshace el comando anterior.


    Tambi´n podemos cambiar la escala por medio del rat´n y ello es posible gracias al comando
         e                                             o                                                        zoom que se utiliza
como se muestra a continuaci´n.
                            o




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                          31
3.4 Controlando los gr´ficos
                      a                                                                                                                       m
                                                                                                                                              at




                                    Permite agrandar la ventana con el bot´n izquierdo del rat´n, inhabilit´ndolo
                                                                          o                   o            a
     zoom on                        con el bot´n derecho. Tambi´n permite seleccionar un ´rea para visualizarla
                                              o                e                         a
                                    mejor.
     zoom off                       Deshace el comando anterior.
     zoom                           Intercambia las posiciones de   zoom.
     zoom out                       Establece la escala.

    Con los siguientes comandos representaremos el c´
                                                    ırculo unidad en diferentes escalas:

        >>     t=0:0.2:2*pi+0.2; [ENTER]
        >>     x=sin(t); [ENTER]                                        1

        >>     y=cos(t); [ENTER]                                       0.5


        >>     subplot(3,1,1); [ENTER]                                  0

                                                                      −0.5
        >>     plot(x,y,’-’); [ENTER]                                  −1
                                                                        −1   −0.8     −0.6        −0.4     −0.2   0   0.2     0.4       0.6     0.8   1
        >>     subplot(3,1,2); [ENTER]                                                                     1

        >>     plot(x,y,’-’); [ENTER]                                                                     0.5

                                                                                                           0
        >>     axis square; [ENTER]                                                                      −0.5

        >>     subplot(3,1,3); [ENTER]                                                                    −1
                                                                                                           −1     0    1

        >>     plot(x,y,’-’); [ENTER]
                                                                        2
        >>     axis normal; [ENTER]
                                                                        0
        >>     grid; [ENTER]
                                                                       −2
        >>     axis([-2 2 -3 3]); [ENTER]                               −2     −1.5          −1          −0.5     0     0.5         1         1.5     2




    En en el ejemplo anterior hemos utilizado el comando   grid que describimos a continuaci´n.
                                                                                            o

     grid on                        Dibuja una red en la ventana gr´fica.
                                                                   a
     grid off                       Borra la red de la ventana gr´fica.
                                                                 a
     grid                           Intercambia las posiciones de   grid.
    En muchas ocasiones necesitamos incluir texto en la ventana gr´fica para lo que podemos utilzar varios comandos.
                                                                  a




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                         32
3.4 Controlando los gr´ficos
                      a                                                                                                 m
                                                                                                                        at




       title(txt)                    Escribe la variable cadena   txt como un t´
                                                                               ıtulo centrado encima del gr´fico.
                                                                                                           a
       xlabel(txt),
                                     Escribe la variable cadena   txt como una etiqueta bajo el eje x, y y z respec-
       ylabel(txt),
                                     tivamente.
       zlabel(txt)
                                     Escribe la variable cadena  txt en la posici´n (x, y) de la ventana gr´fica.
                                                                                    o                          a
                                     Las coordenadas   x e y est´n proporcionadas en las mismas unidades en las
                                                                 a
                                     que est´ dibujado el gr´fico. Si x e y son vectores, la variable cadena se
                                             a               a
       text(x,y,txt)
                                     escribe en todos los pares de puntos (xi , yi ). Si txt es un vector de variable
                                     cadenas con el mismo n´mero de filas que x e y, se escribe una de ellas en
                                                              u
                                     cada una de las posiciones.
                                     Escribe la variable cadena   txt en la posici´n de la ventana de gr´ficos que
                                                                                  o                     a
       gtext(txt)                    elija el usuario. Una cruz indica la posici´n donde se quiere colocar el texto
                                                                                o
                                     y es seleccionada mediante las teclas de desplazamiento o mediante el rat´n.
                                                                                                              o
                                     Escribe en un peque˜o recuadro, las variables cadenas
                                                        n                                     st1, st2, etc, al lado
       legend(st1,st2, ...)          de los estilos de linea utilizados en cada una de las gr´ficas. Este peque˜o
                                                                                             a                n
                                     recuadro puede moverse mediante el rat´n.
                                                                           o
       legend(l1,st1,
                                     Escribe una leyenda pero se especifican los estilos de l´
                                                                                            ınea.
       l2,st2, ...)
       legend off                    Elimina la leyenda del dibujo actual.

    Tambi´n hay comandos que convierten los n´meros en variable cadenas,
         e                                   u                                    num2str, int2str, sprintf, ... que
pueden ser ´tiles y algunas veces necesarias para utilizarlos juntos con estos comandos de texto.
           u
    El siguiente programa dibuja un camino aleatorio (mediante la funci´n
                                                                       o        rand). Este camino se puede considerar
como una simulaci´n del movimiento de una part´
                 o                            ıcula en el aire.


function y=particle(n)
% Camino aleatorio. Una particula empieza en el origen, y se mueve
% aleatoriamente hacia otra direccion en cada paso.

x=cumsum(rand(n,1)-0.5); % Valores aleatorios de x
y=cumsum(rand(n,1)-0.5); % Valores aleatorios de x

clf;

plot(x,y);
hold on;

plot(x(1),y(1),’o’,x(n),y(n),’o’);

axs=axis;
scale=axs(2)-axs(1);

text(x(1)+scale/30,y(1),’Inicio’);
text(x(n)+scale/30,y(n),’Fin’);

hold off;

xlabel(’x’); ylabel(’y’); title(’Random walk’);

    El resultado es el siguiente gr´fico.
                                   a


Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                  33
3.4 Controlando los gr´ficos
                      a                                                                                                  m
                                                                                                                         at




                                                                     Random walk
                                               2




                                               1

                                                              Fin


                                               0
                                                                                                    Inicio



                                              −1




                                          y
                                              −2




                                              −3




                                              −4
                                               −9   −8   −7     −6   −5       −4   −3   −2    −1     0
                                                                          x




    Los comandos    ginput y waitforbuttonpress proporcionan al programador de MATLAB herramientas para crear
programas interactivos simples.

                                   Lee las coordenadas desde la ventana de gr´ficos. Aparece un cursor que se
                                                                             a
                                   maneja bien con el rat´n o bien con las teclas de desplazamiento vertical y
                                                         o
     [x,y]=ginput                  horizontal. Presionado una tecla o un bot´n del rat´n se env´ las coorde-
                                                                            o         o        ıan
                                   nadas a MATLAB que las almacena en los vectores           x e y. El proceso termina
                                   cuando se presiona la tecla [RETURN].
     [x,y]=ginput(n)               Lee   n coordenadas de la ventana gr´fica.
                                                                       a
                                   Detiene el dibujo de gr´ficos hasta que se presiona una tecla o un bot´n del
                                                          a                                             o
     waitforbuttonpress
                                   rat´n.
                                      o

    El siguiente programa dibuja un gr´fico con puntos especificados por el usuario. Cuando el dibujo termina, el
                                      a
programa espera que el usuario haga clic en la figura antes de borrarlo.


n=figure;                                     % nueva ventana grafica;
disp(’Para dibujar una poligonal en la figura:’);
disp(’presiona el boton izqdo para empezar,’);
disp(’Para parar presiona el boton dcho’);

[x,y,t]=ginput(1);
plot(x,y,’o’)
xx=x;yy=y;
hold; axis([0 1 0 1]);                                        % superponer el grafico y se establecen
                                                              % los ejes
while t~=3
    [x,y,t]=ginput(1);
    plot(x,y,’o’)
    xx=[xx x];
    yy=[yy y];
end
clf; line(xx,yy);
disp(’Aprieta en la figura cuando este terminado’)
waitforbuttonpress
delete(n);


Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                   34
3.5 Dibujando curvas de nivel                                                                                                                          m
                                                                                                                                                       at




3.5      Dibujando curvas de nivel
Las curvas de nivel de una funci´n en dos variables se pueden dibujar en dos y tres dimensiones gracias al comando
                                o
contour en el primero de los casos y al comando contour3 en segundo. Estos dos comandos s´lo pueden ser utilizados
                                                                                         o
sobre una red rectangular previamente definida.

                                   Dibuja las curvas de nivel de la matriz  Z, en n niveles. Si no se especifica
                                   n se dibujan 10 niveles. Los elementos se interpretan como niveles sobre el
      contour(Z,n,cad)
                                   plano XY .
                                   cad es opcional y especifica el estilo de linea.
      contour(Z,v)                 Dibuja los niveles especificados en el vector v.
                                   En las mismas condiciones que el comando anterior, pero se especifica la red
      contour(x,y,Z,n,v)
                                   sobre la que se va a dibujar la gr´fica
                                                                     a      x × y y la escala de los ejes.
                                   Calcula la matriz   C de contorno sin dibujar las lineas de contorno, utiliz´ndose
                                                                                                               a
      contourc
                                   los mismos par´metros que en los casos anteriores.
                                                 a
                                   Dibuja las curvas de nivel en tres dimensiones utiliz´ndose los mismos
                                                                                        a
      contour3
                                   par´metros que en los casos anteriores.
                                      a
                                   Escribe los valores de los niveles que representan las curvas de nivel. Las po-
                                   siciones son aleatorias.   C es la matriz que devuelven los comandos contour
      clabel(C)                    y   contour3.
                                   Se pueden especificar los niveles, con un vector                   v y tambi´n se puede realizar
                                                                                                              e
                                   manualmente indic´ndolo con la etiqueta ’manual’.
                                                    a

    Los siguientes comandos nos dan las curvas de nivel de una matriz que describe la superficie de una funci´n de dos
                                                                                                            o
variables.



        >>      [x,y]=meshgrid(-3:1/8:3);
               [ENTER]
        >>     Z=peaks(x,y).*sin(x); [ENTER]
        >>     subplot(2,1,1); [ENTER]
                                                               40
        >>     v1=-4:-1; [ENTER]
                                                               30
        >>     v2=0:4; [ENTER]
                                                               20
        >>     contour(Z,v1,’k-’); [ENTER]
                                                               10
        >>     hold on; [ENTER]
        >>     contour(Z,v2,’k--’); [ENTER]                          5     10           15          20        25        30        35         40   45



        >>     hold off; [ENTER]
                                                                                                    −1
        >>     subplot(2,1,2); [ENTER]                         40
                                                                                                 −2 −3                        3   2
                                                                                                                                      1


                                                                                             1
        >>     C=contour(Z); [ENTER]                           30               2                                  0
                                                                                                         −1                       3
        >>     clabel(C); [ENTER]                              20                       0          −2
                                                                                                         1               −3           −1 0
                                                                                                                   −2
                                                               10
                                                                                    0

                                                                     5     10           15          20        25        30        35         40   45




    Como puede verse hemoos utilizado el comando       peaks que genera una matriz trasladando y reescalando la distri-
buci´n gaussiana en dos dimensiones.
    o



Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                                 35
3.5 Dibujando curvas de nivel                                                                                          m
                                                                                                                       at




    En ocasiones puede ser necesario definir una determinada red para dibujar las curvas de nivel de una matriz       Z . El
dominio se define mediante dos vectores       x e y de longitudes n y m, respectivamente, para los valores de la red. En la
siguiente tabla se muestran los comandos que nos permieten construir dichas redes, incluso en tres dimensiones, sobre
un cilindro o sobre una esfera.

                                       Comando que obtiene la red adecuada para hacer gr´ficas tridimensionales a
                                                                                        a
       [U,V]=meshgrid(x,y)
                               partir de los vectores x e y.
       [U,V,W]=meshgrid(x,y,z) Obtiene una red tridimensional.
                                       Devuelve las matrices correspondientes para la superficie de un cilindro o un
                                       cono. Los radios del cilindro se toman del vector r, que contienen los radios
       [X,Y,Z]=cylinder(r,n)
                                       en  n puntos equidistantes en el eje del cilindro. Si no se especifica n, se
                                       utiliza n = 20.
       [x,y,z]=sphere(n)               Devuelve n coordenadas igualmente espaciadas sobre una esfera unidad.

    Como ejemplo de uso del comando         meshgrid dibujaremos las curvas de nivel de las siguientes funciones:
  1)   f (x, y) = sin x sin y , x, y ∈ [0, π] × [0, π].
  2)   f (x, y) = x − 0.5 x3 + 0.2 y 2 + 1 , x, y ∈ [−3, 3] × [−3, 3].
                    sin x2 + y 2
  3)   f (x, y) =                , x, y ∈ [−8, 8] × [−8, 8].
                       x2 + y 2
La primera parte del programa genera la red y eval´a la funci´n, la segunda parte dibuja las l´
                                                  u          o                                ıneas de contorno.


x=0:0.2:3*pi;
y=0:0.25:5*pi;

[XX,YY]=meshgrid(x,y);
z1=sin(XX).*sin(YY);

x=-3:0.25:3;
y=x;

[XX,YY]=meshgrid(x,y);
z2=XX-0.5*XX.^3+0.2*YY.^2+1;

x=-8:0.5:8;
y=x;

[XX,YY]=meshgrid(x,y);
r=sqrt(XX.^2+YY.^2)+eps;
z3=sin(r)./r;
clf

subplot(2,2,1); contour(z1);
title(’sen(x)*sen(y)’);
subplot(2,2,2); contour(x,y,z3);
title(’sen(r)/r’);
subplot(2,2,3); contour3(z2,15);
title(’x-0.5 x^3 + 0.2 y^2 + 1’);
subplot(2,2,4); contour3(x,y,z3);
title(’sen(r)/r’);

Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                  36
3.6 Gr´ficos en 3-D
      a                                                                                                                                                      m
                                                                                                                                                             at




    El resultado es el siguiente gr´fico.
                                   a


                                                        sen(x)*sen(y)                                             sen(r)/r
                                                                                                8
                               60
                                                                                                6
                               50
                                                                                                4
                               40                                                               2

                               30                                                               0
                                                                                               −2
                               20
                                                                                               −4
                               10                                                              −6
                                                                                               −8
                                              10         20         30        40                        −5           0                5


                                                   x−0.5 x3 + 0.2 y2 + 1                                          sen(r)/r


                               20                                                              1

                               10                                                             0.5

                                0                                                              0

                              −10                                                            −0.5
                               25
                                    20                                                  25          5
                                         15                                        20                   0                                 5
                                              10                              15                                                  0
                                                    5                    10                                  −5
                                                                5                                                        −5



    Una informaci´n m´s completa de las curvas de nivel la podemos conseguir si adem´s dibujamos el gradiente de la
                 o   a                                                              a
superficie, que se obtiene gracias a la funci´n
                                            o                    gradient.

    >>      [X,Y]=meshgrid(-pi/2:0.1:pi/2,-pi:0.2:pi);
           [ENTER]
    >>     Z=abs(sin(Y).*cos(X)); [ENTER]
    >>      [DZDX,DZDY]=gradient(Z,.1,0.2);                                                    30

           [ENTER]
    >>     contour(Z); [ENTER]                                                                 25

    >>     hold on; [ENTER]
    >>     quiver(DZDX,DZDY); [ENTER]                                                          20


    >>     hold off; [ENTER]
                                                                                               15




                                                                                               10




                                                                                                5




                                                                                                             5               10               15   20   25   30




3.6      Gr´ficos en 3-D
           a
Existen varios comandos que nos permiten dibujar superficies en tres dimensiones. El primero de ellos es el comando
plot3.




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                                        37
3.6 Gr´ficos en 3-D
      a                                                                                                                               m
                                                                                                                                      at




                                       Dibuja un gr´fico 3-D que pasa por las coordenadas de los vectores
                                                   a                                                      x1, y1,
                                       z1. La selecci´n del estilo de l´
                                                     o                 ınea es opcional y se elige con cad. Todos
       plot3(x1,y1,z1,cad)
                                       los vectores deben tener la misma longitud. Este comando permite dibujar
                                       varios gr´ficas a la vez en la misma ventana gr´fica.
                                                a                                    a
                                       Dibuja gr´ficos para cada columna de las matrices
                                                a                                                X, Y y Z, las cuales deben
       plot3(X,Y,Z)
                                       tener el mismo tama˜o.
                                                          n

    El ejemplo siguiente muestra la simulaci´n de un camino aleatorio en tres dimensiones.
                                            o



         >>    x=cumsum(rand(1,n)-0.5);
               [ENTER]
         >>    y=cumsum(rand(1,n)-0.5);
               [ENTER]
         >>    z=cumsum(rand(1,n)-0.5);
               [ENTER]
         >>    plot3(x,y,z); [ENTER]                         0.5

         >>    text(x(1), y(1), z(1),                         0

               ’Inicio’); [ENTER]                           −0.5
                                                                                                             Inicio

         >>    text(x(n), y(n), z(n),                        −1

               ’Fin’); [ENTER]                              −1.5

                                                             −2
                                                                                                  Fin
                                                            −2.5

                                                             −3
                                                              3

                                                                      2                                                               2
                                                                                                                             1
                                                                            1
                                                                                                                      0
                                                                                  0
                                                                                                        −1
                                                                                       −1   −2

    El texto de las figuras en tres dimensiones se inserta de la misma forma que en dos dimensiones, tal y como se
puede ver en el ejemplo anterior.
    El segundo comando que presentamos es el comando           mesh y algunas de sus variantes. Con este comando debemos
tener en cuenta las mismas consideraciones que para dibujar las curvas de nivel.

                                       Dibuja la matriz     Z como tercera coordenada sobre una red rectangular y
                                       conecta los puntos adyacentes creando una superficie.
       mesh(Z)
                                       Si se especifica la matriz      C cada punto se dibuja en el color especificado por
       mesh(Z,C)
                                       cada elemento de la matriz.
       mesh(U,V,Z,C)
                                       Si se especifican los valores de      U y V, dibuja la matriz Z sobre los nodos de
                                       la red formada por    U y V.
                                       Dibuja, con las mismas consideraciones que el caso anterior, una superficie
       meshc(...)
                                       incluyendo las curvas de nivel bajo el gr´fico.
                                                                                a
       meshz(...)                      Dibuja una superficie incluyendo una red de referencia en el plano                  XY .
                                       Mantiene las l´
                                                     ıneas traseras escondidas o no dependiedo que escribamos                    on
       hidden on-off
                                       u   off. Si s´lo se escribe el comando hidden cambia de uno a otro.
                                                    o

    Escribamos un programa de MATLAB para dibujar la superficie de las siguientes funciones:

  1)   f (x, y) = sin x sin y , (x, y) ∈ [0, π] × [0, π].

  2)   f (x, y) = x − 0.5 x3 + 0.2 y 2 + 1 , (x, y) ∈ [−3, 3] × [−3, 3].



Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                    38
3.6 Gr´ficos en 3-D
      a                                                                                                       m
                                                                                                              at




                    sin x2 + y 2
  3)   f (x, y) =                , (x, y) ∈ [−8, 8] × [−8, 8].
                       x2 + y 2

x=0:0.2:3*pi;
y=0:0.25:5*pi;

[XX,YY]=meshgrid(x,y);
z1=sin(XX).*sin(YY);

x=-3:0.25:3;
y=x;

[XX,YY]=meshgrid(x,y);
z2=XX-0.5*XX.^3+0.2*YY.^2+1;

x=-8:0.5:8;
y=x;

[XX,YY]=meshgrid(x,y);
r=sqrt(XX.^2+YY.^2)+eps;
z3=sin(r)./r;
clf

subplot(2,2,1); mesh(z1);
title(’sin(x)*sin(y)’);
subplot(2,2,2); meshz(z2);
title(’x-0.5*x^3+0.2*+y^2+1’);
subplot(2,2,3); waterfall(z2);
title(’x-0.5*x^3+0.2*+y^2+1’);
subplot(2,2,4); meshc(z3);
title(’sin(r)/r)’);


    El resultado es el siguiente gr´fico
                                   a


                            sin(x)*sin(y)                             x−0.5*x3+0.2*+y2+1


               1                                            20

                                                            10
               0
                                                             0

              −1                                           −10
             100                                            40
                                                      60                                                 30
                    50                           40              20                                 20
                                            20                                            10
                             0   0                                        0     0


                         x−0.5*x3+0.2*+y2+1                                   sin(r)/r)


              20                                             1

              10
                                                             0
               0

             −10                                           −1
              40                                           40
                                                      30                                                 40
                    20                           20              20
                                            10                                                 20
                             0   0                                        0     0




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                        39
3.6 Gr´ficos en 3-D
      a                                                                                                                   m
                                                                                                                          at




    Mostramos a continuaci´n otros comandos que nos permiten dibujar superficies mediante caras. Igual que en el
                          o
caso anterior, creamos la red y luego evaluamos la funci´n.
                                                        o

                                          Dibuja la superficie especificada por la red    X e Y, que toma los valores de
                                          Z. Si no se especifica la red, se dibuja en una red uniforme. Los colores se
     surf(X,Y,Z, C)
                                          definen por los elementos de la matriz Al igual que fill pero en tres C, si
                                          no se especifican se utiliza la matriz Z.
     surfc(X,Y,Z, C)                      Del mismo modo que surf excepto que dibuja las curvas de nivel.
                                          Del mismo modo que surf excepto que sit´a un foco de luz en el punto dado
                                                                                      u
     surfl(X,Y,Z, ls,r)                   por el vector ls. El vector r nos proporciona el tipo de luz que puede ser de
                                          los siguientes tipos: ambiente , difusi´n , especular e interior .
                                                                                 o
                                          Del mismo modo que surf pero dibuja las normales a la superficie si no
     [Nx,Ny,Nz] =
                                          se especifican los vectores Nx, Ny y Nz. En el caso de que se especifiquen
     surfnorm(X,Y,Z)
                                          solamente se almacenan los vectores normales.
                                          Devuelve el reflejo de una superficie difusa con componentes normales dadas
     diffuse(Nx,Ny,Nz,ls)
                             por los vectores Nx, Ny y Nz. El vector ls nos da la posici´n de la luz.
                                                                                        o
     specular(Nx,Ny,Nz,ls,v) Al igual que diffuse pero con reflejo especular.
                             Dibuja colores determinados como valores de los elementos de Z. Si se espe-
     pcolor(X,Y,Z)
                             cifican X e Y es igual que aplicar surf(X,Y,Z); view(2)
                                          ıgono con esquinas dadas por los vectores x e y. El pol´
                             Dibuja el pol´                                                       ıgono se
     fill(x,y,c)
                             rellena con el color dado por c.
     fill3(x,y,z,c)          dimensiones.

    Las escalas de color usadas por los comandos pueden ser ajustadas (secci´n 3.7).
                                                                            o
                                        sin r
    Dibujemos la funci´n
                      o       f (r) =         con las curvas de nivel en el plano XY .
                                          r
                                                                                          sin(r)/r




                                                           1




    >>     x=-8:0.5:8; y=x; [ENTER]
                                                          0.5
    >>      [XX,YY]=meshgrid(x,y);
           [ENTER]
                                                           0
    >>     R=sqrt(XX.^2+YY.^2)+eps;
           [ENTER]
    >>     Z=sin(R)./R; [ENTER]                          −0.5
                                                          10

    >>     surfc(XX,YY,Z);                                       5                                                  10

           title(’sin(r)/r’);                                          0
                                                                                                          0
                                                                                                              5


           [ENTER]                                                          −5
                                                                                                     −5
                                                                                 −10     −10

    Repitamos el ejemplo a˜adiendo los vectores normales mediante el comando
                          n                                                                surfnorm.




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                    40
3.6 Gr´ficos en 3-D
      a                                                                                                             m
                                                                                                                    at




    >>     clf; [ENTER]
    >>     x=-8:0.5:8; y=x; [ENTER]
    >>      [XX,YY]=meshgrid(x,y);                                               sin(r)/r
           [ENTER]
    >>     R=sqrt(XX.^2+YY.^2)+eps;
           [ENTER]                                 1.2

    >>     Z=sin(R)./R; [ENTER]                     1


    >>     surfnorm(XX,YY,Z);                      0.8

                                                   0.6
           title(’sin(r)/r’);
                                                   0.4
           [ENTER]
                                                   0.2

                                                    0

                                                  −0.2

                                                  −0.4
                                                   10

                                                          5                                                    10
                                                                                                       5
                                                               0
                                                                                                 0
                                                                     −5
                                                                                            −5
                                                                          −10   −10

    En los ejemplos siguientes mostramos las diferencias entre los comandos   surf y surfl utilizando diferentes luces.


[X,Y]=meshgrid(-3:1/8:3);
Z=peaks(X,Y).*sin(X);
[Nx,Ny,Nz]=surfnorm(Z);

s=[-3 -3 2];         % posicion de la fuente de luz
k1=[0,1,0,0];        % difusion
k2=[0,0,1,1];        % especular


subplot(2,2,1);
surfl(X,Y,Z,s); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))              max(max(Z))]); axis off;
subplot(2,2,2);
surfl(X,Y,Z,s,k1); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))              max(max(Z))]); axis off;
subplot(2,2,3);
surfl(X,Y,Z,s,k2); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))              max(max(Z))]); axis off;
subplot(2,2,4);
DD=diffuse(Nx,Ny,Nz,s);
surf(X,Y,Z,DD); shading interp;
colormap(gray); axis([-3 3 -3 3 min(min(Z))              max(max(Z))]); axis off;




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                              41
3.6 Gr´ficos en 3-D
      a                                                                                                                    m
                                                                                                                           at




Todas estas superficies se pueden ver en escala de grises utilizando el comando             shading interp.
    Los comandos    surf y mesh pueden ser utilizados para dibujar una funci´n en una red no uniforme. Ahora podemos
                                                                            o
incluir las matrices con las coordenadas para llamar a la rutina gr´fica.
                                                                   a
    En muchas ocasiones un gr´fico puede ser m´s f´cil de visualizar si lo podemos observar desde un punto de vista
                             a               a a
diferente.

                                    Establece el punto de vista. El escalar          v determina el ´ngulo azimutal y el
                                                                                                    a
     view(v,h)
                                    escalar    h el ´ngulo de elevaci´n.
                                                    a                o
     [v,h]=view                     Devuelve el punto de vista actual, ´ngulo azimutal y el ´ngulo de elevaci´n.
                                                                       a                    a                o
     view(r)                        Establece el visor en la posici´n
                                                                   o          r=[x y z].
                                    Devuelve los valores est´ndar de ´ngulos de visi´n (con
                                                            a        a              o                n = 2 en dimensi´n
                                                                                                                     o
     view(n)
                                    dos y con      n = 3 los de dimensi´n tres).
                                                                       o
     view                           Devuelve la matriz de visi´n (de dimensi´n
                                                              o             o              4 × 4).
     view(T)                        Se utiliza     T como matriz de visi´n.
                                                                        o
                                    Devuelve la matriz de visi´n (que define el punto de vista y la direcci´n de
                                                              o                                           o
     viewmtx(v,h,s,r)
                                    vista).

    Con el comando    view obtenemos una superficie ya conocida pero desde un punto de vista distinto.
                                                               sin(r)/r
                                      1




                                     0.5




                                      0




                                    −0.5
                                       −8     −6     −4   −2      0       2     4     6      8




    Tambi´n es posible utilizar el comando
         e                                    view en dos dimensiones. As´ si utilizamos en un gr´fico de dos dimensiones
                                                                         ı,                      a
el comando   view([1 0.6 0.35]) muestra como el c´
                                                 ırculo se puede dibujar en tres dimensiones.




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                     42
3.7 Control del color                                                                                                                 m
                                                                                                                                      at




                                      1

                                     0.8

                                     0.6

                                     0.4

                                     0.2

                                      0

                                    −0.2

                                    −0.4

                                    −0.6

                                    −0.8
                                                                                                   −1
                                     −1                                                     −0.5
                                     −1                                                 0
                                             −0.5
                                                     0                           0.5
                                                           0.5
                                                                   1        1




    Para investigar las funciones de tres variables gr´ficamente, ya que no podemos representarlas, MATLAB posee el
                                                      a
comando   slice.

                                           Dibuja capas de la funci´n de tres variables definida por la matriz V . La matriz
                                                                   o
                                           V est´ compuesta de nx capas, evaluada sobre tres matrices obtenidas a
                                                  a
      slice(V, xs, ys, zs, nx)
                                           partir de meshgrid con tres argumentos. Los vectores xs, ys y zs especifican
                                           que capas se dibujan.

    Probamos el comando con la funci´n
                                    o      f (x, y, z) = x2 +y 2 +z 2 y vemos lo que aparece en el cubo [−1, 1]×[−1, 1]×
[−1, 1]. Para ello definimos la red y evaluamos la funci´n en la red (podemos decidir que capas vamos a dibujar).
                                                       o


        >>      [x,y,z]=meshgrid(-1:.1:1,-1:.1:1,-1:.1:1);
               [ENTER]
        >>     v=x.^2+y.^2+z.^2; [ENTER]
        >>     slice(v,[11],[11],[1 11]);                              25

               [ENTER]                                                 20


                                                                       15


                                                                       10


                                                                        5


                                                                        0
                                                                       25
                                                                                20                                                     25
                                                                                       15                                        20
                                                                                            10                           15
                                                                                                                    10
                                                                                                    5
                                                                                                                5
                                                                                                        0   0


    Se˜alemos que existen otros muchos comandos para realizar y modificar gr´ficos como es el comando
      n                                                                    a                                                  rot90 que
nos permite rotarlos sobre la matriz definida.



3.7      Control del color
En MATLAB el usuario puede controlar los colores y la iluminaci´n de las gr´ficas en tres dimensiones.
                                                               o           a




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                                43
3.7 Control del color                                                                                                                m
                                                                                                                                     at




                                           Redibuja la superficie con las siguientes propiedades de acuerdo con el tipo:

                                                • faceted dibuja la red en la supeficie (opci´n por defecto).
                                                                                            o

     shading type                               • interp utiliza colores interpolados en la superficie.

                                                • flat todas las caras se dibujan en colores constantes desde las esquinas
                                                  de las caras.


    Dibujamos de nuevo una figura ya conocida pero con los colores                     interpolados utilizando el comando anterior.
                                                                  sin(r)/r




                                1




                               0.5




                                0




                              −0.5
                               10

                                       5                                                       10
                                                                                        5
                                            0
                                                                                  0
                                                  −5
                                                                             −5
                                                           −10   −10




    MATLAB utiliza mapas de colores para dibujar las superficies. Un mapa de color es una matriz                      m × 3 en la cual
las filas forman los colores, especificados por la cantidad de rojo (primera columna), verde (segunda columna) y azul
(tercera columna); as´ el mapa caracteriza
                     ı                             m colores.
    El color sobre la superficie se especifica mediante un ´
                                                         ındice del mapa de colores. Este ´
                                                                                          ındice se calcula habitual-
mente en relaci´n al m´ximo y el m´
               o      a           ınimo de la superficie. El comando                     colormap se utiliza para decidir que mapa de
colores utiliza MATLAB.

                                           Sit´a como mapa de colores actual a
                                              u                                             Cm. Si no se especifica se devuelve en
     colormap(Cm)
                                           una matriz la tabla del gr´fico actual.
                                                                     a
                                           Dibuja una barra horizontal de escala de colores en la ventana de gr´ficos
                                                                                                               a
     colorbar(’horiz’)
                                           actual. Si no se especifica la dibuja vertical.

    Hay 11 mapas de colores predefinidos en MATLAB:

                                     gray(m)           m   tonos de grises.
                                     hsv(m)            m   tonos de colores brillantes.
                                     hot(m)            m   tonos de colores calientes.
                                     cool(m)           m   tonos de colores fr´
                                                                              ıos.
                                     bone(m)           m   tonos de colores hueso.
                                     copper(m)         m   tonos de colores copper.
                                     pink(m)           m   tonos de colores en rosa.
                                     flag(m)           m   tonos de colores de banderas (EE.UU.).
                                     prism(m)          rojo, naranja, amarillo, verde, azul y violeta.
                                     jet(m)            m tonos de colores de hsv fr´ y calientes.
                                                                                   ıos
                                     white(m)          mapa blanco de colores.

    A˜adamos a la figura anterior la barra de colores.
     n



Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                                               44
3.8 Copia de la ventana gr´fica
                          a                                                                                         m
                                                                                                                    at




    Hay otros comandos que tambi´n manipulan el color.
                                e

                                   Devuelve un mapa de colores hsv de un mapa de colores rgb. El comando
      rgb2hsv(Cm)
                                   inverso es   hsv2rgb(Cm).
      rgbplot(Cm)                  Dibuja las columnas del mapa de colores    Cm.
                                                                                                              v.
                                   Hace que el intervalo de colores actual se sit´e entre los valores del vector
                                                                                 u
      caxis(v)                     Si no se especifica   v devuelve el intervalo habitual. Si se especifica ’auto’
                                   retorna a la escala autom´tica.
                                                            a
                                   Rota el mapa de colores durante    t segundos usando el paso s (los valores
      spinmat(t,s)
                                   por defecto son  s=1 y t=3. Si se utiliza inf se cambia para siempre.
      brighten(Cm,s)               Da brillo al gr´fico si 0 < s < 1 y se oscurece si −1 < s < 0.
                                                  a
      nt=brighten(Cm,s)            Devuelve el mapa de colores brillante u oscurecido, pero no redibuja.
      whitebg                      Cambia el fondo entre blanco y negro.
                                   Establece el color del fondo de acuerdo a una cadena de tipo de l´
                                                                                                    ınea, mar-
      whitebg(’cad’)
                                   cador y color, o con un vector   rgb.


3.8      Copia de la ventana gr´fica
                               a
Es posible obtener copias de las ventanas gr´ficas bien a impresi´n o bien a fichero.
                                            a                   o

                                   Manda a   fichero.ps la ventana actual. Si no se especifica va directamente
      print fichero
                                   a la impresora. Se pueden consultar diferentes impresoras.
                                   Se graba en un archivo de formato encapsulado      fichero.eps. Para enviarlo
      print -deps fichero
                                   posteriormente a otros documentos.
      [str, dev] =printopt         Nos da la cadena y salida utilizada por   print.
                                   Establece la orientaci´n que utiliza MATLAB en la siguiente print. Si
                                                          o
                                   cadena es lanscape se imprime en apaisado. Si es portrait se imprime en
      orient cadena
                                   vertical. Si es tall se imprime en vertical y a una escala que llena el papel.
                                   Si no se especifica devuelve la orientaci´n actual en una cadena.
                                                                           o




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                              45
Bibliograf´
          ıa

[1]    Oscar Angulo, Eduardo Cuesta, Cesar Gutierrez, Carmen Mart´
                                      ´        ´                 ınez,Gu´ R´pida de MATLAB,
                                                                        ıa a
       IICE, 2001.

[2]    Adrian Biran, Moshe Breinner, MATLAB for Engineers, Addison-Wesley, 1997.

[3]    S.J. Chapman, MATLAB Programming for engineers, Brooks & Cole, 2000.

[4]    Walter Gander, Jiri Hrebicek, Solving Problems in Scientific Computing Using MAPLE and MATLAB,
       Springer, 1997.

[5]    Mathews and Fink, M´todos Num´ricos con MATLAB, Prentice Hall, 2000.
                          e         e

[6]    Eva Part-Enander, Anders Sjoberg, The MATLAB handbook, Addison-Wesley, 1996.

[7]    Cesar Perez, Matem´tica Informatizada con MATLAB, ra-ma, 1996.
                         a

[8]    Peregrina Quintela, Introducci´n a MATLAB y sus aplicaciones, Universidad de Santiago de Compostela,
                                     o
       1997.

[9]    Redfern, D, The MATLAB 5 handbook, Springer, 1997.

[10]    Kermit Sigmon, MATLAB Primer (Fifth Edition), CRC Press, 1998 .

[11]    Aprenda MATLAB 5.3, como si estuviera en primero, Universidad de Navarra, 1999.

[12] www.mathworks.com




Gu´ R´pida de Matlabdvips .
  ıa a                                                                                                  46

Más contenido relacionado

PPT
Amplificadores operacionales con funciones de transferencia
PDF
Deformaciones y esfuerzos en secciones no circulares
PPTX
Resolución de ecuaciones diferenciales con MATLAB R2015a
PDF
Tabla de Dualidad Transformada Z, Transformada de LaPlace y Discreta.
PDF
TRANSFORMADA DE LAPLACE PARA CIRCUITOS ELÉCTRICOS
DOCX
Tiristores, características, aplicaciones y funcionamiento.
DOCX
Carga y Descarga de un Condensador
PDF
Capitulo 5 estatica
Amplificadores operacionales con funciones de transferencia
Deformaciones y esfuerzos en secciones no circulares
Resolución de ecuaciones diferenciales con MATLAB R2015a
Tabla de Dualidad Transformada Z, Transformada de LaPlace y Discreta.
TRANSFORMADA DE LAPLACE PARA CIRCUITOS ELÉCTRICOS
Tiristores, características, aplicaciones y funcionamiento.
Carga y Descarga de un Condensador
Capitulo 5 estatica

La actualidad más candente (20)

PDF
Ensayo de tracción
PDF
Metodos numericos con matlab
PPTX
Analisis cinematico de mecanismos analisis de velocidad (metodo Analitico y C...
PDF
Ejercicios de programacion_resueltos_con
PPTX
Mecanismo de 3 barras
PDF
Análisis cinemático mecanismo biela manivela
DOCX
Momento polar de_inercia
PDF
Instrumentacion ii
PPSX
Sistemas Hiperestáticos - Método de las deformaciones - Problema de Aplicació...
PPTX
Diseño de ejes
PDF
241735571 analisis-de-tension-autodesk-inventor-pdf
PDF
Tema 3 velocidad y aceleración en mecanismos Unefm
PPTX
Funcion De Transferencia
DOCX
Sistema control onoff
PPT
1. ECUACIONES NO LINEALES
DOCX
Metodo grafico
DOCX
Llenado de tanque con control de temperatura y nivel
PPT
Mapa aplicación de las variables complejas en la ingieneria
PDF
2.2. Configuraciones de Diodos en Serie en DC
PPTX
Tipos de apoyos y cálculo de reacciones
Ensayo de tracción
Metodos numericos con matlab
Analisis cinematico de mecanismos analisis de velocidad (metodo Analitico y C...
Ejercicios de programacion_resueltos_con
Mecanismo de 3 barras
Análisis cinemático mecanismo biela manivela
Momento polar de_inercia
Instrumentacion ii
Sistemas Hiperestáticos - Método de las deformaciones - Problema de Aplicació...
Diseño de ejes
241735571 analisis-de-tension-autodesk-inventor-pdf
Tema 3 velocidad y aceleración en mecanismos Unefm
Funcion De Transferencia
Sistema control onoff
1. ECUACIONES NO LINEALES
Metodo grafico
Llenado de tanque con control de temperatura y nivel
Mapa aplicación de las variables complejas en la ingieneria
2.2. Configuraciones de Diodos en Serie en DC
Tipos de apoyos y cálculo de reacciones
Publicidad

Similar a Guia rapida de matlab (comandos basicos, graficacion y programacion) (20)

PDF
Matlab guia introductoria_2001_09_10
PDF
TÓPICOS DE MATLAB: APLICACIÓN A LOS MÉTODOS NUMÉRICOS.
PDF
Manual matlab 2009
PDF
Guia para usar matlab
PDF
Manual dematlab
PDF
Introduccion a matlab
PDF
Campos vectoriales con Matlab y Mathematica
PDF
Mat lab basico
PDF
Matlab r2006b
PDF
Manual basico de_matlab
PDF
Documento11541
PDF
Octave calculo numerico
PDF
Sistemas operativos -_luis_la_red_martinez
PDF
Sistemaoperativos lared-martinez
PDF
Vba excel mnumericos
PDF
16. Introducción a Matlab autor Julio Benítez Lopez y José Luis Hueso Pagoaga...
PDF
Sistemas operativos-david-luis
PDF
MATLAB Tutorial
PDF
Matematicas en ingenieria_con_matlab_y_o
PDF
Apuntes de clase matlab.abril2019
Matlab guia introductoria_2001_09_10
TÓPICOS DE MATLAB: APLICACIÓN A LOS MÉTODOS NUMÉRICOS.
Manual matlab 2009
Guia para usar matlab
Manual dematlab
Introduccion a matlab
Campos vectoriales con Matlab y Mathematica
Mat lab basico
Matlab r2006b
Manual basico de_matlab
Documento11541
Octave calculo numerico
Sistemas operativos -_luis_la_red_martinez
Sistemaoperativos lared-martinez
Vba excel mnumericos
16. Introducción a Matlab autor Julio Benítez Lopez y José Luis Hueso Pagoaga...
Sistemas operativos-david-luis
MATLAB Tutorial
Matematicas en ingenieria_con_matlab_y_o
Apuntes de clase matlab.abril2019
Publicidad

Último (20)

PPTX
RCP avanzado_Luis Minaya_ Septiembre 25.pptx
DOCX
PCI LARAOS 2025. 2024 documento de gestión
PPTX
CTE PARA LOS MIEMBROS COLECTIVOS DOCENTES.pptx
PDF
ACERTIJO CANTO Y TRABALENGUAS DEL GALLO PIRIPICHO. Por JAVIER SOLIS NOYOLA
PDF
Carta magna de la excelentísima República de México
DOCX
PROGRAMA ANALITICO ESCUela en san luis potosi 25-26.docx
DOCX
Programa Analítico Matemáticas 1° Editorial MD.docx
PDF
Libro-Libroferia-Encarnación-una-experiencia-de-alfabetizacion-cultural-Nadia...
DOCX
Área transición documento word el m ejor
PDF
FASE-4-Tercero-y-Cuarto_Vinculacion-entre-Contenidos-del-Programa-Sintetico-y...
DOCX
Programa Analítico- Lenguajes-Ingles 3º (1).docx
PPTX
Evaluación de Programa analitico 2024-2025 Jardín de niños Ramón González Vil...
PDF
Biografia del Genio Steve Jobs Ccesa007.pdf
PDF
El Seminario 23. El sinthome [Jacques Lacan].pdf
PPTX
Programa analitico 2024-2025 Jardín de niños Ramón Gonzáles Villarreal. T.M. ...
PDF
CUIDADOS DE PERIOPERATORIO I-ENFERMERIA I
PDF
Teología de la misión Ramiro Pellitero.pdf
PDF
tu hijo tu espejo: libro que te ayudará a comprender la relación padres e hij...
PDF
el ACERTIJO y ROMPECABEZAS “El Reto de los Novios Matemáticos por un Amor Inf...
PDF
Manual-de-Cargos-y-Funciones-V-02-11-2025
RCP avanzado_Luis Minaya_ Septiembre 25.pptx
PCI LARAOS 2025. 2024 documento de gestión
CTE PARA LOS MIEMBROS COLECTIVOS DOCENTES.pptx
ACERTIJO CANTO Y TRABALENGUAS DEL GALLO PIRIPICHO. Por JAVIER SOLIS NOYOLA
Carta magna de la excelentísima República de México
PROGRAMA ANALITICO ESCUela en san luis potosi 25-26.docx
Programa Analítico Matemáticas 1° Editorial MD.docx
Libro-Libroferia-Encarnación-una-experiencia-de-alfabetizacion-cultural-Nadia...
Área transición documento word el m ejor
FASE-4-Tercero-y-Cuarto_Vinculacion-entre-Contenidos-del-Programa-Sintetico-y...
Programa Analítico- Lenguajes-Ingles 3º (1).docx
Evaluación de Programa analitico 2024-2025 Jardín de niños Ramón González Vil...
Biografia del Genio Steve Jobs Ccesa007.pdf
El Seminario 23. El sinthome [Jacques Lacan].pdf
Programa analitico 2024-2025 Jardín de niños Ramón Gonzáles Villarreal. T.M. ...
CUIDADOS DE PERIOPERATORIO I-ENFERMERIA I
Teología de la misión Ramiro Pellitero.pdf
tu hijo tu espejo: libro que te ayudará a comprender la relación padres e hij...
el ACERTIJO y ROMPECABEZAS “El Reto de los Novios Matemáticos por un Amor Inf...
Manual-de-Cargos-y-Funciones-V-02-11-2025

Guia rapida de matlab (comandos basicos, graficacion y programacion)

  • 1. Gu´ R´pida de Matlab ıa a ´ Oscar Angulo, Eduardo Cuesta, Cesar Gutierrez y Mar´ del Carmen Mart´ ´ ´ ıa ınez diciembre de 2001
  • 2. Pr´logo o Este libro inicia una serie de gu´ dedicadas a MATLAB. ıas El objetivo de esta gu´ es servir de apoyo para el manejo de MATLAB en las asignaturas en las que se emplea el citado ıa software y en las que las limitaciones de tiempo no permiten una dedicaci´n muy exhaustiva a su explicaci´n. Hemos o o pretendido mostrar en esta gu´ los comandos y estructuras b´sicas de MATLAB de una manera clara y concisa con ıa a algunos ejemplos que hemos considerado interesantes. Pretendemos as´ mismo que esta gu´ sea una gu´ viva que siga ı ıa ıa evolucionando con el tiempo, como lo ha hecho hasta ahora, gracias a la experiencia en el uso docente de MATLAB y gracias a las sugerencias de compa˜eros y alumnos a los cuales les queremos mostrar nuestro agradecimiento. n Valladolid, diciembre de 2001 Los Autores Gu´ R´pida de Matlabdvips . ıa a 1
  • 3. m at . No est´ permitida la reproducci´n total o parcial de esta gu´ ni su tratamiento inform´tico, ni la transmisi´n de a o ıa, a o ninguna forma o por cualquier medio, ya sea electr´nico, mec´nico, por fotocopia, por registro u otros m´todos, ni o a e su pr´stamo, alquiler o cualquier otra forma de cesi´n de uso del ejemplar, sin el permiso previo y por escrito de los e o titulares del Copyright. ´ Angulo Torga, Oscar; Cuesta Montero, Eduardo; Guti´rrez Vaquero, C´sar; Mart´ e e ınez Mart´ ınez, Mar´ del Carmen: ıa Profesores del Departamento de Matem´tica Aplicada a la T´cnica; Valladolid, 2001. a e ´ UNIVERSIDAD DE VALLADOLID. INSTITUTO DE INVESTIGACION DE CIENCIAS DE LA EDUCACION. ´ ISBN: 84- Imprime: Servicio Reprograf´ COPIPAUMA ıa Gu´ R´pida de Matlabdvips . ıa a 2
  • 4. Contenidos 1 Introducci´n a MATLAB o 4 1.1 Comentarios previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Iniciando y finalizando una sesi´n con MATLAB o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 El entorno gr´fico de MATLAB bajo Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 5 1.4 Entorno gr´fico de MATLAB para Linux a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 Breve Introducci´n a la Programaci´n en MATLAB o o 7 2.1 Principios con MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.1 Entrada y salida en MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.2 Aritm´tica elemental . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e 7 2.1.3 Diferentes formatos para los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2 Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.3 Ficheros *.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4 Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.5 Lectura y escritura de datos (Entrada/salida de datos) . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5.1 Escritura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5.2 Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.6 Programaci´n modular: Funciones o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.7 Otras Observaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3 Gr´ficos con MATLAB a 20 3.1 Gr´ficos de dos dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 20 3.1.1 El comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1.2 Opciones del comando plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.1.3 Otros comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.2 Gr´ficos con n´meros complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a u 25 3.3 Gr´ficos en otros sistemas coordenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 27 3.4 Controlando los gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 28 3.5 Dibujando curvas de nivel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.6 Gr´ficos en 3-D a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.7 Control del color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.8 Copia de la ventana gr´fica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . a 45 Gu´ R´pida de Matlabdvips . ıa a 3
  • 5. Cap´ ıtulo 1 Introducci´n a MATLAB o 1.1 Comentarios previos Comencemos destacando que la filosof´ del entorno MATLAB no es la de otros paquetes de matem´ticas usuales, ıa a tales como Derive, Maple o Mathematica. Su filosof´ se asemeja m´s a la de un lenguaje de programaci´n que al de un paquete est´ndar de matem´ticas ıa a o a a pues, aunque podemos ejecutar desde la linea de comandos mediante los nombres de dichos operaciones como en los paquetes mencionados, lo habitual con MATLAB es crear un fichero de texto externo que contenga la secuencia de comandos que se desea ejecutar y llamar a este “programa” desde MATLAB. Algunas de las ventajas e inconvenientes de MATLAB son: 1) Ventajas que el entorno MATLAB tiene frente a un lenguaje de programaci´n: o (a) No hay que definir el tipo de las variables que se van a utilizar, ni el tama˜o de las mismas. n (b) No hay que compilar los programas, como ocurre en los entornos de programaci´n. o (c) Se pueden utilizar extens´ ısimas librer´ de funciones ya definidas. ıas (d) Presenta un manejo muy pr´ctico de vectores y matrices. a 2) Frente a un lenguaje de programaci´n no presenta incovenientes destacables. o Adem´s las sentencias y las a estructuras que se manejan son muy similares a las que se usan en el entorno de C. Algunos de los inconvenientes frente a otros paquetes inform´ticos son, entre otros: a (a) Al no estar pensado para el trabajo en linea de comandos no presenta ning´n men´ de acceso r´pido a u u a procedimientos de uso frecuente (como el que tiene por ejemplo Derive). (b) No posee una librer´ de c´lculo simb´lico propio por lo que recurre a comandos de Maple. No obstante, ıa a o este no es el fin ´ltimo de este programa y hay otros en el mercado m´s optimizados para este tipo de u a c´lculos. a 1.2 Iniciando y finalizando una sesi´n con MATLAB o MATLAB se arranca pulsando con el rat´n en el icono correspondiente, e inmediatamente aparece la pantalla de la o figura ??. Cualquier comando que se escribe tras el cursor de MATLAB ser´ procesado cuando se presione la tecla [ENTER]. a Por ejemplo, el comando que hay que ejecutar para salir de MATLAB es quit: >> quit [ENTER] Gu´ R´pida de Matlabdvips . ıa a 4
  • 6. 1.3 El entorno gr´fico de MATLAB bajo Windows a m at Si se necesita detener la ejecuci´n de un programa o de un comando MATLAB antes de su finalizaci´n normal es o o necesario presionar simult´neamente la tecla [CTRL] y la tecla [C]. MATLAB detiene as´ cualquier comando o programa a ı que estuviera ejecut´ndose en ese momento y devuelve el cursor a su estado original quedando preparado para ejecutar a el siguiente comando. 1.3 El entorno gr´fico de MATLAB bajo Windows a La ventana de trabajo de MATLAB es una cl´sica ventana de Windows en la que aparece un men´ de opciones y unos a u cuantos botones de acceso r´pido. a El men´ de opciones se compone de cinco submen´s u u File , Edit , View, Window y Help , cada uno de ellos con las siguientes opciones • Men´ File : Con esta opci´n se puede, entre otras u o cosas crear un nuevo elemento (bien un fichero M-File, una figura o un modelo de Simulink); abrir una nueva sesi´n, o un fichero M-File; gra- o bar, leer o mostrar el campo de trabajo (variables utilizadas); seleccionar el directorio de trabajo; seleccionar diversas preferencias, que van desde el color de la pantalla hasta el tipo de datos con los que trabaja por defecto; imprimir el documento activo, una selecci´n o elegir las preferencias de o impresi´n; los ´ltimos archivos utilizados; y aban- o u donar el programa. • Men´ Edit : u Posee las opciones de un edi- tor cl´sico de textos para Windows, seleccionar a un texto (con los cursores o el rat´n), cortar o un texto, copiar o pegar lo que tengamos se- leccionado en el portapapeles, deshacer la ´ltima u acci´n, seleccionar todo el documento o bien bor- o rar las variables de la sesi´n. o Gu´ R´pida de Matlabdvips . ıa a 5
  • 7. 1.4 Entorno gr´fico de MATLAB para Linux a m at • Men´ Help : Muestra todas las ayudas que nos u ofrece MATLAB y sobre las que nos extendere- mos algo m´s en la ´ltima parte de esta intro- a u ducci´n. o Diversas operaciones se pueden realizar a trav´s de los botones de acceso r´pido, como abrir una nueva sesi´n, e a o imprimir un fichero, obtener ayuda, seleccionar un nuevo directorio de trabajo o ver el n´mero de variables que u estamos utilizando en este momento. 1.4 Entorno gr´fico de MATLAB para Linux a Se˜alemos para los usuarios de Linux que algunas versiones antiguas de MATLAB no incluyen un editor propio como n el descrito para Windows por lo que utilizaremos cualquiera de los que Linux tiene disponibles (joe, vi, kedit,...). En este caso, la ventana de trabajo tendra una presentaci´n similar a la siguiente: o Destaquemos por ´ltimo que tanto bajo Windows como bajo Linux se puede utilizar cualquier editor que permita u grabar los ficheros en formato ASCII para elaborar nuestros programas. Gu´ R´pida de Matlabdvips . ıa a 6
  • 8. Cap´ ıtulo 2 Breve Introducci´n a la Programaci´n o o en MATLAB 2.1 Principios con MATLAB 2.1.1 Entrada y salida en MATLAB Al arrancar MATLAB aparecer´ el s´ a ımbolo del sistema (adem´s de algunos mensajes) a >> El s´ ımbolo >> determina la linea de comandos donde podremos escribir y ejecutar los comandos. Para salir de MATLAB teclearemos: >> quit [ENTER] 2.1.2 Aritm´tica elemental e Comenzaremos viendo con varios ejemplos que las operaciones aritm´ticas habituales se realizan del modo esperado e con los operadores suma: +, resta: −, producto: ∗, divisi´n: /, y exponencianci´n: ˆ. o o Escribamos en linea de comandos lo siguiente: >> 1+2 [ENTER] Suma de dos enteros. ans = 3 >> sin(pi/2) [ENTER] Seno de π/2. ans = 1 >> 2.45*3.1415 [ENTER] Producto de dos n´meros reales. u ans = 7.6967 >> 2,34*3 [ENTER] Ponemos una coma en lugar de un punto ans = 2 ans = 102 ¿Qu´ ha hecho MATLAB? e >> 2E-2*3E8 [ENTER] Uso del exponente. Gu´ R´pida de Matlabdvips . ıa a 7
  • 9. 2.1 Principios con MATLAB m at ans = 6000000 >> log(10) [ENTER] Logaritmo neperiano. ans = 2.3026 >> (3+2^3*i)+(-1+5*i) [ENTER] Suma de complejos. ans = 2.0000+13.0000i >> (1-2*i)*(2+2*i) [ENTER] Producto de complejos. ans = 6.0000-2.0000i Existen otras muchas funciones disponibles en MATLAB y que son an´logas a las que maneja Derive, Maple u a otros; as´ por ejemplo: ı arco seno: asin(x), arco tangente: atan(x), ra´ cuadrada: sqrt(x), logaritmo en base 10: log10(x), . . . ız Si no queremos que aparezca por pantalla el resultado de una operaci´n tendremos que poner al final de la linea o punto y coma ”;” . >> tan(pi/4) [ENTER] Tangente de π/4. ans = 1.0000 >> tan(pi/4); [ENTER] La misma operaci´n pero sin salida por pantalla. o >> 2.1.3 Diferentes formatos para los datos Existen diferentes formatos de salida para los datos en MATLAB. Veamos algunos ejemplos. >> d=1/33 d= 0.0303 >> format long, d [ENTER] Formato largo. d= 0.03030303030303 >> format short e, d [ENTER] Formato corto con mantisa y exponente. d= 3.0303e-002 >> format long e, d [ENTER] Formato largo con mantisa y exponente. d= 3.030303030303030e-002 >> format rat, d [ENTER] Formato racional. d= 1/33 Se puede realizar algunas ”operaciones” con alguna indeterminaci´n. o >> 1/0 [ENTER] Divisi´n por cero. o ans = Inf >> 5*Inf [ENTER] Multiplicaci´n por infinito. o ans = Inf Para la primera de ellas nos avisa que divide por cero. Gu´ R´pida de Matlabdvips . ıa a 8
  • 10. 2.2 Asignaciones m at 2.2 Asignaciones Uno de los elementos fundamentales en la programaci´n son la variables: o Variable: Objeto que puede tomar el mismo valor a lo largo de todo el programa o bien puede ir cambiando al ejecutar diferentes acciones. El nombre de cada variable puede ser el que el programador quiera siempre que no coincida con alguna palabra clave de MATLAB, en cuyo caso nos informar´ mediante un mensaje de error. De todos modos es recomendable que a el nombre que elijamos para cada variable sea alusivo a su contenido o a su aplicaci´n. o Destaquemos un hecho importante: MATLAB distingue entre may´sculas y min´sculas por lo que u u x y X no ser´n a las mismas variables ni lo ser´n tampoco a Nodos, nodos y NODOS. Para realizar la asignaci´n de valores a las variables en MATLAB no hace falta declarar el tipo de dato que se va a o asignar (entero, real, complejo o car´cter) ni el tama˜o del mismo (escalar, vector o matriz del tama˜o que sea). a n n Seudoc´digo: La asignaci´n de un valor o o a a una variable llamada VARIABLE escribiremos VARIABLE ←− a donde a puede ser una constante, el valor de otra variable o el valor de una expresi´n aritm´tica. o e 1) Comencemos con algunos ejemplos elementales de asignaciones y alguna de las operaciones que se pueden realizar. >> a=2 [ENTER] Asignaci´n del valor 2 a la variable a. o a= 2 >> x=a [ENTER] Asignaci´n del valor 2 a la variable x. o x= 2 >> x=x+2 [ENTER] Asignaci´n del valor 4 a la variable x. o x= 4 >> b=1:1:10 [ENTER] Asignamos a b el vector de datos [1,2,3,4,...,10] b= 1 2 3 4 5 6 7 8 9 10 >> a+b [ENTER] Sumamos un escalar y un vector. ans = 3 4 5 6 7 8 9 10 11 12 ¿Qu´ ha hecho MATLAB? e >> a*b [ENTER] Producto de un vector y un escalar. ans = 2 4 6 8 10 12 14 16 18 20 2) Si sumamos vectores de tama˜o diferente tenemos lo siguiente. n >> c=1:5:25 [ENTER] Declaramos el vector c. c= 1 6 11 16 21 >> b+c [ENTER] Sumamos los vectores b y c. ??? Error using ==> + Matrix dimensions must be agree 3) Podemos multiplicar vectores, bien como producto escalar de ellos o bien componente a componente. >> b=0:2:20 [ENTER] Declaramos el vector b. b= 0 2 4 6 8 10 12 14 16 18 20 >> c=0:1:10 [ENTER] Declaramos el vector c. c= 0 1 2 3 4 5 6 7 8 9 10 >> b.*c [ENTER] Producto de dos vectores componente a componente. ans = 0 2 8 18 ...200 Gu´ R´pida de Matlabdvips . ıa a 9
  • 11. 2.2 Asignaciones m at >> b’*c [ENTER] Matriz resultado de multiplicar b traspuesto por c (ver pantalla) >> b*c’ [ENTER] Producto de b por c traspuesto (producto interior) ans = 770 4) No s´lo se pueden sumar vectores o multiplicar por una constante si no que se puede calcular el logaritmo de un o vector o el seno de un vector, etc... obteniendo el logaritmo o el seno de cada una de sus componentes. >> b=1:10; [ENTER] Declaramos el vector b. >> log(b) [ENTER] Logartimo del vector b. ans = Columns 1 through 7 Siete primeras columnas. 0 0.6931 ...1.9459 Columns 8 through 10 Tres ´ltimas columnas. u 2.0794 2.1972 2.3026 >> sin(b) [ENTER] Seno del vector b. ans = Columns 1 through 7 Siete primeras columnas. 0.8415 0.9093 ...0.6570 Columns 8 through 10 Tres ´ltimas columnas. u 0.98954 0.4121 -0.5440 >> c=1:1:5 [ENTER] c= 1 2 3 4 5 >> 2.^c [ENTER] 2 elevado a las potencias que determina c. ans = 2 4 8 16 32 >> c.^ 2 [ENTER] Las componentes de c elevadas al cuadrado. ans = 1 4 9 16 25 Un punto delante de los operadores .*, .^ y ./ indica que las operaciones se realizan componente a componente en los vectores o las matrices. 5) En relaci´n a la aritm´tica matricial mostramos algunas de las funciones m´s habituales. o e a >> A=[1 2 3;4 5 6;7 8 9] [ENTER] Definici´n de la matriz A. o A= 1 2 3 4 5 6 7 8 9 >> A(2,2) [ENTER] Elemento (2,2) de la matriz A. ans = 5 >> A(:,3) [ENTER] Muestra la tercera columna de la matriz A. ans = 3 6 9 >> size(A) [ENTER] Tama~o de la matriz A. n ans = 3 3 >> B=[1 2 1;2 1 2;1 2 1] [ENTER] B= 1 2 1 2 1 2 1 2 1 >> A*B [ENTER] Producto matricial habitual. Gu´ R´pida de Matlabdvips . ıa a 10
  • 12. 2.3 Ficheros *.m m at ans = 8 10 8 20 25 20 32 40 32 Un comando de uso frecuente es who que nos permite conocer el n´mero y nombre de las variables usadas a lo u largo del programa o de la sesi´n. Su formato es: o >> who [ENTER] Your variables are: A u vfil x ans vcol w y donde las variables corresponden a otra ejecuci´n del programa. o El comando whos nos muestra, adem´s del nombre de las variables, informaci´n adicional de cada variable, distin- a o guiendo si es vector o escalar. >> whos [ENTER] Name Size Bytes Class A 3x4 96 double array ans 4x1 32 double array u 1x1 8 double array Grand total is 28 elements usign 224 bytes vcol 4x1 32 double array vfil 1x4 32 double array w 1x1 8 double array x 1x1 8 double array y 1x1 8 double array Debemos tener en cuenta que MATLAB en cada sesi´n mantiene en memoria todas las variables utilizadas hasta o ese momento y que ´nicamente el comando u clear hace que elimine el valor de todas las variables. >> clear [ENTER] Si ahora tecleamos who no se produce ninguna salida. 2.3 Ficheros *.m Como ya hemos dicho la filosof´ de MATLAB se asemeja m´s a la de un lenguaje de programaci´n que a la de un ıa a o software matem´tico de resoluci´n de problemas simb´licos. En concreto, permite ejecutar una secuencia de comandos a o o escritos en un fichero ASCII sin m´s que hacer una llamada al mismo, como si se tratase de un programa en lenguaje a C, Fortran u otros, pero sin necesidad de ”linkar” y ”compilar” dicho fichero. Estos ficheros se pueden editar con cualquier editor o procesador de textos, como el que incluye el propio MATLAB, el usual Word (siempre que almacenemos el fichero sin formato), edit (de MSDOS), kedit, joe, vi,. . . , siempre que permita guardalo en formato texto. Un sencillo ejemplo nos pertimitir´ aclarar estas ideas. a 1) En primer lugar abrimos un fichero con el editor elegido. 2) Tecleamos lo siguiente: numerador=12^3 % Asignamos el valor 12^3 a la variable numerador. denominador=3.2E-3 % Asignamos el valor 3.2E-3 a la variable denominador. x = numerador/denominador % Calculamos la division de la anteriores variables. Gu´ R´pida de Matlabdvips . ıa a 11
  • 13. 2.4 Estructuras de control m at 3) Grabamos el fichero en el directorio en el que hemos arrancado MATLAB con el nombre “prueba1.m”. Es un error frecuente grabar el fichero en un directorio diferente al que tenemos fijado para MATLAB. Si no se hubiese grabado en ese directorio podemos cambiar desde MATLAB el directorio de trabajo haciendo uso de los comandos del sistema (para LINUX: ls, cd, mv,. . . para WINDOWS: dir, cd, move,. . . ) 4) Volvemos a la ventana de MATLAB y tecleamos >> prueba1 numerador = 1728 denominador = 0.0032 x= 540000 En lo sucesivo ´sta ser´ la forma de trabajar con MATLAB: escribir en un fichero la secuencia de comandos que e a vamos a ejecutar. Con este planteamiento elaboraremos programas (secuencia de comandos) que nos permitan resolver problemas con un cierto grado de complejidad. 2.4 Estructuras de control ´ Las estructuras de control permiten organizar adecuadamente las acciones a realizar por el procesador. Estas son de tres tipos: • Secuenciaci´n: Es la estructura de control m´s sencilla y f´cil de utilizar y o a a consiste en la enumeraci´n consecutiva de acciones a realizar. o No existe seudoc´digo expl´ o ıcito para esta estructura aparte de la propia escritura de las acciones • Selecci´n: Esta estructura act´a sobre una proposici´n o condici´n boo- o u o o leana con dos posibles valores mutuamente excluyentes: Ver- dadero o Falso Si C es la condici´n y A y B son las acciones o secuencia de acciones o ´ SEUDOCODIGO: ´ CODIFICACION EN MATLAB: si C entonces if C acci´n A o acci´n A o sino else acci´n B o acci´n B o finsi end Como ejemplo escribamos el siguiente fichero if n>2 % Si el valor de n es menor que 2 haz: disp(’Has cometido un error’) % Muestra un mensaje por pantalla. end if n>0 & n<2 % Si n>0 Y n<2 entonces haz... disp(’Has acertado’) end if n<-2 | n>10 % Si n<-2 O n>10 entonces haz... Gu´ R´pida de Matlabdvips . ıa a 12
  • 14. 2.4 Estructuras de control m at disp(’Es otra prueba’) end Observemos que la opcion else no es necesario utilizarla. Veamos otro ejemplo con la opci´n else. o if n>0 & n<2 % Si n>0 y n<2 entonces haz... disp(’Estas en el intervalo’) else % en caso contrario haz... disp(’No estas en el intervalo’) end Las estructuras de selecci´n se pueden anidar de diferentes formas. Mostramos una de esas posibilidades. o ´ SEUDOCODIGO: si C1 entonces ´ CODIFICACION EN MATLAB: acci´n A1 o if C1 sino acci´n A1 o si C2 elseif C2 acci´n A2 o acci´n A2 o finsi else acci´n A3 o acci´n A3 o finsi end Como ejemplo podemos escribir el siguiente fichero. if abs(x)<2 % Si el valor absoluto de x es menor que 2 haz disp(’La variable x esta acotada’) elseif x>-3 % Si no es as’{i} y si x>-3 haz disp(’La variable no esta acotada’) end Existen otras estructuras de selecci´n con fines m´s espec´ o a ıficos como es la estructura switch que se puede consultar en cualquier manual de MATLAB. • Iterativa. La estructura iterativa responde al caso de las acciones consis- tentes en la repetici´n de una o de varias subacciones o Existen varios tipos de estructuras iterativas que se pueden englobar en una sola pero nosotros vamos a presentar los casos particulares m´s habituales: a 1) Sin n´mero predeterminado de iteraciones y con la condici´n al principio. Si C es la condici´n y A es la u o o acci´n o secuencia de acciones: o ´ SEUDOCODIGO: ´ CODIFICACION EN MATLAB: mientras C hacer while C acci´n A o acci´n A o finmientras end Gu´ R´pida de Matlabdvips . ıa a 13
  • 15. 2.4 Estructuras de control m at Proponemos el siguiente ejemplo n=1; while prod(1:n)<1e100 n=n+1; disp(’Nos llegamos en’),n end 2) Sin n´mero predeterminado de iteraciones y con la condici´n al final. Si C es la condici´n y A es la acci´n u o o o o secuencia de acciones: ´ CODIFICACION EN MATLAB: ´ SEUDOCODIGO: while 1 hacer acci´n A o acci´n A o if C,break, end mientras C end 3) Con n´mero predeterminado de iteraciones. Esta estructura repite una acci´n o una secuencia de ellas un u o n´mero fijo de veces que viene determinado por una variable u contador que toma valores entre un valor inicial vi y un valor final vf, cuando la variable contador se incrementa un valor paso que puede ser negativo. Si A es una acci´n o secuencia de acciones: o ´ SEUDOCODIGO: para contador=vi hasta vf incr. paso ´ CODIFICACION EN MATLAB: hacer for contador=vi,vf,paso acci´n A o acci´n A o finpara end Como ejemplo editemos el fichero prueba.m con los siguientes comandos for n=1:1:10 % Cuenta desde 1 hasta 10 de 1 en 1. y(n)=n^2; % Declara un vector cuyas componentes son de la forma n^2. x(n)=2*y(n); % Declara un vector cuyas componentes son de la forma 2*y_n. end % Fin del bucle. y,x % Muestra por pantalla los vectores declarados. Ejecutamos en MATLAB el fichero prueba y obtenemos lo siguiente >> prueba [ENTER] y = 1 4 9 16...100 x= 2 8 18...200 A diferencia de lo que ocurre con algunos lenguajes de programaci´n y con la mayor parte del software o matem´tico, la variable a contador puede recorrer los valores que queramos como se muestra en el siguiente ejemplo (modificamos el fichero anterior). for n=[1 3 7 2 5.5 3] % Recorre los valores 1 3 7 2 5.5 y 3 de n. x(n)=2*n; % Declara un vector . end % Fin del bucle. Gu´ R´pida de Matlabdvips . ıa a 14
  • 16. 2.5 Lectura y escritura de datos (Entrada/salida de datos) m at x % Muestra por pantalla los vectores declarados. La ejecuci´n del fichero prueba muestra o >> prueba [ENTER] x= 2 4 6 0 0 11 14 >> prueba [ENTER] Destaquemos que el vector muestra los valores ordenados desde la primera componente hasta la ´ltima que u contiene la variable n (contador), en el caso de encontrarse ´ ındices no enteros redondea (de todos modos se avisa con un warning) y en el caso de faltar ´ ındices ´stos se rellenan con valores nulos. e 2.5 Lectura y escritura de datos (Entrada/salida de datos) 2.5.1 Escritura de datos La escritura de datos nos permite enviar el valor de una o m´s variables externamente, bien a la pantalla del ordenador, a bien a un fichero. seudoc´digo. Si el nombre de la variable es o VARIABLE la acci´n escritura se escribe como o escribe VARIABLE 1) Para que el valor de VARIABLE aparezca por pantalla bastar´ teclear el nombre de la variable a >> VARIABLE [ENTER] 2) Para escribir el valor de una variable en un fichero con un formato establecido utilizaremos los siguientes comandos: • Abrimos el fichero en el que vamos a guardar los datos: >> fid=fopen(’nombre-fichero’,permisos) donde – fid es el identificador que Matlab utiliza para reconocer el fichero. – nombre-fichero es el nombre con el que aparecer´ en nuestro directorio a – permiso es un cadena que indica la operaci´n a realizar con el fichero, o ’r’ −→ Lectura ’w’ −→ Escritura (se crea si es necesario) ’a’ −→ A˜adir a un fichero ya existente (se crea si es necesario) n ’r+’ −→ Lectura y escritura ’w+’ −→ Trunca el fichero o lo crea para lectura o escritura ’a+’ −→ Lectura y a˜adir a un fichero ya existente (se crea si es necesario) n • Escribimos el contenido de la variable o variables datos con el formato que indiquemos en format con el siguiente comando >> fprintf(fid,format,datos) • Cerramos el fichero abierto con el comando >> fclose(fid) En caso de que se produzca alg´n error al cerrar el fichero MATLAB devolver´ el valor u a −1 y si no es as´ ı devolver´ 0. a Gu´ R´pida de Matlabdvips . ıa a 15
  • 17. 2.5 Lectura y escritura de datos (Entrada/salida de datos) m at Editemos un fichero que haga uso de los anteriores comandos t=0:1:10 % Crea un vector con los datos 0,1,2,3,...,10. y=t.^2 % Crea un vector con los datos 0,1,4,9,...,100. fid=fopen(’parabola.dat’,’w’) % Crea un puntero a un fichero llamado % parabola.dat para escribir en el (w) x=[t;y]; % Crea la matriz de datos que vamos a escribir en % el fichero. fprintf(fid,’%1.1f % 2.6e’,x) % Escribe en el fichero los datos con el % siguiente formato: % La primera columna [un entero].[un decimal] % La segunda [dos enteros].[6 decimales en % modo exponencial] fclose(fid) % Manda los datos al fichero fid En los manuales se pueden encontrar m´s detalles sobre el formato de los datos. a Cuando no sea necesario manejar directamente un fichero con los datos sino que ´nicamente necesitamos guardar u los datos para otra su uso en otra sesi´n, podemos utilizar el comando o save. El formato se muestra en el siguiente ejemplo: >> a=[1 2 3;4 5 6]; Crea la variable a >> b=2:2:10; Crea la variable b >> save datos1 Guarda el valor de todas las variables en el fichero datos1.mat >> save datos2 a Guarda en el fichero datos2 la variable a >> clear eliminamos todas las variables >> whos No hay variables declaradas >> load datos2 El comando load lee el fichero de datos datos2.mat >> a a= 1 2 3 4 5 6 >> clear >> load datos1 >> a,b a= 1 2 3 4 5 6 b= 2 4 6 8 10 Otras opciones como el comando diary se pueden consultar en los manuales. Gu´ R´pida de Matlabdvips . ıa a 16
  • 18. 2.5 Lectura y escritura de datos (Entrada/salida de datos) m at 2.5.2 Lectura de datos La lectura de datos nos permite asignar un valor a una o a m´s variables mediante acciones externas. bien desde el a teclado del ordenador ´ bien desde un fichero. o seudoc´digo. Si el nombre de la variable es o VARIABLE la acci´n lectura se escribe como o lee VARIABLE 1) El comando de MATLAB para la lectura de un dato desde el teclado es input que se utiliza como aparece en el ejemplo >> z=input(’El valor de la variable z es:n’) [ENTER] El valor de la variable z es: 12 z= 12 2) Para leer el valor de una variable en un fichero con un formato establecido se puede utilizar el comando load. Mostremos el siguiente ejemplo: Dado el fichero data.dat 1 2 3 4 5 6 7 8 9 podemos teclear >> load data.mat [ENTER] Carga los datos del fichero data.dat en la variable data >> data data = 1 2 3 4 5 6 7 8 9 3) Otra opci´n para leer el valor de una variable en un fichero con un formato establecido hace uso de los comandos o descritos para la apertura y el cierre de un fichero, y de otro para la lectura propiamente dicha, en concreto: >> A=fscanf(fid,format,tama~o) n donde • fid es el identificador del fichero. • format es un cadena con las mismas opciones que fprintf. • tama~o es un argumento optativo que permite limitar el n´mero de datos leidos. El valor que puede tomar n u este argumento es uno de los siguientes – N: Lee un vector de hasta N componentes. – inf: Lee datos hasta el final del fichero. – [N,M]: Lee una matriz de tama˜o N x M por columnas (M puede se inf). n En el siguiente ejemplo se muestra como se puede leer el fichero creado en el ejemplo anterior Gu´ R´pida de Matlabdvips . ıa a 17
  • 19. 2.6 Programaci´n modular: Funciones o m at fid=fopen(’parabola.dat’,’r’) % Crea un puntero a un fichero llamado % parabola.dat para leer de ’el (r) z=fscanf(fid,’%1.1f %2.6e’,11) % Lee del fichero los datos con el % siguiente formato: % La primera columna [un entero].[un decimal] % La segunda [dos enteros].[6 decimales en % modo exponencial] fclose(fid) % Cierra el fichero identificado por fid 2.6 Programaci´n modular: Funciones o En programaci´n, al realizar una operaci´n, aparecen con frecuencia los siguientes problemas: o o • La tarea debe realizarse varias veces. • Dicha tarea es realizada en varios programas. • Aparece en el contexto de un programa muy extenso que conviene simplificar. Para resolver este tipo de problemas se usan lo que se llaman funciones que no son m´s que programas que son utilzados a por otros programas. Cualquier programa puede considerarse como una funci´n subceptible de ser usado por otro programa o La posibilidad de llamar a estas funciones tantas veces como sea necesario nos permite no tener que escribir el programa cada vez que lo necesitemos. Por otra parte, las funciones nos permiten descomponer el programa en subprogramas m´s sencillos. a En relaci´n con el modo de definir funciones haremos las siguientes observaciones: o 1) Se guarda como un fichero funcion.m cuyo nombre ha de coincidir con el de la funci´n. o 2) Ha de estar encabezado por la linea function[salida1,...,salidaN]=nombre(entrada1,...,entradaM) seguido por los comandos del programa. 3) La funci´n termina su tarea con el ´ltimo comando del programa, sin necesidad de ning´n comando espec´ o u u ıfico, aunque ´sta acci´n es posible con el comando e o return. 4) Desde la propia funci´n se puede hacer llamadas a otras funciones o incluso a ella misma (lo que se conoce como o recursividad). 5) Las variables usadas en cada funci´n toman un valor local. Por tanto, una variable con el mismo nombre en una o funci´n y en el programa principal mantiene el valor que tome en cada uno de los contextos. o Escribimos un sencillo ejemplo que hace llamada a una funci´n llamada o factorial m=input(’Da el numero de sumandos n’); x=0; for n=1:1:m x=x+1/factorial(n); end x Gu´ R´pida de Matlabdvips . ıa a 18
  • 20. 2.7 Otras Observaciones m at donde la funci´n o factorial viene definida por function[k]=factorial(n) k=1; for m=2:1:n k=k*m; end 2.7 Otras Observaciones Para terminar esta introducci´n a˜adimos algunas observaciones m´s. o n a 1) Los s´ ımbolos “,” “;” “:” sirven para: separar operaciones dentro de un l´ ınea (“,”); para delimitar campos dentro de un comando (“:”) ´ para evitar que el resultado de un comando no salga por pantalla (“;”). o >> 2+3; 3+4 [ENTER] ans = 7 Los puntos “...” se usar´n para continuar un comando cuando no nos quepa completo en un sola l´ a ınea. 2) Con las flechas ↑ y ↓ recuperamos las operaciones realizadas anteriormente. 3) Para obtener ayuda sobre MATLAB debemos de teclear cualquiera de los comandos >> help [ENTER] >> helpwin [ENTER] Aparece una ventana de ayuda en Windows. 4) El s´ ımbolo “%” indica a MATLAB que no tenga en cuenta lo que se encuentra a continuaci´n en la misma l´ o ınea (comentario). Esto vendr´ bien cuando queremos explicar los programas que hagamos. a 5) Desde la l´ ınea de comandos de MATLAB podemos ejecutar comandos propios del sistema (MSDOS, Linux,...) como por ejemplo >> dir >> cd directorio >> del fichero Gu´ R´pida de Matlabdvips . ıa a 19
  • 21. Cap´ ıtulo 3 Gr´ficos con MATLAB a 3.1 Gr´ficos de dos dimensiones a El usuario de MATLAB puede dibujar f´cilmente un conjunto de pares de puntos, y una forma de hacerlo es mediante a el comando plot. 3.1.1 El comando plot El uso del comando plot es el siguiente >> plot(argumentos) y los argumentos que toma pueden ser Argumentos Explicaci´n o n plot(x) x ∈IR Dibuja los pares de puntos (i, xi ), 1 ≤ i ≤ n, unidos por segmentos. plot(x,y) x, y ∈ I n R Dibuja los pares de puntos (xi , yi ), 1 ≤ i ≤ m, unidos por segmentos. Dibuja en el plano complejo los pares de puntos ( (zi ), (zi )), 1 ≤ plot(z) z ∈ Cn i ≤ n , unidos por segmentos. Para cada j , 1 ≤ j ≤ n, dibuja los pares de puntos (i, aij ), 1 ≤ i ≤ m, unidos por segmentos. plot(A) A ∈ Mm×n En la misma gr´fica, cada l´ a ınea se dibuja con un color y con un tipo de l´ ınea diferente. Independientemente de que x sea un vector fila o columna, ejecuta plot(x,y) donde y es una fila o columna de A, para la elecci´n de la o plot(x,A) x ∈ I n , A ∈ Mm×n R fila y columna se tiene en cuenta la coincidencia de dimensiones. En la misma gr´fica, cada l´ a ınea se dibuja con un color y con un tipo de l´ ınea diferente. En las mismas condiciones que el caso anterior dibuja los pares orde- plot(A,x) x ∈ I n , A ∈ Mm×n R nados siendo x el valor de las ordenadas Ejecuta plot(x,y), donde x es una columna de A e y es una columna de B. plot(A,B) A,B ∈ Mm×n En la misma gr´fica, cada l´ a ınea se dibuja con un color y con un tipo de l´ ınea diferente. Veamos algunos ejemplos. Al ejecutarlos por primera vez aparece una nueva ventana que es la ventana gr´fica, en a esta se muestra el dibujo realizado por plot (o cualquiera de los comandos que introduciremos), sin embargo, si vamos Gu´ R´pida de Matlabdvips . ıa a 20
  • 22. 3.1 Gr´ficos de dos dimensiones a m at realizando los ejemplos uno a uno sin cerrar la ventana gr´fica ´sta se oculta pasando a ser una ventana secundaria a e en la que se van sustituyendo las gr´ficas por las que actualmente dibujamos. Cada vez que queramos ver una gr´fica a a tenemos que hacerla ventana principal ya que no se realiza autom´ticamente. a Dibujemos el vector de ordenadas y el de abcisas: 25 >> x=[-4 -2 0 1 3 5]; [ENTER] 20 >> y=[16 4 0 1 9 25]; [ENTER] >> plot(x,y); [ENTER] 15 10 5 0 −4 −3 −2 −1 0 1 2 3 4 5 Dibujemos un vector de n´meros complejos: u 1 0.5 >> z=[1 2+i 3 2-i 3-2*i]; [ENTER] >> plot(z); [ENTER] 0 −0.5 −1 −1.5 −2 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 Para dibujar n´meros complejos tambi´n se pueden utilizar los comandos u e polar, quiver, feather, compass, rose y pol2cart. (consultar la secci´n 3.2). o Dibujemos una matriz: 25 >> A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16 20 -0.5; 5 25 0.5]; [ENTER] >> plot(A); [ENTER] 15 10 5 0 −5 1 1.5 2 2.5 3 3.5 4 4.5 5 Gu´ R´pida de Matlabdvips . ıa a 21
  • 23. 3.1 Gr´ficos de dos dimensiones a m at Si en el ejemplo anterior elegimos las ordenadas obtenemos: 25 20 >> x=[0 0.1 0.2 0.3 0.4]; [ENTER] >> A=[1 1 0.5; 2 4 -0.5; 3 9 0.5; 4 16 15 -0.5; 5 25 0.5]; [ENTER] 10 >> plot(x,A); [ENTER] 5 0 −5 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 1.5 Tambi´n podemos dibujar diferentes funciones en el mismo e gr´fico. a 1 >> x=0:0.1:2; [ENTER] 0.5 >> A=[sin(pi*x); 0.5+0.5*x]; [ENTER] >> plot(x,A); [ENTER] 0 −0.5 −1 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 2 Podemos intercambiar los ejes sin m´s que escribir a 1.8 1.6 1.4 >> plot(A,x) [ENTER] 1.2 1 0.8 0.6 0.4 0.2 0 −1 −0.5 0 0.5 1 1.5 3.1.2 Opciones del comando plot Existe una serie de opciones para realizar gr´ficos con MATLAB entre las que destacamos las siguientes: a Explicaci´n o Dibuja la gr´fica de abcisas a x y ordenadas y con las opciones de estilo plot(x,y,cad) dadas por cad. Dibuja la gr´fica de abcisas a x1 y ordenadas y1 con las opciones de estilo dadas porcad1, la gr´fica de abcisas x2 y ordenadas y2 con las a plot(x1,y1,cad1, x2,y2,cad2,...) opciones de estilo dadas por cad2 y as´ con el resto de ternas. Si se ı omiten las opciones de estilo MATLAB escoge el color y estilo para cada gr´fico. a Los estilos de l´ ıneas y colores se determinan con una variable caracter de a lo sumo tres de caracteres que hemos Gu´ R´pida de Matlabdvips . ıa a 22
  • 24. 3.1 Gr´ficos de dos dimensiones a m at denotado porcad. Las ternas se construyen con un car´cter de cada columna sin importar el orden. As´ por ejemplo, a ı cad=’ys-’ dibuja una l´ ınea amarilla, s´lida y con cuadrados como marcadores, exactamente igual que cad=’s-y’ o o cad=’sy-’ aunque siempre es mejor ser hom´geneos en cada uno de los usos de estos par´metros. Los tama˜os de los o a n s´ ımbolos, las anchuras de las l´ ıneas y otros aspectos del dibujo pueden ser modificados como ya veremos posteriormente. Si no se especifica el estilo, MATLAB utiliza por defecto una l´ ınea azul continua sin marcadores para los puntos dibujados. Marcadores L´ ıneas Colores . punto - s´lida o y amarillo * estrella -- discont´ ınua g verde x cruz -. punto-raya m magenta o c´ ırculo : punteada b azul + m´s a c cyan s cuadrado w blanco d rombo r rojo p pent´gono a k negro h hex´gono a v tri´ngulo abajo a < tri´ngulo izquierda a > tri´ngulo derecha a ^ tri´ngulo arriba a Veamos algunos ejemplos. Dibujamos una gr´fica con c´ a ırculos. 0.5 >> x=-pi:0.05:pi; [ENTER] 0.4 0.3 >> plot(x, sin(x).*cos(x),’o’); 0.2 [ENTER] 0.1 0 −0.1 −0.2 −0.3 −0.4 −0.5 −4 −3 −2 −1 0 1 2 3 4 Tecleamos el siguiente fichero: n=50; % Asignamos valores a las variables a=0; b=3; x=linspace(a,b,n); % Construimos el vector x e1=exp(-x.^2); % y los vectores de abcisas e2=(x.^2).*exp(-x.^2); e3=x.*exp(-x.^2); e4=exp(-x); plot(x,e1,’+’,x,e2,’*’,x,e3,’o’,x,e4,’x’); % Dibujamos las gr’aficas Gu´ R´pida de Matlabdvips . ıa a 23
  • 25. 3.1 Gr´ficos de dos dimensiones a m at 1 La ejecuci´n del fichero anterior desde la ventana de MATLAB o 0.9 nos muestra como se pueden superponer varias gr´ficas, en a 0.8 2 2 2 concreto las de las funciones e−x , x2 e−x , x e−x y e−x , 0.7 diferenci´ndolas mediante distintos estilos de l´ a ınea. 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.5 1 1.5 2 2.5 3 3.1.3 Otros comandos Concluimos la secci´n con dos comandos gr´ficos de uso frecuente en MATLAB. El primero de ellos es el comando o a errorbar, que nos permite incorporar a la gr´fica, mediante barras verticales, el error cometido. Este comando se a usa como el comando plot, pero con un argumento m´s que indica el margen de error. En concreto: a Argumentos Explicaci´n o Ejecuta plot(x,y,cad) superponiendo las barras de error x, y, e ∈ I n , R dadas por el vectore (de valores positivos) sim´tricamente e errorbar(x,y,e,cad) cad es una por encima y por debajo de la gr´fica. El argumento cad es a variable cadena opcional. x, y, e ∈ I n , R Ejecuta plot(x,y,cad), superponiendo en la gr´fica corre- a errorbar(x,y,u,e,cad) cad es una spondiente las barras de error dadas por los vectores positivos variable cadena u (las cotas superiores) y l (las cotas inferiores). En este ejemplo generamos una serie de datos con cotas de 3.5 error de un 15%. Mostramos la gr´fica con los errores como a sigue 3 >> x=linspace(0,10,50); [ENTER] 2.5 >> y=exp(sin(x)); [ENTER] 2 >> delta=0.15*y; [ENTER] 1.5 >> errorbar(x,y,delta); [ENTER] 1 0.5 0 −2 0 2 4 6 8 10 12 fplot, que nos permite dibujar funciones, especificadas mediante ’fcn’. Estas El segundo de los comandos es pueden ser predefinidas por MATLAB o definidas por el usuario, en este caso ’fcn’ indica una referencia a un M-file de nombre fcn.m. M´s concretamente, a Gu´ R´pida de Matlabdvips . ıa a 24
  • 26. 3.2 Gr´ficos con n´meros complejos a u m at Argumentos Explicaci´n o Dibuja el gr´fico de la funci´n especificada en la cadena a o lim ∈ I 2 , R fplot(’fcn’, lim, cad) fcn en el intervalo de abcisas determinado por lim. ’fcn’, cad cadenas La cadena cad que indica el estilo de l´ ınea es opcional. lim ∈ I 4 , R Idem que el anterior pero lim determina tambi´n las e fplot(’fcn’, lim, cad) ’fcn’, cad cadenas ordenadas. lim ∈ I (2 ´ 4) , R o fplot(’fcn’, lim, cad, En las mismas condiciones, pero especificando la pre- tol ∈ I R, tol) cisi´n con o tol que por defecto es 2e − 3. ’fcn’, cad cadenas Dibujemos la funci´n seno en el intervalo o [0, 10]: 1 >> fplot(’sin(x^2)’, [0 10]) [ENTER] 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 0 1 2 3 4 5 6 7 8 9 10 Destaquemos que MATLAB obtiene autom´ticamente la escala de los ejes de la gr´fica, utilizando el m´ a a ınimo y el m´ximo de los datos, tanto en el eje de las ordenadas como en el de las abcisas. Para modificar dicha escala podemos a utilizar el comando axis (ver secci´n 3.4). o 3.2 Gr´ficos con n´ meros complejos a u Dibuja en coordenadas polares. tetha son los Los elementos del vector polar(theta,r) r son las distancias al origen. ´ngulos en radianes, y los elementos del vector a Convierte las coordenadas polares dadas por theta y r en coordenadas car- pol2cart(theta,r) tesianas. Vamos a ver dos ejemplos. >> r = linspace(0,2); [ENTER] 2 >> theta = linspace(0,10*pi); [ENTER] 1.5 >> [x,y] = pol2cart(theta,r); [ENTER] 1 >> z = x+i*y; [ENTER] 0.5 >> plot(z); [ENTER] 0 −0.5 −1 −1.5 −2 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 Gu´ R´pida de Matlabdvips . ıa a 25
  • 27. 3.2 Gr´ficos con n´meros complejos a u m at En el segundo de los ejemplos dibujaremos la funci´n o t5 r = ecost − 2 cos 4 t + sin 12 tanto en coordenadas polares como en coordenadas cartesianas. 90 5.0543 120 60 >> t = linspace(0,22*pi,1100);[ENTER] 150 2.5272 30 >> r = exp(cos(t))-2*cos(4*t)+sin(t.5 /12);[ENTER] 180 0 >> polar(t,r);[ENTER] 210 330 240 300 >> [x,y] = pol2cart(t,r);[ENTER] 270 >> plot(x,y);[ENTER] 4 2 0 −2 −4 −3 −2 −1 0 1 2 3 4 Un vector de n´meros complejos pueden ser dibujado tambi´n con los comandos u e quiver, feather, compass y rose, tal y como se detalla a continuaci´n. o Dibuja una flecha para cada par de coordenadas dadas. Muestra el argumento quiver(x,y) y magnitud del n´mero complejo que tiene ese par de coordenadas reales. u Dibuja una flecha en las coordenadas (xi , yi ) con el argumento y magnitud quiver(x,y,dx,dy) dados por(dxi , dyi ). El par´metro s indica la escala con la que se dibujan las flechas, que por a quiver(x,y, ...,s) defecto toma el valor 1. Dibuja flechas mostrando las magnitudes y argumentos de los elementos de feather(z) la matriz complejaz , estas flechas parten de puntos equidistantes del eje x. Como feather pero en este caso todas ellas tienen como origen el origen de compass(Z) coordenadas. Dibuja un histograma de ´ngulos, es decir, un histograma circular mostrando a rose(v,n) la frecuencia de los ´ngulos dados en el vector a v ; se utilizan n intervalos. En el caso de no especificar n, el valor por defecto es 36. Veamos algunos ejemplos. Sea Z la matriz compleja definida como:   1+i 2 − i 3 − 5i Z =  −4 + 3 i 5 − 5 i i  −1 − i 3 + 3 i −1 Los siguientes comandos producen en la misma ventana las diferentes gr´ficas. a >> Z=[1+i 2-i 3-5*i; -4+3*i 5-5*i i ;-1-i 3+3*i -1]; [ENTER] >> clf; [ENTER] >> subplot(2,2,1); quiver(real(Z),imag(Z)); title(’quiver’); [ENTER] >> subplot(2,2,2); feather(Z); title(’feather’); [ENTER] >> subplot(2,2,3); compass(Z); title(’compass’); [ENTER] >> subplot(2,2,4); rose(angle(Z(:))); title(’rose’); [ENTER] Gu´ R´pida de Matlabdvips . ıa a 26
  • 28. 3.3 Gr´ficos en otros sistemas coordenados a m at quiver feather 3.5 4 3 2 2.5 2 0 1.5 −2 1 −4 0.5 0 −6 0 1 2 3 4 −5 0 5 10 compass 90 7.0711 rose 2 90 120 60 120 60 150 3.5355 30 150 1 30 180 0 180 0 210 330 210 330 240 300 240 300 270 270 3.3 Gr´ficos en otros sistemas coordenados a El comando plot dibuja gr´ficos en coordenadas cartesianas; sin embargo, tambi´n es posible utilizar otros sistemas a e de coordenadas. Utiliza coordenadas logar´ ıtmicas en el eje x. El resultado es el mismo que semilogx(x,y) utilizarplot(log10(x),y) pero no produce ning´n error si tenemos que u calcular log10 0. Es el mismo comando anterior, pero esta vez la escala logar´ ıtmica est´ en el a semilogy(x,y) eje y. loglog(x,y) Dibuja ambos ejes en escala logar´ ıtmica. Como ejemplo dibujemos un gr´fico en un sistema de coordenadas logar´ a ıtmicas y lo comparamos con el mismo gr´fico en coordenadas cartesianas. a Gu´ R´pida de Matlabdvips . ıa a 27
  • 29. 3.4 Controlando los gr´ficos a m at >> x=linspace(0,7); [ENTER] 1200 >> y=exp(x); [ENTER] 1000 >> subplot(2,1,1); plot(x,y); [ENTER] 800 >> subplot(2,1,2); semilogy(x,y); 600 [ENTER] 400 200 0 0 1 2 3 4 5 6 7 4 10 3 10 2 10 1 10 0 10 0 1 2 3 4 5 6 7 3.4 Controlando los gr´ficos a Los gr´ficos en MATLAB son objetos y los comandos que mostramos en esta secci´n son algunos de los que se utilizan a o para definir y modificar esos objetos y el entorno en el que se crean. figure(gfc) Permite mostrar la ventana gr´fica actual y crear nuevas ventanas gr´ficas. a a clf Borra el contenido la ´ltima ventana gr´fica utilizada. u a delete(n) Borra la ventana gr´fica a n. clc Borra la ventana de comandos sin borrar la memoria. home Mueve el cursor hacia la esquina izquierda superior de la ventana de comandos. Permite superponer gr´ficos hasta que se desactiva la opci´n con el comando a o hold on hold off. hold off Desactiva la opci´n o hold on. hold Intercambia las opciones hold on a hold off y viceversa. Es un comando l´gico que devuelve 1 si para el actual gr´fico est´ activada o a a ishold la opci´n o hold on ´ 0 en caso contrario. o Un comando de uso muy frecuente es subplot, que se utiliza para dibujar en la misma ventana gr´fica varios a dibujos. Este comando no dibuja nada, pero permite dividir la ventana gr´fica en varias subventanas y dibujar en cada a una de ellas con cualquiera de los comandos vistos anteriormente y de los que veremos posteriormente. Divide la ventana gr´fica en a m filas y n columnas y hace que la subventana subplot(m,n,p) p sea la actual. Las ventanas se numeran desde la izquierda a la derecha y desde arriba hacia abajo. Tambi´n puede ser utilizado como subplot(mnp). e subplot Pasa la ventana gr´fica a su estado por defecto (subplot(1,1,1)) . a Los siguientes comandos dibujan la funci´n o f (x) = −x · sin x, en la ventana superior izquierda, su derivada en la ventana superior derecha, una aproximaci´n de la derivada en la ventana inferior izquierda y el error relativo en la o ventana inferior derecha. >> x=linspace(-10,10,1000); [ENTER] >> y11=(-x).*sin(x); [ENTER] >> y12=(-x).*cos(x)-sin(x); [ENTER] Gu´ R´pida de Matlabdvips . ıa a 28
  • 30. 3.4 Controlando los gr´ficos a m at >> y21=diff(y11)./(x(2)-x(1)); [ENTER] >> y22=(y21-y12(1:999))./norm(y12); [ENTER] >> subplot(2,2,1); plot(x,y11); title(’La funcion’); [ENTER] >> subplot(2,2,2); plot(x,y12); title(’La derivada’); [ENTER] >> subplot(2,2,3); plot(x(1:999),y21); title(’Aproximacion a la derivada’) [ENTER] >> subplot(2,2,4); plot(x(1:999),y22); title(’Error relativo cometido’) [ENTER] La funcion La derivada 6 10 4 5 2 0 0 −2 −4 −5 −6 −8 −10 −10 −5 0 5 10 −10 −5 0 5 10 Aproximacion a la derivada −4 Error relativo cometido x 10 10 8 6 5 4 0 2 0 −5 −2 −10 −4 −10 −5 0 5 10 −10 −5 0 5 10 Las subventanas definidas por el comando subplot pueden ser de diferentes tama˜os dentro de la misma ventana n como muestra el siguiente ejemplo. Editamos un fichero M-file para calcular el fractal de Mandelbrot y mostrarlo de tres formas diferentes. El programa parte de una red de puntos definida por el usuario en el plano complejo e itera con cada n´mero ξ de la red de acuerdo u con el siguiente algoritmo: z0 = 0 2 zi+1 = zi + ξ. El programa asigna al punto de la red que estamos calculando el n´mero de iteraciones (con un m´ximo de u a 100) que hacen falta para que los t´rminos de la sucesi´n disten del l´ e o ımite menos que una cantidad ε > 0. Se genera de esta manera una matriz mandelbrot del mismo tama˜o que la red. n function y = mandelb(renum,imnum) % Programa Mandelbrot epsilon=1e-14; renum=input(’renum: ’); % Lee el numeros de nodos en el eje real imnum=input(’imnum: ’); % Lee el numeros de nodos en el eje imaginario remin=-2; remax=1 ; immin=-1.5; immax=1.5; % Define los parametros de la red reval1= linspace(remin,remax,renum); imval1= linspace(immin,immax,imnum); % Define vectores del tama~no correcto [Reval, Imval]=meshgrid (reval1,imval1); % Define la red de puntos Imvalreal=Imval; Gu´ R´pida de Matlabdvips . ıa a 29
  • 31. 3.4 Controlando los gr´ficos a m at Imval=Imval*i; Cgrid=Reval+Imval; for reind=1:renum disp([’reind=’,int2str(reind)]); % Indica en que nodo estamos for imind= 1:imnum c=Cgrid(reind,imind); numc=0; zold=0.0+0.0*i; z=zold^2+c; while(abs(z) <= 2) & (abs(z-zold) >= epsilon) & ... (numc < 100) numc=numc+1; zold=z; z=zold^2+c; end Mandelbrot(reind,imind)= numc; end end % Mostramos la matriz de Mandelbrot de tres formas diferentes clf; % Borra la figura %whitebg(’k’); % Fondo negro subplot(2,2,1); % Esquina superior izquierda mesh(reval1,imval1,Mandelbrot); % Dibuja la red en tres dimensiones axis([-2 1 -1.5 1.5 0 100]) % Cambia los limites de los ejes subplot(2,2,2); contour(reval1, imval1, Mandelbrot, 100) % Dibuja la red como un contorno subplot(2,1,2); % Figura inferior, dibuja solo una surf(Reval,Imvalreal, Mandelbrot); % Dibuja la red como una superficie view(2); % Punto de vista abajo. shading flat; % Determina que cada ret’{i}culo tiene un color colormap(flipud(jet)); % Define el mapa de colores. colorbar; axis([-2 1 -1.5 1.5]); % Dibuja la barra de colores al lado del gr’afico Gu´ R´pida de Matlabdvips . ıa a 30
  • 32. 3.4 Controlando los gr´ficos a m at 1.5 100 1 0.5 50 0 −0.5 0 1 1 −1 0 0 −1 −1 −1.5 −2 −2 −1 0 1 1.5 100 1 80 0.5 60 0 40 −0.5 −1 20 −1.5 0 −2 −1.5 −1 −0.5 0 0.5 1 Los ejes de cada dibujo son escalados autom´ticamente para mostrar todos los puntos en la ventana. Puede ocurrir a que no se vean algunos de los puntos, porque coinciden con los ejes, pues bien, el comando axis nos permite modificar la escala de los ejes. Devuelve los l´ ımites del dibujo actual en un vector fila. Para gr´ficos de dos a axis dimensiones tiene los elementos [xmin xmax ymin ymax ] y para gr´ficos de a tres dimensiones [xmin xmax ymin ymax zmin zmax ]. Establece la escala de los ejes conforme al vector v que ser´ a [xmin xmax ymin ymax ] en dos dimensiones o axis(v) [xmin xmax ymin ymax zmin zmax ] en tres dimensiones (en escala lo- gar´ ıtmica, tambi´n se utilizan valores actuales, no logar´ e ıtmicos). Bloquea la escala cuando se a˜aden dibujos posteriores a uno que se ha n axis(axis) mantenido con el comando hold. Obtenemos diferentes resultados dependiendo de la cadena cad utilizada: • ’auto’ Vuelve a la escala autom´tica. a • ’equal’ Da la misma escala en ambos ejes. • ’ij’ Intercambia la parte positiva y negativa del eje y. • ’xy’ Deshace el anterior. • ’image’ Igual que equal pero se ajusta al dibujo. axis(cad) • ’square’ Modifica la ventana gr´fica para hacer que la caja del dibujo a sea cuadrada. • ’normal’ Modifica la ventana gr´fica para que la caja del dibujo vuelva a al tama˜o habitual. n • ’off’ No se muestran los ejes. • ’on’ Deshace el comando anterior. Tambi´n podemos cambiar la escala por medio del rat´n y ello es posible gracias al comando e o zoom que se utiliza como se muestra a continuaci´n. o Gu´ R´pida de Matlabdvips . ıa a 31
  • 33. 3.4 Controlando los gr´ficos a m at Permite agrandar la ventana con el bot´n izquierdo del rat´n, inhabilit´ndolo o o a zoom on con el bot´n derecho. Tambi´n permite seleccionar un ´rea para visualizarla o e a mejor. zoom off Deshace el comando anterior. zoom Intercambia las posiciones de zoom. zoom out Establece la escala. Con los siguientes comandos representaremos el c´ ırculo unidad en diferentes escalas: >> t=0:0.2:2*pi+0.2; [ENTER] >> x=sin(t); [ENTER] 1 >> y=cos(t); [ENTER] 0.5 >> subplot(3,1,1); [ENTER] 0 −0.5 >> plot(x,y,’-’); [ENTER] −1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 >> subplot(3,1,2); [ENTER] 1 >> plot(x,y,’-’); [ENTER] 0.5 0 >> axis square; [ENTER] −0.5 >> subplot(3,1,3); [ENTER] −1 −1 0 1 >> plot(x,y,’-’); [ENTER] 2 >> axis normal; [ENTER] 0 >> grid; [ENTER] −2 >> axis([-2 2 -3 3]); [ENTER] −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 En en el ejemplo anterior hemos utilizado el comando grid que describimos a continuaci´n. o grid on Dibuja una red en la ventana gr´fica. a grid off Borra la red de la ventana gr´fica. a grid Intercambia las posiciones de grid. En muchas ocasiones necesitamos incluir texto en la ventana gr´fica para lo que podemos utilzar varios comandos. a Gu´ R´pida de Matlabdvips . ıa a 32
  • 34. 3.4 Controlando los gr´ficos a m at title(txt) Escribe la variable cadena txt como un t´ ıtulo centrado encima del gr´fico. a xlabel(txt), Escribe la variable cadena txt como una etiqueta bajo el eje x, y y z respec- ylabel(txt), tivamente. zlabel(txt) Escribe la variable cadena txt en la posici´n (x, y) de la ventana gr´fica. o a Las coordenadas x e y est´n proporcionadas en las mismas unidades en las a que est´ dibujado el gr´fico. Si x e y son vectores, la variable cadena se a a text(x,y,txt) escribe en todos los pares de puntos (xi , yi ). Si txt es un vector de variable cadenas con el mismo n´mero de filas que x e y, se escribe una de ellas en u cada una de las posiciones. Escribe la variable cadena txt en la posici´n de la ventana de gr´ficos que o a gtext(txt) elija el usuario. Una cruz indica la posici´n donde se quiere colocar el texto o y es seleccionada mediante las teclas de desplazamiento o mediante el rat´n. o Escribe en un peque˜o recuadro, las variables cadenas n st1, st2, etc, al lado legend(st1,st2, ...) de los estilos de linea utilizados en cada una de las gr´ficas. Este peque˜o a n recuadro puede moverse mediante el rat´n. o legend(l1,st1, Escribe una leyenda pero se especifican los estilos de l´ ınea. l2,st2, ...) legend off Elimina la leyenda del dibujo actual. Tambi´n hay comandos que convierten los n´meros en variable cadenas, e u num2str, int2str, sprintf, ... que pueden ser ´tiles y algunas veces necesarias para utilizarlos juntos con estos comandos de texto. u El siguiente programa dibuja un camino aleatorio (mediante la funci´n o rand). Este camino se puede considerar como una simulaci´n del movimiento de una part´ o ıcula en el aire. function y=particle(n) % Camino aleatorio. Una particula empieza en el origen, y se mueve % aleatoriamente hacia otra direccion en cada paso. x=cumsum(rand(n,1)-0.5); % Valores aleatorios de x y=cumsum(rand(n,1)-0.5); % Valores aleatorios de x clf; plot(x,y); hold on; plot(x(1),y(1),’o’,x(n),y(n),’o’); axs=axis; scale=axs(2)-axs(1); text(x(1)+scale/30,y(1),’Inicio’); text(x(n)+scale/30,y(n),’Fin’); hold off; xlabel(’x’); ylabel(’y’); title(’Random walk’); El resultado es el siguiente gr´fico. a Gu´ R´pida de Matlabdvips . ıa a 33
  • 35. 3.4 Controlando los gr´ficos a m at Random walk 2 1 Fin 0 Inicio −1 y −2 −3 −4 −9 −8 −7 −6 −5 −4 −3 −2 −1 0 x Los comandos ginput y waitforbuttonpress proporcionan al programador de MATLAB herramientas para crear programas interactivos simples. Lee las coordenadas desde la ventana de gr´ficos. Aparece un cursor que se a maneja bien con el rat´n o bien con las teclas de desplazamiento vertical y o [x,y]=ginput horizontal. Presionado una tecla o un bot´n del rat´n se env´ las coorde- o o ıan nadas a MATLAB que las almacena en los vectores x e y. El proceso termina cuando se presiona la tecla [RETURN]. [x,y]=ginput(n) Lee n coordenadas de la ventana gr´fica. a Detiene el dibujo de gr´ficos hasta que se presiona una tecla o un bot´n del a o waitforbuttonpress rat´n. o El siguiente programa dibuja un gr´fico con puntos especificados por el usuario. Cuando el dibujo termina, el a programa espera que el usuario haga clic en la figura antes de borrarlo. n=figure; % nueva ventana grafica; disp(’Para dibujar una poligonal en la figura:’); disp(’presiona el boton izqdo para empezar,’); disp(’Para parar presiona el boton dcho’); [x,y,t]=ginput(1); plot(x,y,’o’) xx=x;yy=y; hold; axis([0 1 0 1]); % superponer el grafico y se establecen % los ejes while t~=3 [x,y,t]=ginput(1); plot(x,y,’o’) xx=[xx x]; yy=[yy y]; end clf; line(xx,yy); disp(’Aprieta en la figura cuando este terminado’) waitforbuttonpress delete(n); Gu´ R´pida de Matlabdvips . ıa a 34
  • 36. 3.5 Dibujando curvas de nivel m at 3.5 Dibujando curvas de nivel Las curvas de nivel de una funci´n en dos variables se pueden dibujar en dos y tres dimensiones gracias al comando o contour en el primero de los casos y al comando contour3 en segundo. Estos dos comandos s´lo pueden ser utilizados o sobre una red rectangular previamente definida. Dibuja las curvas de nivel de la matriz Z, en n niveles. Si no se especifica n se dibujan 10 niveles. Los elementos se interpretan como niveles sobre el contour(Z,n,cad) plano XY . cad es opcional y especifica el estilo de linea. contour(Z,v) Dibuja los niveles especificados en el vector v. En las mismas condiciones que el comando anterior, pero se especifica la red contour(x,y,Z,n,v) sobre la que se va a dibujar la gr´fica a x × y y la escala de los ejes. Calcula la matriz C de contorno sin dibujar las lineas de contorno, utiliz´ndose a contourc los mismos par´metros que en los casos anteriores. a Dibuja las curvas de nivel en tres dimensiones utiliz´ndose los mismos a contour3 par´metros que en los casos anteriores. a Escribe los valores de los niveles que representan las curvas de nivel. Las po- siciones son aleatorias. C es la matriz que devuelven los comandos contour clabel(C) y contour3. Se pueden especificar los niveles, con un vector v y tambi´n se puede realizar e manualmente indic´ndolo con la etiqueta ’manual’. a Los siguientes comandos nos dan las curvas de nivel de una matriz que describe la superficie de una funci´n de dos o variables. >> [x,y]=meshgrid(-3:1/8:3); [ENTER] >> Z=peaks(x,y).*sin(x); [ENTER] >> subplot(2,1,1); [ENTER] 40 >> v1=-4:-1; [ENTER] 30 >> v2=0:4; [ENTER] 20 >> contour(Z,v1,’k-’); [ENTER] 10 >> hold on; [ENTER] >> contour(Z,v2,’k--’); [ENTER] 5 10 15 20 25 30 35 40 45 >> hold off; [ENTER] −1 >> subplot(2,1,2); [ENTER] 40 −2 −3 3 2 1 1 >> C=contour(Z); [ENTER] 30 2 0 −1 3 >> clabel(C); [ENTER] 20 0 −2 1 −3 −1 0 −2 10 0 5 10 15 20 25 30 35 40 45 Como puede verse hemoos utilizado el comando peaks que genera una matriz trasladando y reescalando la distri- buci´n gaussiana en dos dimensiones. o Gu´ R´pida de Matlabdvips . ıa a 35
  • 37. 3.5 Dibujando curvas de nivel m at En ocasiones puede ser necesario definir una determinada red para dibujar las curvas de nivel de una matriz Z . El dominio se define mediante dos vectores x e y de longitudes n y m, respectivamente, para los valores de la red. En la siguiente tabla se muestran los comandos que nos permieten construir dichas redes, incluso en tres dimensiones, sobre un cilindro o sobre una esfera. Comando que obtiene la red adecuada para hacer gr´ficas tridimensionales a a [U,V]=meshgrid(x,y) partir de los vectores x e y. [U,V,W]=meshgrid(x,y,z) Obtiene una red tridimensional. Devuelve las matrices correspondientes para la superficie de un cilindro o un cono. Los radios del cilindro se toman del vector r, que contienen los radios [X,Y,Z]=cylinder(r,n) en n puntos equidistantes en el eje del cilindro. Si no se especifica n, se utiliza n = 20. [x,y,z]=sphere(n) Devuelve n coordenadas igualmente espaciadas sobre una esfera unidad. Como ejemplo de uso del comando meshgrid dibujaremos las curvas de nivel de las siguientes funciones: 1) f (x, y) = sin x sin y , x, y ∈ [0, π] × [0, π]. 2) f (x, y) = x − 0.5 x3 + 0.2 y 2 + 1 , x, y ∈ [−3, 3] × [−3, 3]. sin x2 + y 2 3) f (x, y) = , x, y ∈ [−8, 8] × [−8, 8]. x2 + y 2 La primera parte del programa genera la red y eval´a la funci´n, la segunda parte dibuja las l´ u o ıneas de contorno. x=0:0.2:3*pi; y=0:0.25:5*pi; [XX,YY]=meshgrid(x,y); z1=sin(XX).*sin(YY); x=-3:0.25:3; y=x; [XX,YY]=meshgrid(x,y); z2=XX-0.5*XX.^3+0.2*YY.^2+1; x=-8:0.5:8; y=x; [XX,YY]=meshgrid(x,y); r=sqrt(XX.^2+YY.^2)+eps; z3=sin(r)./r; clf subplot(2,2,1); contour(z1); title(’sen(x)*sen(y)’); subplot(2,2,2); contour(x,y,z3); title(’sen(r)/r’); subplot(2,2,3); contour3(z2,15); title(’x-0.5 x^3 + 0.2 y^2 + 1’); subplot(2,2,4); contour3(x,y,z3); title(’sen(r)/r’); Gu´ R´pida de Matlabdvips . ıa a 36
  • 38. 3.6 Gr´ficos en 3-D a m at El resultado es el siguiente gr´fico. a sen(x)*sen(y) sen(r)/r 8 60 6 50 4 40 2 30 0 −2 20 −4 10 −6 −8 10 20 30 40 −5 0 5 x−0.5 x3 + 0.2 y2 + 1 sen(r)/r 20 1 10 0.5 0 0 −10 −0.5 25 20 25 5 15 20 0 5 10 15 0 5 10 −5 5 −5 Una informaci´n m´s completa de las curvas de nivel la podemos conseguir si adem´s dibujamos el gradiente de la o a a superficie, que se obtiene gracias a la funci´n o gradient. >> [X,Y]=meshgrid(-pi/2:0.1:pi/2,-pi:0.2:pi); [ENTER] >> Z=abs(sin(Y).*cos(X)); [ENTER] >> [DZDX,DZDY]=gradient(Z,.1,0.2); 30 [ENTER] >> contour(Z); [ENTER] 25 >> hold on; [ENTER] >> quiver(DZDX,DZDY); [ENTER] 20 >> hold off; [ENTER] 15 10 5 5 10 15 20 25 30 3.6 Gr´ficos en 3-D a Existen varios comandos que nos permiten dibujar superficies en tres dimensiones. El primero de ellos es el comando plot3. Gu´ R´pida de Matlabdvips . ıa a 37
  • 39. 3.6 Gr´ficos en 3-D a m at Dibuja un gr´fico 3-D que pasa por las coordenadas de los vectores a x1, y1, z1. La selecci´n del estilo de l´ o ınea es opcional y se elige con cad. Todos plot3(x1,y1,z1,cad) los vectores deben tener la misma longitud. Este comando permite dibujar varios gr´ficas a la vez en la misma ventana gr´fica. a a Dibuja gr´ficos para cada columna de las matrices a X, Y y Z, las cuales deben plot3(X,Y,Z) tener el mismo tama˜o. n El ejemplo siguiente muestra la simulaci´n de un camino aleatorio en tres dimensiones. o >> x=cumsum(rand(1,n)-0.5); [ENTER] >> y=cumsum(rand(1,n)-0.5); [ENTER] >> z=cumsum(rand(1,n)-0.5); [ENTER] >> plot3(x,y,z); [ENTER] 0.5 >> text(x(1), y(1), z(1), 0 ’Inicio’); [ENTER] −0.5 Inicio >> text(x(n), y(n), z(n), −1 ’Fin’); [ENTER] −1.5 −2 Fin −2.5 −3 3 2 2 1 1 0 0 −1 −1 −2 El texto de las figuras en tres dimensiones se inserta de la misma forma que en dos dimensiones, tal y como se puede ver en el ejemplo anterior. El segundo comando que presentamos es el comando mesh y algunas de sus variantes. Con este comando debemos tener en cuenta las mismas consideraciones que para dibujar las curvas de nivel. Dibuja la matriz Z como tercera coordenada sobre una red rectangular y conecta los puntos adyacentes creando una superficie. mesh(Z) Si se especifica la matriz C cada punto se dibuja en el color especificado por mesh(Z,C) cada elemento de la matriz. mesh(U,V,Z,C) Si se especifican los valores de U y V, dibuja la matriz Z sobre los nodos de la red formada por U y V. Dibuja, con las mismas consideraciones que el caso anterior, una superficie meshc(...) incluyendo las curvas de nivel bajo el gr´fico. a meshz(...) Dibuja una superficie incluyendo una red de referencia en el plano XY . Mantiene las l´ ıneas traseras escondidas o no dependiedo que escribamos on hidden on-off u off. Si s´lo se escribe el comando hidden cambia de uno a otro. o Escribamos un programa de MATLAB para dibujar la superficie de las siguientes funciones: 1) f (x, y) = sin x sin y , (x, y) ∈ [0, π] × [0, π]. 2) f (x, y) = x − 0.5 x3 + 0.2 y 2 + 1 , (x, y) ∈ [−3, 3] × [−3, 3]. Gu´ R´pida de Matlabdvips . ıa a 38
  • 40. 3.6 Gr´ficos en 3-D a m at sin x2 + y 2 3) f (x, y) = , (x, y) ∈ [−8, 8] × [−8, 8]. x2 + y 2 x=0:0.2:3*pi; y=0:0.25:5*pi; [XX,YY]=meshgrid(x,y); z1=sin(XX).*sin(YY); x=-3:0.25:3; y=x; [XX,YY]=meshgrid(x,y); z2=XX-0.5*XX.^3+0.2*YY.^2+1; x=-8:0.5:8; y=x; [XX,YY]=meshgrid(x,y); r=sqrt(XX.^2+YY.^2)+eps; z3=sin(r)./r; clf subplot(2,2,1); mesh(z1); title(’sin(x)*sin(y)’); subplot(2,2,2); meshz(z2); title(’x-0.5*x^3+0.2*+y^2+1’); subplot(2,2,3); waterfall(z2); title(’x-0.5*x^3+0.2*+y^2+1’); subplot(2,2,4); meshc(z3); title(’sin(r)/r)’); El resultado es el siguiente gr´fico a sin(x)*sin(y) x−0.5*x3+0.2*+y2+1 1 20 10 0 0 −1 −10 100 40 60 30 50 40 20 20 20 10 0 0 0 0 x−0.5*x3+0.2*+y2+1 sin(r)/r) 20 1 10 0 0 −10 −1 40 40 30 40 20 20 20 10 20 0 0 0 0 Gu´ R´pida de Matlabdvips . ıa a 39
  • 41. 3.6 Gr´ficos en 3-D a m at Mostramos a continuaci´n otros comandos que nos permiten dibujar superficies mediante caras. Igual que en el o caso anterior, creamos la red y luego evaluamos la funci´n. o Dibuja la superficie especificada por la red X e Y, que toma los valores de Z. Si no se especifica la red, se dibuja en una red uniforme. Los colores se surf(X,Y,Z, C) definen por los elementos de la matriz Al igual que fill pero en tres C, si no se especifican se utiliza la matriz Z. surfc(X,Y,Z, C) Del mismo modo que surf excepto que dibuja las curvas de nivel. Del mismo modo que surf excepto que sit´a un foco de luz en el punto dado u surfl(X,Y,Z, ls,r) por el vector ls. El vector r nos proporciona el tipo de luz que puede ser de los siguientes tipos: ambiente , difusi´n , especular e interior . o Del mismo modo que surf pero dibuja las normales a la superficie si no [Nx,Ny,Nz] = se especifican los vectores Nx, Ny y Nz. En el caso de que se especifiquen surfnorm(X,Y,Z) solamente se almacenan los vectores normales. Devuelve el reflejo de una superficie difusa con componentes normales dadas diffuse(Nx,Ny,Nz,ls) por los vectores Nx, Ny y Nz. El vector ls nos da la posici´n de la luz. o specular(Nx,Ny,Nz,ls,v) Al igual que diffuse pero con reflejo especular. Dibuja colores determinados como valores de los elementos de Z. Si se espe- pcolor(X,Y,Z) cifican X e Y es igual que aplicar surf(X,Y,Z); view(2) ıgono con esquinas dadas por los vectores x e y. El pol´ Dibuja el pol´ ıgono se fill(x,y,c) rellena con el color dado por c. fill3(x,y,z,c) dimensiones. Las escalas de color usadas por los comandos pueden ser ajustadas (secci´n 3.7). o sin r Dibujemos la funci´n o f (r) = con las curvas de nivel en el plano XY . r sin(r)/r 1 >> x=-8:0.5:8; y=x; [ENTER] 0.5 >> [XX,YY]=meshgrid(x,y); [ENTER] 0 >> R=sqrt(XX.^2+YY.^2)+eps; [ENTER] >> Z=sin(R)./R; [ENTER] −0.5 10 >> surfc(XX,YY,Z); 5 10 title(’sin(r)/r’); 0 0 5 [ENTER] −5 −5 −10 −10 Repitamos el ejemplo a˜adiendo los vectores normales mediante el comando n surfnorm. Gu´ R´pida de Matlabdvips . ıa a 40
  • 42. 3.6 Gr´ficos en 3-D a m at >> clf; [ENTER] >> x=-8:0.5:8; y=x; [ENTER] >> [XX,YY]=meshgrid(x,y); sin(r)/r [ENTER] >> R=sqrt(XX.^2+YY.^2)+eps; [ENTER] 1.2 >> Z=sin(R)./R; [ENTER] 1 >> surfnorm(XX,YY,Z); 0.8 0.6 title(’sin(r)/r’); 0.4 [ENTER] 0.2 0 −0.2 −0.4 10 5 10 5 0 0 −5 −5 −10 −10 En los ejemplos siguientes mostramos las diferencias entre los comandos surf y surfl utilizando diferentes luces. [X,Y]=meshgrid(-3:1/8:3); Z=peaks(X,Y).*sin(X); [Nx,Ny,Nz]=surfnorm(Z); s=[-3 -3 2]; % posicion de la fuente de luz k1=[0,1,0,0]; % difusion k2=[0,0,1,1]; % especular subplot(2,2,1); surfl(X,Y,Z,s); shading interp; colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off; subplot(2,2,2); surfl(X,Y,Z,s,k1); shading interp; colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off; subplot(2,2,3); surfl(X,Y,Z,s,k2); shading interp; colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off; subplot(2,2,4); DD=diffuse(Nx,Ny,Nz,s); surf(X,Y,Z,DD); shading interp; colormap(gray); axis([-3 3 -3 3 min(min(Z)) max(max(Z))]); axis off; Gu´ R´pida de Matlabdvips . ıa a 41
  • 43. 3.6 Gr´ficos en 3-D a m at Todas estas superficies se pueden ver en escala de grises utilizando el comando shading interp. Los comandos surf y mesh pueden ser utilizados para dibujar una funci´n en una red no uniforme. Ahora podemos o incluir las matrices con las coordenadas para llamar a la rutina gr´fica. a En muchas ocasiones un gr´fico puede ser m´s f´cil de visualizar si lo podemos observar desde un punto de vista a a a diferente. Establece el punto de vista. El escalar v determina el ´ngulo azimutal y el a view(v,h) escalar h el ´ngulo de elevaci´n. a o [v,h]=view Devuelve el punto de vista actual, ´ngulo azimutal y el ´ngulo de elevaci´n. a a o view(r) Establece el visor en la posici´n o r=[x y z]. Devuelve los valores est´ndar de ´ngulos de visi´n (con a a o n = 2 en dimensi´n o view(n) dos y con n = 3 los de dimensi´n tres). o view Devuelve la matriz de visi´n (de dimensi´n o o 4 × 4). view(T) Se utiliza T como matriz de visi´n. o Devuelve la matriz de visi´n (que define el punto de vista y la direcci´n de o o viewmtx(v,h,s,r) vista). Con el comando view obtenemos una superficie ya conocida pero desde un punto de vista distinto. sin(r)/r 1 0.5 0 −0.5 −8 −6 −4 −2 0 2 4 6 8 Tambi´n es posible utilizar el comando e view en dos dimensiones. As´ si utilizamos en un gr´fico de dos dimensiones ı, a el comando view([1 0.6 0.35]) muestra como el c´ ırculo se puede dibujar en tres dimensiones. Gu´ R´pida de Matlabdvips . ıa a 42
  • 44. 3.7 Control del color m at 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 −1 −1 −0.5 −1 0 −0.5 0 0.5 0.5 1 1 Para investigar las funciones de tres variables gr´ficamente, ya que no podemos representarlas, MATLAB posee el a comando slice. Dibuja capas de la funci´n de tres variables definida por la matriz V . La matriz o V est´ compuesta de nx capas, evaluada sobre tres matrices obtenidas a a slice(V, xs, ys, zs, nx) partir de meshgrid con tres argumentos. Los vectores xs, ys y zs especifican que capas se dibujan. Probamos el comando con la funci´n o f (x, y, z) = x2 +y 2 +z 2 y vemos lo que aparece en el cubo [−1, 1]×[−1, 1]× [−1, 1]. Para ello definimos la red y evaluamos la funci´n en la red (podemos decidir que capas vamos a dibujar). o >> [x,y,z]=meshgrid(-1:.1:1,-1:.1:1,-1:.1:1); [ENTER] >> v=x.^2+y.^2+z.^2; [ENTER] >> slice(v,[11],[11],[1 11]); 25 [ENTER] 20 15 10 5 0 25 20 25 15 20 10 15 10 5 5 0 0 Se˜alemos que existen otros muchos comandos para realizar y modificar gr´ficos como es el comando n a rot90 que nos permite rotarlos sobre la matriz definida. 3.7 Control del color En MATLAB el usuario puede controlar los colores y la iluminaci´n de las gr´ficas en tres dimensiones. o a Gu´ R´pida de Matlabdvips . ıa a 43
  • 45. 3.7 Control del color m at Redibuja la superficie con las siguientes propiedades de acuerdo con el tipo: • faceted dibuja la red en la supeficie (opci´n por defecto). o shading type • interp utiliza colores interpolados en la superficie. • flat todas las caras se dibujan en colores constantes desde las esquinas de las caras. Dibujamos de nuevo una figura ya conocida pero con los colores interpolados utilizando el comando anterior. sin(r)/r 1 0.5 0 −0.5 10 5 10 5 0 0 −5 −5 −10 −10 MATLAB utiliza mapas de colores para dibujar las superficies. Un mapa de color es una matriz m × 3 en la cual las filas forman los colores, especificados por la cantidad de rojo (primera columna), verde (segunda columna) y azul (tercera columna); as´ el mapa caracteriza ı m colores. El color sobre la superficie se especifica mediante un ´ ındice del mapa de colores. Este ´ ındice se calcula habitual- mente en relaci´n al m´ximo y el m´ o a ınimo de la superficie. El comando colormap se utiliza para decidir que mapa de colores utiliza MATLAB. Sit´a como mapa de colores actual a u Cm. Si no se especifica se devuelve en colormap(Cm) una matriz la tabla del gr´fico actual. a Dibuja una barra horizontal de escala de colores en la ventana de gr´ficos a colorbar(’horiz’) actual. Si no se especifica la dibuja vertical. Hay 11 mapas de colores predefinidos en MATLAB: gray(m) m tonos de grises. hsv(m) m tonos de colores brillantes. hot(m) m tonos de colores calientes. cool(m) m tonos de colores fr´ ıos. bone(m) m tonos de colores hueso. copper(m) m tonos de colores copper. pink(m) m tonos de colores en rosa. flag(m) m tonos de colores de banderas (EE.UU.). prism(m) rojo, naranja, amarillo, verde, azul y violeta. jet(m) m tonos de colores de hsv fr´ y calientes. ıos white(m) mapa blanco de colores. A˜adamos a la figura anterior la barra de colores. n Gu´ R´pida de Matlabdvips . ıa a 44
  • 46. 3.8 Copia de la ventana gr´fica a m at Hay otros comandos que tambi´n manipulan el color. e Devuelve un mapa de colores hsv de un mapa de colores rgb. El comando rgb2hsv(Cm) inverso es hsv2rgb(Cm). rgbplot(Cm) Dibuja las columnas del mapa de colores Cm. v. Hace que el intervalo de colores actual se sit´e entre los valores del vector u caxis(v) Si no se especifica v devuelve el intervalo habitual. Si se especifica ’auto’ retorna a la escala autom´tica. a Rota el mapa de colores durante t segundos usando el paso s (los valores spinmat(t,s) por defecto son s=1 y t=3. Si se utiliza inf se cambia para siempre. brighten(Cm,s) Da brillo al gr´fico si 0 < s < 1 y se oscurece si −1 < s < 0. a nt=brighten(Cm,s) Devuelve el mapa de colores brillante u oscurecido, pero no redibuja. whitebg Cambia el fondo entre blanco y negro. Establece el color del fondo de acuerdo a una cadena de tipo de l´ ınea, mar- whitebg(’cad’) cador y color, o con un vector rgb. 3.8 Copia de la ventana gr´fica a Es posible obtener copias de las ventanas gr´ficas bien a impresi´n o bien a fichero. a o Manda a fichero.ps la ventana actual. Si no se especifica va directamente print fichero a la impresora. Se pueden consultar diferentes impresoras. Se graba en un archivo de formato encapsulado fichero.eps. Para enviarlo print -deps fichero posteriormente a otros documentos. [str, dev] =printopt Nos da la cadena y salida utilizada por print. Establece la orientaci´n que utiliza MATLAB en la siguiente print. Si o cadena es lanscape se imprime en apaisado. Si es portrait se imprime en orient cadena vertical. Si es tall se imprime en vertical y a una escala que llena el papel. Si no se especifica devuelve la orientaci´n actual en una cadena. o Gu´ R´pida de Matlabdvips . ıa a 45
  • 47. Bibliograf´ ıa [1] Oscar Angulo, Eduardo Cuesta, Cesar Gutierrez, Carmen Mart´ ´ ´ ınez,Gu´ R´pida de MATLAB, ıa a IICE, 2001. [2] Adrian Biran, Moshe Breinner, MATLAB for Engineers, Addison-Wesley, 1997. [3] S.J. Chapman, MATLAB Programming for engineers, Brooks & Cole, 2000. [4] Walter Gander, Jiri Hrebicek, Solving Problems in Scientific Computing Using MAPLE and MATLAB, Springer, 1997. [5] Mathews and Fink, M´todos Num´ricos con MATLAB, Prentice Hall, 2000. e e [6] Eva Part-Enander, Anders Sjoberg, The MATLAB handbook, Addison-Wesley, 1996. [7] Cesar Perez, Matem´tica Informatizada con MATLAB, ra-ma, 1996. a [8] Peregrina Quintela, Introducci´n a MATLAB y sus aplicaciones, Universidad de Santiago de Compostela, o 1997. [9] Redfern, D, The MATLAB 5 handbook, Springer, 1997. [10] Kermit Sigmon, MATLAB Primer (Fifth Edition), CRC Press, 1998 . [11] Aprenda MATLAB 5.3, como si estuviera en primero, Universidad de Navarra, 1999. [12] www.mathworks.com Gu´ R´pida de Matlabdvips . ıa a 46