Diferencia entre revisiones de «PrInf03: Gráficos de funciones»

De MateWiki
Saltar a: navegación, buscar
(Contenido de la práctica)
(Leyenda)
 
(No se muestran 19 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 +
{{ Práctica de Informática | Gráficos de funciones en el plano | PrInf02: Vectores y matrices | PrInf04: Comunicación con el usuario }}
 +
 
Además de facilitar los cálculos matriciales, otra de las grandes ventajas de [[Octave UPM]] es la generación de gráficos. Se pueden realizar muchos tipos de gráficos, en el plano y en el espacio. En esta práctica vamos a tener nuestro primer contacto con los gráficos, dibujando gráficos de funciones en el plano. Ser capaz de generar gráficos de funciones en el plano puede ayudarnos a entender mucho más fácilmente cómo funcionan nuestros programas, sobre todo cuando estemos implementando [[métodos numéricos]].
 
Además de facilitar los cálculos matriciales, otra de las grandes ventajas de [[Octave UPM]] es la generación de gráficos. Se pueden realizar muchos tipos de gráficos, en el plano y en el espacio. En esta práctica vamos a tener nuestro primer contacto con los gráficos, dibujando gráficos de funciones en el plano. Ser capaz de generar gráficos de funciones en el plano puede ayudarnos a entender mucho más fácilmente cómo funcionan nuestros programas, sobre todo cuando estemos implementando [[métodos numéricos]].
  
Línea 18: Línea 20:
 
| figure
 
| figure
 
| cos
 
| cos
 +
| xlabel
 +
| ylabel
 
|-
 
|-
 
| hold
 
| hold
Línea 23: Línea 27:
 
| grid
 
| grid
 
| sqrt
 
| sqrt
 +
| title
 +
|
 
|}
 
|}
  
Línea 51: Línea 57:
 
# Intenta dibujar el gráfico de ''y2''. ¿Qué ocurre con el gráfico de ''y1''?
 
# Intenta dibujar el gráfico de ''y2''. ¿Qué ocurre con el gráfico de ''y1''?
 
# Para evitar borrar el gráfico anterior en la ventana de gráficos podemos usar el comando ''hold''. Cuando ejecutemos ''hold on'' todos los gráficos que generemos se añadirán a la misma ventana de gráficos, conservando cualquier gráfico que pueda contener la ventana actualmente. Usa el comando ''hold on'' para dibujar ambas gráficas en la misma ventana.
 
# Para evitar borrar el gráfico anterior en la ventana de gráficos podemos usar el comando ''hold''. Cuando ejecutemos ''hold on'' todos los gráficos que generemos se añadirán a la misma ventana de gráficos, conservando cualquier gráfico que pueda contener la ventana actualmente. Usa el comando ''hold on'' para dibujar ambas gráficas en la misma ventana.
# Si observas la ventana, podrás ver que la parábola tiene algunos puntos angulosos porque el número de valores de ''x'' es pequeño para generar una curva suave. Si intentamos dibujar de nuevo la curva, se pintará encima de las curvas que ya están en la ventana y no se verá bien. Borra la ventana de gráficos con el comando ''clf'', y dibuja de nuevo los dos gráficos, pero haciendo que ''x'' tenga 100 elementos. Aunque hayas borrado la ventana de gráficos, el comando ''hold on'' sigue activo, así que todas las curvas se seguirán dibujando una encima de la otra, y no hay que ejecutarlo de nuevo.
+
# Si observas la ventana, podrás ver que la raíz tiene algunos puntos angulosos porque el número de valores de ''x'' es pequeño para generar una curva suave. Si intentamos dibujar de nuevo la curva, se pintará encima de las curvas que ya están en la ventana y no se verá bien. Borra la ventana de gráficos con el comando ''clf'', y dibuja de nuevo los dos gráficos, pero haciendo que ''x'' tenga 400 elementos. Aunque hayas borrado la ventana de gráficos, el comando ''hold on'' sigue activo, así que todas las curvas se seguirán dibujando una encima de la otra, y no hay que ejecutarlo de nuevo.
 +
# Las dos gráficas salen dibujadas en el mismo color. Idealmente cada función debería pintarse con su propio color. Para comparar el gráfico que hemos generado con el que vamos a realizar a continuación, vamos a crear una nueva ventana de gráficos, usando el comando ''figure''. Este comando crea una nueva ventana de gráficos, que será la ventana donde se dibujen las curvas a partir de ahora. La nueva ventana parte desde cero. Por ejemplo, no "hereda" el comando ''hold on'' que hemos ejecutado en la anterior ventana. Cada nueva ventana tiene un identificador que es un número correlativo. Podemos dibujar en la primera ventana usando ''figure(1)'', y volver a dibujar en la ventana que hemos creado con ''figure(2)''. Si no indicamos un número de ventana, se crea una ventana nueva.
 +
# Para dibujar las nuevas curvas no hay que hacer ningún nuevo cálculo, podemos reutilizar los vectores creados en los pasos anteriores. Ejecuta ''figure(2)'' para asegurarte de que estás usando la nueva ventana, y prueba el siguiente comando {{#tag:source|plot(x,y1,'r')|lang="matlab"}} ¿En qué color se ha dibujado la curva?
 +
# Las curvas se dibujan por defecto en color azul. Podemos añadir un modificador al comando ''plot'' para que la dibuje en otro color. En el caso anterior se ha dibujado en rojo, ya que hemos puesto la letra '''r''', de '''r'''''ed''. Podemos dibujar otros colores, como '''g'''''reen'', '''y'''''ellow'' o ''blac'''''k'''. Experimenta con otras letras a ver qué colores puedes encontrar.
 +
# Dibuja las dos curvas superpuestas, usando colores diferentes y añade una rejilla, todo ello en la ventana ''figure(2)''.
 +
# Selecciona la ventana 1 y borra su contenido con ''clf''. Luego cierra esa ventana, y ejecuta de nuevo ''figure(2)'' para usar esta ventana de ahora en adelante.
 +
 
 +
=== Leyenda ===
 +
 
 +
En estos momentos deberíamos tener una ventana con las dos curvas, cada una en un color diferente. Ahora vamos a añadir una leyenda al gráfico, y algunas etiquetas para que el gráfico quede mejor.
 +
 
 +
# Podemos poner etiquetas a los ejes usando los comandos ''ylabel'' y ''xlabel''. Estos comandos aceptan una cadena de texto. Por ejemplo, para poner una etiqueta en el eje vertical {{#tag:source|ylabel('Eje vertical');|lang="matlab"}}
 +
# Añade otra etiqueta al eje horizontal.
 +
# El comando ''title'' funciona de la misma manera, y sirve para añadir un título al gráfico. Prueba a añadir un título al gráfico.
 +
# Puedes intentar retocar el gráfico usando el meún ''Graphics -> Edit 2-D plot'', e incrementa el grosor de las líneas, las fuentes de los ejes, etc, para que al exportar el gráfico se aprecie mejor. Nota: '''los gráficos con leyenda no funcionan correctamente con el editor de gráficos, es mejor editar el gráfico antes de añadir una leyenda'''.
 +
 
 +
# Por último, vamos a usar el comando ''legend'' para añadir una leyenda al gráfico. Consulta la ayuda del comando ''legend'' para conocer todos los detalles sobre cómo funciona.
 +
# Nosotros vamos a añadir una leyenda en la esquina superior izquierda {{#tag:source|legend('Parabola','Raiz','location','northwest');|lang="matlab"}} Consulta la ayuda y coloca la leyenda en la esquina inferior derecha.
 +
# Por último añade una rejilla al gráfico y expórtalo a un fichero de imagen usando el menú ''Graphics -> Export last plot as image''. Al exportar un gráfico puedes incluirlo en cualquier otro documento, simplemente importando el fichero de imagen.
 +
 
 +
== Ejercicio post-práctica ==
 +
 
 +
Queremos representar la función <math>\displaystyle y = f(x) = \frac{x}{x^2-1}</math> con <math>x\in [-2,2]</math>.
 +
 
 +
# Crea un vector ''x'' que vaya desde -2 hasta 2 con 400 elementos igualmente espaciados
 +
# Representa gráficamente la función anterior, con la curva en color rojo, rejilla y etiquetas en los ejes.
 +
# ¿Hay algún problema con la representación? ¿En qué valores de <math>x</math> se produce el problema? ¿Forman parte de la función todas las líneas dibujadas?
 +
# ¿Cuál es la fuente del problema? Intenta arreglarlo para que solo se dibujen segmentos que pertenezcan a la función.
  
== Ejercicios post-práctica ==
 
  
 
[[Categoría:Prácticas de Informática]]
 
[[Categoría:Prácticas de Informática]]

Revisión actual del 20:25 22 jul 2013

Práctica de Informática
Gráficos de funciones en el plano
Práctica anterior Siguiente práctica
Este artículo es un guión de prácticas de Informática


Además de facilitar los cálculos matriciales, otra de las grandes ventajas de Octave UPM es la generación de gráficos. Se pueden realizar muchos tipos de gráficos, en el plano y en el espacio. En esta práctica vamos a tener nuestro primer contacto con los gráficos, dibujando gráficos de funciones en el plano. Ser capaz de generar gráficos de funciones en el plano puede ayudarnos a entender mucho más fácilmente cómo funcionan nuestros programas, sobre todo cuando estemos implementando métodos numéricos.

1 Vídeos previos

Antes de realizar esta práctica, es recomendable ver estos vídeos del Curso de Introducción a la Programación. No es imprescindible verlos antes de hacer la práctica, pero sí recomendable. Si no has podido verlos antes, empieza la práctica, y vuelve a los vídeos después de la práctica.

También es recomendable haber realizado antes la práctica 2, que enseña cómo crear y modificar vectores y matrices.

2 Comandos que se aprenderán en esta práctica

En esta práctica vamos a ver qué significan los siguientes comandos de MATLAB / Octave

plot clf figure cos xlabel ylabel
hold legend grid sqrt title

3 Contenido de la práctica

Para dibujar gráficos de funciones en el plano tenemos que entender que en realidad con el comando plot vamos en realidad a dibujar tablas de datos, es decir, vectores y matrices. Tendremos que discretizar las funciones para poder representarlas. La discretización hará que la curva sea más suave, y por tanto más parecida a la realidad, o más tosca. Pero la curva no puede realizarse infinitamente suave por dos problemas principales: rendimiento, y representación de los números en el ordenador.

3.1 Funciones de la biblioteca vectorizadas

  1. Vamos a dibujar la función trigonométrica [math]y = \cos(x)[/math], con [math]x \in [0, 2\pi][/math]. Como primer paso, crea un vector x que contenga 10 elementos igualmente espaciados entre 0 y [math]2\pi[/math].
  2. Una vez hayas creado el vector, puedes calcular las imágenes de x simplemente haciendo
    y = cos(x);
    Esto es así porque la función cos está vectorizada: si el argumento de entrada es un vector, devuelve un vector aplicando la función a cada elemento del vector entrada. Comprueba que las longitudes de los vectores x e y son iguales.
  3. Para dibujar la gráfica simplemente tenemos que ejecutar
    plot(x,y);
  4. El gráfico obtenido no es demasiado parecido a la función trigonométrica. ¿Cómo podemos generar un gráfico en el que la curva se perciba claramente?

3.2 Funciones no vectorizadas

  1. En los puntos anteriores hemos dibujado funciones que ya estaban vectorizadas, por lo que era sencillo generar los gráficos. Vamos ahora a representar la parábola [math]y = x^2-20x+1[/math] con [math]x\in[-30,30][/math]. El primer paso será generar el vector x que contenga 100 elementos igualmente espaciados entre -30 y 30.
  2. Ahora intentamos generar el valor de la y, usando el siguiente código
    y = x^2-20*x+1;
    ¿Qué ocurre? ¿Por qué? ¿Cómo podemos arreglarlo?
  3. Dibuja el gráfico de la función una vez que hayas logrado generar el vector y.
  4. ¿Cuáles son los puntos de corte de la parábola con el eje x? Es difícil apreciarlo bien porque no están dibujados los ejes en el gráfico. Añade una rejilla usando el comando grid y luego usa la función de zoom de la ventana de gráficos para dar una estimación con dos decimales de los dos puntos de corte con el eje horizontal.

3.3 Superponer gráficos

En los pasos anteriores, hemos creado dos gráficos diferentes, y al generar el nuevo gráfico, el anterior se ha borrado. Vamos a ver ahora cómo superponer varias curvas en la misma ventana de gráficos.

  1. El primer gráfico que vamos a dibujar es la parábola [math]y = x^2[/math] con [math]x \in [0,2][/math]. Genera un vector x con 50 elementos igualmente espaciados entre 0 y 2, y dibuja el gráfico de la parábola, poniendo las imágenes de x en un vector de nombre y1.
  2. Ahora vamos a dibujar la función [math]y = \sqrt{x}[/math], también con [math]x\in [0,2][/math]. Para calcular la raíz cuadrada podemos usar la función sqrt de Octave UPM, que está vectorizada. Reutiliza el vector x para generar sus imágenes en un vector de nombre y2.
  3. Intenta dibujar el gráfico de y2. ¿Qué ocurre con el gráfico de y1?
  4. Para evitar borrar el gráfico anterior en la ventana de gráficos podemos usar el comando hold. Cuando ejecutemos hold on todos los gráficos que generemos se añadirán a la misma ventana de gráficos, conservando cualquier gráfico que pueda contener la ventana actualmente. Usa el comando hold on para dibujar ambas gráficas en la misma ventana.
  5. Si observas la ventana, podrás ver que la raíz tiene algunos puntos angulosos porque el número de valores de x es pequeño para generar una curva suave. Si intentamos dibujar de nuevo la curva, se pintará encima de las curvas que ya están en la ventana y no se verá bien. Borra la ventana de gráficos con el comando clf, y dibuja de nuevo los dos gráficos, pero haciendo que x tenga 400 elementos. Aunque hayas borrado la ventana de gráficos, el comando hold on sigue activo, así que todas las curvas se seguirán dibujando una encima de la otra, y no hay que ejecutarlo de nuevo.
  6. Las dos gráficas salen dibujadas en el mismo color. Idealmente cada función debería pintarse con su propio color. Para comparar el gráfico que hemos generado con el que vamos a realizar a continuación, vamos a crear una nueva ventana de gráficos, usando el comando figure. Este comando crea una nueva ventana de gráficos, que será la ventana donde se dibujen las curvas a partir de ahora. La nueva ventana parte desde cero. Por ejemplo, no "hereda" el comando hold on que hemos ejecutado en la anterior ventana. Cada nueva ventana tiene un identificador que es un número correlativo. Podemos dibujar en la primera ventana usando figure(1), y volver a dibujar en la ventana que hemos creado con figure(2). Si no indicamos un número de ventana, se crea una ventana nueva.
  7. Para dibujar las nuevas curvas no hay que hacer ningún nuevo cálculo, podemos reutilizar los vectores creados en los pasos anteriores. Ejecuta figure(2) para asegurarte de que estás usando la nueva ventana, y prueba el siguiente comando
    plot(x,y1,'r')
    ¿En qué color se ha dibujado la curva?
  8. Las curvas se dibujan por defecto en color azul. Podemos añadir un modificador al comando plot para que la dibuje en otro color. En el caso anterior se ha dibujado en rojo, ya que hemos puesto la letra r, de red. Podemos dibujar otros colores, como green, yellow o black. Experimenta con otras letras a ver qué colores puedes encontrar.
  9. Dibuja las dos curvas superpuestas, usando colores diferentes y añade una rejilla, todo ello en la ventana figure(2).
  10. Selecciona la ventana 1 y borra su contenido con clf. Luego cierra esa ventana, y ejecuta de nuevo figure(2) para usar esta ventana de ahora en adelante.

3.4 Leyenda

En estos momentos deberíamos tener una ventana con las dos curvas, cada una en un color diferente. Ahora vamos a añadir una leyenda al gráfico, y algunas etiquetas para que el gráfico quede mejor.

  1. Podemos poner etiquetas a los ejes usando los comandos ylabel y xlabel. Estos comandos aceptan una cadena de texto. Por ejemplo, para poner una etiqueta en el eje vertical
    ylabel('Eje vertical');
  2. Añade otra etiqueta al eje horizontal.
  3. El comando title funciona de la misma manera, y sirve para añadir un título al gráfico. Prueba a añadir un título al gráfico.
  4. Puedes intentar retocar el gráfico usando el meún Graphics -> Edit 2-D plot, e incrementa el grosor de las líneas, las fuentes de los ejes, etc, para que al exportar el gráfico se aprecie mejor. Nota: los gráficos con leyenda no funcionan correctamente con el editor de gráficos, es mejor editar el gráfico antes de añadir una leyenda.
  1. Por último, vamos a usar el comando legend para añadir una leyenda al gráfico. Consulta la ayuda del comando legend para conocer todos los detalles sobre cómo funciona.
  2. Nosotros vamos a añadir una leyenda en la esquina superior izquierda
    legend('Parabola','Raiz','location','northwest');
    Consulta la ayuda y coloca la leyenda en la esquina inferior derecha.
  3. Por último añade una rejilla al gráfico y expórtalo a un fichero de imagen usando el menú Graphics -> Export last plot as image. Al exportar un gráfico puedes incluirlo en cualquier otro documento, simplemente importando el fichero de imagen.

4 Ejercicio post-práctica

Queremos representar la función [math]\displaystyle y = f(x) = \frac{x}{x^2-1}[/math] con [math]x\in [-2,2][/math].

  1. Crea un vector x que vaya desde -2 hasta 2 con 400 elementos igualmente espaciados
  2. Representa gráficamente la función anterior, con la curva en color rojo, rejilla y etiquetas en los ejes.
  3. ¿Hay algún problema con la representación? ¿En qué valores de [math]x[/math] se produce el problema? ¿Forman parte de la función todas las líneas dibujadas?
  4. ¿Cuál es la fuente del problema? Intenta arreglarlo para que solo se dibujen segmentos que pertenezcan a la función.