APROXIMACIÓN GRÁFICA PARA RESOLVER …mathgene.usc.es/matlab/trabajos/desigualdades.pdf · Un...

18
APROXIMACIÓN GRÁFICA PARA RESOLVER DESIGUALDADES. Jose Luis Rodríguez Rey Luís Miguel González Barcia

Transcript of APROXIMACIÓN GRÁFICA PARA RESOLVER …mathgene.usc.es/matlab/trabajos/desigualdades.pdf · Un...

APROXIMACIÓN GRÁFICA PARA RESOLVER DESIGUALDADES.

Jose Luis Rodríguez Rey Luís Miguel González Barcia

En este DEMO se explica como resolver una desigualdad. En este caso la pregunta es la siguiente:

-¿Qué es mayor, eπ o πe?

Es cierto que podemos resolver en matlab esto numéricamente, incluso con una calculadora, pero veremos como hacer una resolución gráfica para este problema.

En primer lugar vamos a definir la superficie, y para ello determinamos las características de la malla para la superficie con dos vectores x e y del siguiente modo:

x=0:0.16:5;

y=0:0.16:5;

Este comando nos dará dos vectores con componentes entre 0 y 5, espaciadas 0.16 unidades, pero podemos poner otros ejemplos al azar:

x=1:0.4:6;

y=1:0.4:6;

Este es otro ejemplo. Debemos notar que si el valor es menor de 0.16, la malla será mas fina que la que veremos cuando dibujemos la superficie.

Definiremos la malla haciendo una combinación para que todo punto de x se corresponda con uno de y, y esto lo hacemos con el comando meshgrid.

[xx,yy]=meshgrid(x,y);

Este comando nos devuelve una matriz xx que coloca en cada fila el vector x, y en un vector yy cuyas columnas contienen el vector y. Ademas debemos notar que la matriz es cuadrada, de orden 32x32.

Ahora definiremos la función z como xy-yx.

Utilizaremos para ello el comando surf:

zz=xx.^yy-yy.^xx;

h=surf(x,y,zz);

Y con ello obtenemos la gráfica de la función con el tamaño de malla definido previamente.

Ahora podemos poner en práctica los comandos aprendidos para modificar la gráfica, así como poder añadir titulo a los ejes, cambiarla de color, etc.

set(h,'EdgeColor',[0.7 0.7 0.7]);

Este comando nos permite combinar diferentes propiedades del gráfico, en este caso se ha seleccionado el color de la malla. Los números colocados entre corchetes indican la proporción en formato RGB, esto es,

en cantidad de color rojo, verde y azul. El valor puede ser de 1 como máximo y 0 como mínimo. Esta proporción de colores nos dará un gris claro, la gráfica, queda así en consecuencia.

Notamos que en efecto, la malla nos ha cambiado a color gris. El objeto h que aparece en el comando corresponde a que cuando definimos la gráfica, denominamos con la letra h a la superficie de la gráfica.

El comando view que usaremos a continuación nos permite girar la gráfica para verla desde diferentes puntos de vista:

view(20,50);

El primer número nos indica el ángulo (en grados) de rotación en torno al eje z o eje vertical, mientras que el segundo número implica el ángulo (en grados) de elevación respecto al plano xy. En el esquema siguiente se ilustra mejor como funciona:

La vista de la gráfica nos queda así tras aplicar el comando view:

Podemos tanto en el caso del color de la malla como en el ángulo de visión, hacer diferentes variantes, y obtenemos gráficas muy variables cambiando solamente uno de los parámetros.

El próximo comando para modificar las propiedades de la superficie, consiste en cambiar directamente el color de la superficie, este comando se denomina colormap, y nos ofrece una gran variedad de tonos que podemos aplicar a la gráfica:

En este caso, la gama de colores que se ha elegido es la de HSV:

colormap(hsv);

Con este comando, la gráfica nos queda con este tono:

Pero no es esta la única gama de colores que podemos aplicar, en la tabla anterior aparecen algunas posibilidades, pero hay más.

Otra opción posible es colocar el color de la gráfica con el formato RGB, pero el problema de usar este comando es que las desviaciones del plano, es decir, las zonas que en esta gráfica están en color azul oscuro, morado, verde y amarillo, aparecerían del mismo color y no se apreciaría igual de bien el desnivel.

Una variante para modificar el color es aplicar el comando de una manera diferente. Podemos seleccionar el número de colores que queremos que aparezcan en la gráfica, pero si seleccionamos un número bajo, no se apreciaría bien el desnivel. Un ejemplo de ello es la gráfica siguiente, que se ha obtenido por el comando:

colormap(hot(5))

Se aprecia que los colores utilizados son exactamente 5: un amarillo claro, un amarillo algo mas oscuro, rojo, un color crema y blanco, si colocásemos otro número en el paréntesis, el número de colores que pongamos, pero tampoco podemos excedernos, ya que podemos ver que es lo que sucede si ponemos un número muy elevado:

colormap(hot(50000))

Podemos utilizar el comando colormap(hot) para comprobar los colores que salen, y vemos que son los mismos, es decir, que Matlab tiene un límite de colores, y a partir de ahí no se añaden más.

Como hemos notado ya, la gráfica aparece coloreada por colores diferentes, que podemos modificar a nuestro gusto. Cada color representa una altura diferente.

Para poder saber a que altura corresponde cada uno de los colores, Matlab nos permite colocar junto a la gráfica una barra que nos indica los colores con su altura, y el comando será colorbar. Si lo aplicamos a la gráfica, nos quedará así:

Una vez hemos coloreado la gráfica, podremos etiquetar los ejes que la forman, para ello utilizaremos los comandos xlabel e ylabel. Además, podemos también colocar un título a la gráfica con el comando title.

De este modo escribimos:

title('z=x^y-y^x'); xlabel('x'); ylabel('y');

Esto nos etiquetara la gráfica con el titulo z=x^y-y^x, y los ejes x e y con las letras correspondientes.

Debemos notar en la imagen que el eje z no esta etiquetado, pero podemos etiquetarlo como a los otros dos con el comando zlabel, nos queda la gráfica con la etiqueta de z en el eje vertical.

Con esto terminamos la personalización de la gráfica. Por supuesto no es necesario el uso de estos comandos para resolver el problema inicial. De todos modos la gráfica puede ser modificada en la propia ventana en la que aparece.

Ahora calcularemos una matriz que contenga las curvas de nivel de esta superficie, para ello, el comando utilizado se denomina contourc. Este comando guarda los vectores de las curvas de nivel en una matriz. Llamamos a esta matriz c.

Definimos las variables que van a determinar las curvas de nivel en torno a los 2 ejes, y se define el tamaño, y además, los puntos que van a pasar por ellos.

Lo siguiente en esta práctica es definir una constante, que se llamará list1Len, y la definimos del siguiente modo:

list1Len=c(2,1)

Este comando nos proporciona el valor de la primera columna y de la segunda fila de la matriz c que hemos definido anteriormente.

Definiremos las líneas que trazaremos posteriormente para la resolución del problema inicial. Lo hacemos así:

xcontour=[c(1,2:1+list1Len) NaN c(1,3+list1Len:size(c,2))],ycontour=[c(2,2:1+list1Len) NaN c(2,3+list1Len:size(c,2))],

El NaN que aparece en este comando implica lo siguiente:

-Primero hemos de tener en cuenta que definir xContour sin el NaN, nos devolvería una matriz que se puede dividir en 2: por un lado c(1,2:1+list1Len), y pegada a la derecha c(1,3+list1Len:size(c,2)).

NaN se conoce como abreviatura de not a number. Esto, trata a las dos matrices que componen xContour e yContour de forma separada, y aunque nos devuelva una sola matriz, matlab tratará posteriormente las matrices de contorno por separado. Consideramos que al final, en vez de tener dos matrices, es como si tuviéramos cuatro matrices

Ahora que tenemos definidas las variables de contorno en los vectores xContour e yContour, representaremos en la gráfica actual. Debemos tener precaución, ya que si la representamos inmediatamente, perderemos la gráfica que tenemos en este momento. Para poder colocar el nuevo trazado en la misma gráfica, lo que hacemos es utilizar el comando hold on de modo que el trazado que vamos a hacer aparecerá superpuesto a nuestra gráfica.

El trazado se realiza con el comando line:

line(xcontour, ycontour,'color','k');

El comando en la forma general es line(x,y), donde x es el vector xContour e y es el vector yContour. Si se ha realizado correctamente, la gráfica que obtendremos será la siguiente.

En este caso, al utilizar el comando line, hemos añadido un apartado que en principio parece no haber hecho nada. Por el nombre se deduce fácilmente que lo que se ha cambiado es el color, y la “k” implica color negro, procedente del ingles dark. No se utiliza b de black ya que la b se utiliza para azul (blue). Otros colores utilizados son el g de verde (green), r de rojo (red) y y de amarillo (yellow).

En la siguiente tabla se muestra una serie de abreviaturas que maneja matlab para definir los parámetros de modificación en el comando line:

También podemos utilizar el comando RGB que ya hemos visto como se aplica, para elegir un color personalizado.

El comando line nos permite ademas, elegir un ancho de línea. Para ello introduciremos en los parámetros el comando LineWidth, seguido de un número que representa el ancho de la línea. Por ejemplo, si colocamos el siguiente comando:

line(xContour,yContour,'LineWidth',4,'Color',[.8 .8 .8]);

la gráfica que obtenemos es la siguiente:

Esta representación muestra las soluciones enteras a la ecuación planteada (xy – yx=0). La única solución entera que tenemos para un x aproximadamente igual que y es 24 = 42 ..¿Dónde tenemos entonces la intersección que nos defina la ecuación (xy – yx=0).

Ahora representaremos una serie de puntos en las líneas dibujadas, para ello utilizaremos el comando plot:

plot([0:5 2 4],[0:5 4 2],'r.','MarkerSize',25);

Este comando nos representará unos marcadores (cuyo color y tamaño vienen dados por el parámetro r, que ya sabemos que corresponde al color rojo, y el parámetro 25, que nos indica el tamaño del marcador.

NOTA: debemos tener en cuenta que el comando hold on que hemos utilizado antes sigue funcionando ahora, y todo lo que representemos se representará en la misma figura (por defecto Figure1), a no ser que coloquemos el comando hold off, con el cual se dejará de representar en esa figura.

Para valorar los puntos eπ y πe representaremos con otros dos marcadores, los puntos e,π y π,e y a partir de ahí podremos ver cual de ellos es mayor.

En primer lugar, lo que debemos hacer es definir el valor de e, ya que Matlab no cuenta con el en la base de datos. Para definir lo, es muy sencillo si sabemos que e=exponencial(1)

e=exp(1);

ahora que tenemos definido el numero e, podemos colocar los marcadores

plot([e pi],[pi e], 'r.'MarkeSize',25);

Para distinguir estos puntos marcados de los demás, añadiremos un marcador más pequeño en el centro de este:

plot([e pi],[pi e], 'y.'MarkeSize',10);

De este modo nos quedará una gráfica así:

Para distinguir mejor los puntos entre ellos, editaremos un texto que nos indique bien los puntos marcados, para ello utilizaremos el comando text.

text(e,3.3,'(e,pi)','Color','k','HorizontalAlignment','left','VerticalAlignment','bottom');

text(e,3.3,'(pi,e)','Color','k','HorizontalAlignment','left','VerticalAlignment','bottom');

Este comando consiste en lo siguiente, en primer lugar se coloca el punto, en este caso el punto es (e,3.3).

¿Por qué se selecciona el (e,3.3) y no el (e,π)? Es muy simple, si colocamos el valor de π el texto se colocaría encima del punto y seria más difícil de leer.

En segundo lugar, entre comillas, colocamos el texto a introducir en este caso, las coordenadas de los puntos representados.

HorizontalAlignment y VerticalAlignment nos indican la justificación del texto, es decir, hacia que lado está orientado, el sistema para elegir la ubicación del texto se basa en el siguiente esquema:

Esta es la lista de posiciones que podemos utilizar para el comando HorizontalAlignment, de modo que se nos justificará el texto según hayamos elegido una posición u otra.

Esta es la lista de posiciones que podemos utilizar para el comando VerticalAlignment, de modo que se nos justificará el texto según hayamos elegido una posición u otra.

Según el gráfico, podemos ver cual de las potencias es mayor. Para ello, comprobamos cual de los dos puntos está más alejado del origen de coordenadas. Se aprecia que el valor correspondiente a eπ es un poco mayor que el de πe .

Este hecho puede ser demostrado con calculadora o con el propio matlab, haciendo el cálculo correspondiente, como ya indicábamos al principio. Utilizaremos este recurso para contrastar si los resultados obtenidos en matlab son correctos:

eπ=23.1407

πe=22,4592

En efecto ,podemos concluir que con la parte gráfica y la parte numérica, que eπ > πe.