UNIVERSIDAD CATOLICA DE LA SANTISIMA CONCEPCIÓN DEPARTAMENTO DE MATEMÁTICA Y FÍSICA APLICADA Franco A. Milanese Laboratorio 3 Introducción a MATLAB r: grácas de funciones en dos dimensiones 1. Funciones en archivos .m Supongamos que deseamos tener un chero que nos permita conocer el valor de las imágenes de la función y = sin(x + x2 ), nos interesaría que dado un valor para x nos retorne el valor para y. En este caso podemos hacer: function y=f(x) y=sin(x+x.^2); observe que en tal caso la operación potenciación debe anteponerse con el operador la potenciación sea componente a componente. Obviamente la entrada x . para que de esta función puede ser cualquier matriz, y la salida será una matriz de las mismas dimensiones. Si nos interesara dibujar tal función en el intervalo [−10, 10], podemos hacer directamente x=[10:0.1:10]; y=f(x); plot(x,y); También podemos denir funciones denidas por tramos usando este tipo de cheros. Por ejemplo, si interesa ingresar a MATLAB la función ( x2 + 1 x > 0 g(x) := 1 x≤0 x2 +1 podemos crear el chero función function y=g(x) in=find(x>0); y(in)=x.^2+1; in=find(x<=0); y(in)=1./(x.^2+1); 2. Funciones como objetos inline Los objetos inline son otra forma de representar funciones en MATLAB. Por ejemplo, para crear un objeto inline que nos permita manejar la función ejecutar la instrucción g=inline('33*x.^2+cos(exp(x))','x'); 1 g(x) = 33x2 +cos(ex ), debemos simplemente una vez creado este tipo de dato, podemos dibujarlo rápidamente haciendo uso de la función ezplot(), según ezplot(g) La primera cadena de las entradas de inline() es la forma vectorizada de la operación que dene a la función, mientras que la segunda entrada y siguientes, especican las variables que independientes de al función a denir. 3. Arreglo de funciones La instrucción arreglo=@nombre retorna un arreglo de funciones llamado arreglo que tiene una función llamada nombre. Un arreglo de función es un objeto de MATLAB que permite llamar a funciones indirectamente. Se pueden utilizar para denir otras funciones e inclusive se pueden agrupar dentro de arreglos tipo celda. Cuando queramos denir una nueva función a través de un arreglo de funciones utilizaremos funciones anónimas, estas se generan como se ejemplica a continuación. Supongamos que nos interesa ingresar a MATLAB la función de la parábolas y = 2x2 + 3x + 1, esto lo hacemos según a = 2; b = 3; c = 1; parabola = @(x) a*x.^2 + b*x + c; para poder dibujar este tipo de funciones hacemos uso de plot(). x=linspace(0,10,100); plot(x,parabola(x)); 4. La ventana gráca Como vimos en los ejemplos anteriores, sin importar el método que usemos para dibujar MATLAB siempre creará otra ventana, llamada por defecto Figure 1 similar a la gura ( crear una nueva ventana gráca donde dibujar hacemos uso de la función las intrucciones figure(1); ezplot(inline('x^2')); figure(2); ezplot(inline('x^2-1')); 2 ??). Para figure(). Por ejemplo Figura 1: Ventana gráca por defecto de MATLAB. figure(3); ezplot(inline('x^2-2')); crearán tres ventanas grácas llamadas Figure 1, 2 y 3, las cuales se abrirán en ese orden con tres grácas muy similares. Si nos interesa adjuntar estos tres grácos en una misma ventana gráca hacemos uso del comando hold on, como se ilustra a continuación, figure(4); hold on; ezplot(inline('x^2')); ezplot(inline('x^2-1')); ezplot(inline('x^2-2')); si nalmente no deseamos agregar más grácos a esta gura ejecutamos hold off; Además como anotaciones podemos agregar texto en ciertos lugares de los grácos de una gura. Mientras la gura en la que deseamos añadir un comentario esté seleccionada con el comando figure() ejecutamos el comango gtext(). Si conocemos la coordenada exacta donde queremos hacer un comentario, podemos utilizar la función text(). 4.1. Uso del comando line(), label() y opciones de estilo en grácos A modo de ejemplo, a continuación presentamos un código que sobrepone aproximaciones en serie de Taylor de la función y = sen(x) y formatea un gráco con varios detalles. Para acceder al rutero ingrese a http://www.udec.cl/~fmilanese/codigo4.m léalo y ejecútelo. 3 4.2. Opciones de estilo para dibujar curvas en 2D Las opciones de estilo del comando plot() son una cadena que consiste de hasta tres carácteres que especican color, el estilo de línea y forma de marcar los puntos de una gráca. Estos caracteres son resumidos en la siguiente tabla Estilo de color Estilo de linea y amarillo m magenta - solida r rojo rayada g verde : punteada b azul -. raya punto w blanco k negro none sin línea Estilo de marcador + signo de suma o circulo * asterisco x con una equis . con un punto ∧ triángulo s cuadrado d diamante los cuales puede ser usados como plot(x,y,'r*') %dibuja con linea roja continua y con marcadores asterisco plot(x,y,'b--') %dibuja con linea azul rayada plot(x,y,'+') %dibuja puntos no conectados con un marcador + 5. Subgrácas en una gura Si qse quiere hacer un cuantos grácos dentro de una misma gura, pero no sobreponerlos, se uti- subplot(), este comando requiere tres entradas de numeros enteros subplot(m,n,p) dividir la ventana gráca en m × n subventanas y elegir la subventana p−ésima, liza el comando y representa contadas por las, como ventana de dibujo. Por ejemplo subplot(2,2,3) dividirá la ventana gráca actual en cuatro subventanas y dibujará lo siguiente en la ventana inferior izquierda. 6. Resumen de las principales funciones para gracar 2D En la siguiente tabla se encuentran las principales funciones para hacer grácas 2D. Nombre fplot() bar() contour() contourf() polar() quiver() Descripción Crea un gráco de una función de una variable Crea un gráco de barras vertical Crea un gráco de curvas de nivel Crea un gráco de curvas de nivel llenas Dibuja curvas descritas en coordenadas polares Dibuja campos vectoriales 4 a continuación ejemplos de usos de estos códigos. Función fplot() Código f='sin(x.^2+3*x)' fplot(f,[-10,pi]) Notar que f debe estar Salida denida en bar() t=linspace(0,2*pi,200); r=sqrt(abs(2*sin(5*t))) ; y=r.*sin(t); bar(t,y); axis([0 pi 0 inf ]); contour() r =-5:.2:5; [X,Y]=meshgrid(r,r) ; Z=-.5*X.^2 +X.*Y+Y.^2; cs=contour(X,Y,Z); clabel(cs); polar() t=linspace(0,2*pi,200); r=sqrt(abs(2*sin(5*t))) ; polar(t,r); quiver() r=-2:.2:2; [X,Y]=meshgrid(r,r) ; Z=X.^2-5*sin(X.*Y)+Y.^2; [dx,dy]=gradient(Z,.2,.2); quiver(X,Y,dx,dy,2); 5 x. 7. Ejercicios 1. Haga un rutero que graque las siguientes funciones √ f (x) = sin(x2 )2 , r(x) = f ( x) y s(x) = f (r(x)). etiquete los ejes, titule el gráco y ponga un leyenda. n ∈ N dibuje las primeras n aproximaciones por cos(x), recuerde que la n−ésima serie de taylor de una función 2. Haga una función en MATLAB que dado serie de Taylor de la función es n X f (j) (0) j! j=0 Puede utilizar la función de MATLAB (x)j . factorial(). 3. Haga una función MATLAB que dada una celda de funciones como arreglos haga los dibujos de estas funciones en una misma ventana gráca. 4. Sabiendo que el comando datestr(now(),'hh_ss_dd_mm') retorna una cadena con la fecha actual en el formato hora_segundos_dias_minutos haga una función MATLAB que dada una función y un título graque la función y le ponga como subtitulo la fecha actual. Use la función subtitle(). 5. Sabiendo que el comando print -djpeg85 -r300 matilda graba una imagen de la ventana gráca actual en el archivo matilda.jpeg ubicado en el directorio actual, haga una función MATLAB que dada una función la graque y grabe la gráca con un nombre de la fecha a la que fue generada. Referencias Rudra Pratap, Getting Started with MATLAB 2009. Department of Mechanical Engineering Indian Institute of Science, Bangalore. New York, Oxford University Press 2010. 2 de enero de 2014 6