PrInf03: Gráficos de funciones
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.
Contenido
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 |
| hold | legend | grid | sqrt |
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
- 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].
- Una vez hayas creado el vector, puedes calcular las imágenes de x simplemente haciendo 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.
y = cos(x);
- Para dibujar la gráfica simplemente tenemos que ejecutar
plot(x,y);
- 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
- 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.
- Ahora intentamos generar el valor de la y, usando el siguiente código ¿Qué ocurre? ¿Por qué? ¿Cómo podemos arreglarlo?
y = x^2-20*x+1;
- Dibuja el gráfico de la función una vez que hayas logrado generar el vector y.
- ¿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.
- 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.
- 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.
- 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.
- 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.