MATLAB COMO GRAFICADOR (versión 2)
-
Upload
ricardo-perez -
Category
Documents
-
view
84 -
download
0
Transcript of MATLAB COMO GRAFICADOR (versión 2)
MÉTODOS NUMÉRICOS II
CLASE: MATLAB/OCTAVE COMO GRAFICADOR DE FUNCIONES
Problematizador: JUAN CARLOS SOTILLO MENESES
Introducción
Como ya sabemos, podemos usar MATLAB y OCTAVE como una calculadora bastante avanzada, que además
permite el aprovechamiento de las bondades de contar con las capacidades gráficas propias de un computador. Las
calculadoras, por más avanzadas y gráficas que sean, no cuentan con procesadores gráficos y niveles de “nitidez”
gráfica como los que posee un computador; acaso los teléfonos de nueva generación tengan mejores rendimientos
gráficos, pero en ellos no son muy usuales las aplicaciones dedicadas a matemáticas, aunque ya vemos unas cuantas
que más temprano que tarde podrán ofrecer lo que aquí haremos con MATLAB y OCTAVE.
Como sabemos, Matlab y Octave hacen uso de las matrices como su objeto básico de cómputo. Un número es una
matriz de dimensiones 1x1 y un vector en un espacio numérico de dimensión n es una matriz 1xn [vector fila] o una
de dimensión nx1 [vector columna].
Así las cosas, no es raro que para graficar también sean ciertas matrices [en realidad, serán vectores fila] los que
tomen el protagonismo.
Aquí vamos a tener que hacer distinción entre dos conceptos que, en principio, se pueden considerar equivalentes
en MATLAB y OCTAVE, pero que en el ámbito de la computación en general tienen significados y usos distintos.
Se trata de los conceptos de vector y de arreglo. Para nosotros, conocedores de la matemática y la física, un vector
es un arreglo ordenado de números que tiene la forma ⃗ ; cuando decimos que dicho arreglo es
“ordenado” estamos diciendo, simplemente, que hay una distinción esencial entre dos vectores si cambiamos de
lugar cualesquiera dos de sus componentes (las componentes son, en el caso de ⃗ cada uno de los números que
lo componen); es decir, por ejemplo: como vectores o tripletas ordenadas.
Cuando decimos que MATLAB y OCTAVE trabajan basados en matrices (o vectores) estamos diciendo,
implícitamente, que ambos programas ven a las matrices y vectores como objetos matemáticos, para los que existen,
por tal razón, varias reglas mediante las cuales se puede operar con ellos. Así, MATLAB y OCTAVE conocen la
reglas para suma, resta y multiplicación de matrices y vectores tal y como se definen en el álgebra lineal (área de las
matemáticas que estudia dichos objetos, sus “consecuencias” y resultados)
Pero desde el punto de vista computacional podemos también ordenar objetos en general (y no números solamente,
como hace la teoría de vectores y matrices en matemáticas) y a dicho conjunto almacenarlo en alguna variable. A
estas estructuras que pueden contener números u objetos en general (cuál será va a depender del uso que de ellos
haremos) se les denomina arreglos, y no llevan con ellos necesariamente –a diferencia de las matrices y vectores del
álgebra lineal- las operaciones usuales que se hacen con vectores y matrices. En las rutinas de graficación que
veremos ahora, vamos a tener el uso necesariamente entremezclado de los conceptos de matrices y arreglos.
Veamos.
GRAFICACIÓN EN MATLAB Y OCTAVE (nivel [muy] básico)
Primero, recordemos cómo graficábamos funciones en matemática básica. Primero, se nos daba la función ;
luego, nosotros elegíamos “los valores de la 1” que íbamos a utilizar. A partir de estos valores de , elegidos
arbitraria pero inteligentemente, obteníamos los valores de 2 correspondientes a cada valor de .
En MATLAB/OCTAVE la cosa va más o menos igual.
Hagámoslo con un ejemplo.
Queremos graficar la función
Primero, definamos, en un vector, quién va a ser nuestro dominio. Una de las formas de hacerlo es mediante la
función linspace. Esta función tiene la siguiente sintaxis:
linspace(min, max, cantidad)
donde: min = valor mínimo de la variable independiente
max = valor máximo de la variable independiente
cantidad = cantidad de valores entre min y max, ambos inclusive.
Por ejemplo, vamos a graficar la anterior función entre y , (diremos que ) y vamos a
tomar 200 puntos entre -5 y 5. Para ello, la instrucción será:
1 A esta la llamamos variable independiente. 2 A estos valores los llamamos variables dependientes.
>> x= linspace(-5, 5, 200) ; [E] OJO: este símbolo indica “pulsar la tecla
ENTER”
Ahora generemos el vector de “variable dependiente”. Recuerde, en este punto, que la variable independiente está
guardada en un vector de longitud 200.
Llamemos al vector de variable dependiente. Así,
>> y = sin(4*x).* exp(- x.^2 /4);
Unas explicaciones acerca de lo que ve en la línea anterior:
1. La función sin(x) calcula el seno del valor x en radianes.
2. Note el punto antes del operador binario de multiplicación (.*) Ese punto allí indica que la multiplicación
del vector3 sin(4*x)por el vector exp(- x.^2 /4) se está haciendo “componente a componente”
[o sea, pensando los vectores mencionados como si fuesen arreglos y no como vectores de álgebra lineal]
3. Note también el punto que aparece antes del operador ^ (potenciación) Ello es debido a las mismas razones
del punto anterior: MATLAB/OCTAVE no tiene claro qué significa elevar al cuadrado un vector.
Formalmente, sería multiplicar el vector por sí mismo, pero ¿cuál multiplicación de
vectores?¿escalar?¿vectorial? Si se intenta realizar la multiplicación matricial por de un vector por sí mismo,
matemáticamente habrá una inconsistencia de dimensiones (vector 1x200 multiplicado por vector 1x200 no
tiene sentido si pensamos estos vectores como matrices e intentamos multiplicarlos como matrices)
4. Note que en el argumento de la función sin() no aparece el punto antes del operador de multiplicación
¿por qué?
5. MORALEJA: si queremos multiplicar la componente 1 del vector 1 por la componente 1 del vector 2,
tenemos que colocar el punto antes del operador de multiplicación. Si queremos elevar a una potencia la
componente 1 del vector 1, la componente 2 del vector 1, etc. tenemos que colocar el punto antes del
operador de potenciación, etc.
Y, finalmente, para obtener un gráfico de apariencia básica para la función indicada, escribimos:
>> plot(x,y)
Los pasos anteriores producen el siguiente gráfico:
3 ¿ve usted por qué sin(x) es un vector?
Si escribimos el comando grid a continuación, obtendremos:
Si queremos graficar varias funciones en una sola gráfica, usando el mismo dominio para la variable independiente
x, lo único que tenemos que hacer es generar un nuevo vector de variable dependiente para la nueva función y
escribirlo en el mismo comando plot, como ilustramos a continuación.
Grafiquemos la función anterior junto con su “envolvente” exp(- x.^2 /4)en una misma gráfica. Para ello,
generemos un vector z que contenga estos valores, calculados con los mismos valores de x:
>> z= exp(- x.^2 /4);
Y graficamos así:
>> plot(x,y,x,z) Note que hemos repetido el vector x. de algún modo, estamos graficando “dos pares
de pares ordenados”
Obtenemos el siguiente gráfico:
EJERCICIO #1: grafique, en MATLAB/OCTAVE las siguientes funciones. Si aparece más de
una, debe graficarlas en una misma ventana gráfica:
1. 𝑓 𝑥 𝑥 + 𝑥 + para 𝑥
2. 𝑓 𝑥 𝑠𝑒𝑛 𝑥 cos 𝑥 + para 𝑥 0 𝜋
3. 𝑓 𝑥 𝑥 + 𝑥 + y 𝑓 𝑥 𝑥3 𝑥 + 𝑥 para 𝑥
4. 𝑓 𝑥 𝑥 + 𝑥 + y 𝑓 𝑥 𝑥3 𝑥 + 𝑥 para 𝑥
5. 𝑓 𝑥 cos 𝑥 𝑒 𝑥
6 y su envolvente 𝑒 𝑥
6 para 𝑥
6. Grafique 𝑓 𝑥 𝑥 𝑠𝑒𝑛 𝑥 y su derivada para 𝑥
7. Grafique 𝑔 𝑥 𝑠𝑒𝑛 𝑥 cos 𝑥 y su derivada para 𝑥 𝜋 𝜋
8. Grafique 𝑓 𝑥 𝑥 𝑠𝑒𝑛 𝑥 y su derivada para 𝑥
Por supuesto, las opciones de graficación básica de funciones con MATLAB y OCTAVE no se limitan a las que
acabamos de aprender, sino que, usando ciertos comandos extra, podemos lograr que nuestros gráficos tengan
algunas apariencias personalizadas y/o que permitan una comprensión mejor de nuestros gráficos.
También existen distintas maneras de obtener gráficos tridimensionales, de apariencias bastante atractivas. Pero
estos los revisaremos más adelante.
Por ejemplo, el siguiente gráfico
Se obtiene mediante la secuencia de comandos
>> x=linspace(-5,5,100);
>> y = sin(4*x).* exp(- x.^2 /4);
>> plot(x,y,'r+')
>> grid
Donde el comentario pertinente es acerca de la tercera línea: la tercera entrada del comando plot, escrita entre
comillas simples, 'r+', expresa que se graficará usando red (r) símbolos de suma (+). Igualmente, si escribiésemos
'b*', obtendríamos un gráfico similar pero con “estrellas” (*) de color azul (b, de blue, azul en inglés). A
continuación, algunos comandos de este estilo, que seguramente le ayudarán a graficar funciones de un modo
mucho más variado:
Pruebe los siguientes comandos y analice los resultados obtenidos en cuanto a la apariencia de los gráficos:
1. x = linspace(0,2*pi,50); y = sin(x);
z = cos(x);
plot(x,y,'r', x,z,'gx')
2. x = linspace(0,2*pi,50); y = sin(x);
plot(x,y,'r')
z = cos(x);
hold on
plot(x,z,'gx')
hold off
CAMBIANDO EJES
El comando axis se usa ingresando el siguiente comando justo después del comando plot (o cualquier comando que
tiene un plot como una de sus salidas):
axis([xmin, xmax, ymin, ymax])
Por ejemplo, grafiquemos la función para 0
Escribiremos, por ejemplo:
>> t=linspace(0,5);
>> f=exp(5*t)-1;
>> plot(t,f); grid
Y obtenemos:
y amarillo . punto
m violeta o circulo
c celeste x cruz x
r rojo + suma
g verde - solido
b azul * estrella
w blanco : punteado
k negro -. punto y raya
-- a trazos
Investigar: ¿qué hacen los comandos hold on y hold off ?
Note que este gráfico es algo difícil de
visualizar, y no s permite entender poco del
comportamiento de la función graficada,
puesto que ésta tiende a infinito
rápidamente.
Podemos reescalar los ejes para lograr una mejor visualización del comportamiento de la función en puntos de
interés. Por ejemplo, mediante el comando
>> axis([0,1,0,50])
podemos obtener el siguiente gráfico:
que, como se ve, “cuenta” mucho mejor del gráfico de la función , pero para 0 .
SUBPLOTS
Cuando queremos, por alguna razón, graficar varios gráficos conjuntamente, podemos usar el comando subplot
para lograr tal efecto.
Por ejemplo, los siguientes comandos
>> x = linspace(0,2*pi,50);
>> y = sin(x);
>> z = cos(x);
>> w = tan(x);
>> subplot(2,2,1)
>> plot(x,y)
>> subplot(2,2,2)
>> plot(x,z)
>> subplot(2,2,3)
>> plot(x,w)
EJERCICIOS #2:
Grafique las funciones del Ejercicio #1 pero ahora todas en el intervalo 𝑡 0
Producirá el siguiente resultado…
Note que los subplots ocupan una especie
de matriz gráfica donde la ubicación de cada
pequeño gráfico está especificada por el
comando subplot(m,n,k) donde m es
la cantidad de filas de la matriz de gráficos,
n es la cantidad de columnas y k es la
ubicación del pequeño gráfico en dicha
matriz contando como 1 la posición (1,1),
como 2 la posición (1,2), como 3 la posición
(2,1), etc. En el resultado a la izquierda de
este cuadro, note que la posición (2,2)
(dirección subplot(2,2,4)) está vacía.
EJERCICIOS #3:
1. Grafique las primeras cuatro funciones del Ejercicio #1 en una super matriz gráfica de tamaño
4x4.
2. Grafique las funciones 5, 6, 7 y 8 del Ejercicio #1 en una super matriz gráfica de tamaño 4x4.
ETIQUETAS EN LOS GRÁFICOS
Los comandos
>> clf
>> plot(x,y)
>> xlabel('Etiqueta Eje X')
>> ylabel('Etiqueta Eje Y')
>> title('T’itulo del Grafico')
producen la siguiente ventana gráfica:
Varias observaciones:
1. El comando clf borra las ventanas
gráficas (es abreviatura de clear figures)
2. Dentro de los paréntesis de las etiquetas no
se admiten caracteres acentuados; de allí que
aparezca 'T’itulo … para “simular”
la tilde de “título”
3. Por supuesto, usted puede colocar el
nombre que usted desee entre comillas
simples como argumento de xlabel,
ylabel y title.
EJERCICIOS #4:
3. Coloque las etiquetas adecuadas a todas las funciones graficadas en el ejercicio #1. Coloque como
título del gráfico la expresión de la función que está graficando.