Sunteți pe pagina 1din 10

Pr actica 5

Supercies
5.1 Introducci on

Las funciones que reciben y/o devuelven valores vectoriales son de gran utilidad para muchos problemas y por tanto merecen ser analizadas. En esta pr actica se propone como tema para el estudio de dichas funciones el trabajo num erico con supercies. Los ejercicios propuestos ponen a prueba los conocimientos de algoritmos y programaci on que el alumno ha debido adquirir durante el curso.

5.1.1

Objetivos

Se pretende que el alumno: Codique funciones cuyos argumentos son vectoriales. Codique funciones cuyos resultados son vectoriales. Realice el trazado gr aco de supercies. Resuelva problemas donde intervienen supercies.

5.1.2

Requisitos

Se requiere que el alumno acuda a la sesi on pr actica con una copia de estas notas y con alg un documento identicaci on: DNI, permiso de conducci on, tarjeta de la universidad, pasaporte, etc. Se requiere tener asimilados los conceptos de los diagramas de ujo con funciones, correspondientes a las clases de teor a y problemas.

5.1.3

Desarrollo de la pr actica

El alumno deber a realizar todos los puntos que se indican a continuaci on en el orden en que aparecen. 1. Leer estas notas antes de la sesi on pr actica, despejando cualquier duda mediante consulta a sus apuntes de clase. 2. Escribir en el entorno MATLAB todos los ejemplos que aparecen en estas notas, contemplando luego los resultados. Este proceso ha de realizarse de forma cr tica. Antes de pasar al problema siguiente aseg urese que el programa que haya creado funciona perfectamente y resuelve el problema planteado. 49

50

PRACTICA 5. SUPERFICIES 3. Explorar ejemplos similares a los propuestos, cambiando alguna que otra cosa. En esas pruebas debe ser capaz de predecir el resultado de los cambios introducidos. De este modo aprender a el uso de la herramienta MATLAB. 4. Resolver los ejercicios de autoevaluaci on, comprobando la soluci on mediante pruebas en el entorno de MATLAB.

5.2

Trazado gr aco de supercies

Una supercie queda descrita mediante una funci on z = f(x, y ) denida en un rect angulo inf sup inf sup [x , x ] [y , y ]. Se plantea a menudo el problema consistente en representar en un dibujo bidimensional una supercie dada por una funci on z = f(x, y ). Para ello se puede usar un conjunto discreto de alturas calculadas en algunos puntos del dominio [xinf , xsup ] [y inf , y sup ]. A modo de ejemplo considere la funci on de dos variables z = x y . Para representar gr acamente esta funci on en el intervalo dado por x [2, 8], y [1, 4] se pueden tomar 4 puntos para cada variable independiente, lo cual da lugar a 16 parejas (x, y ) que pueden representarse, formando una rejilla como muestra la gura 5.1.
rejilla 4

3 eje y 2 1 2

eje x

Figura 5.1: Rejilla de puntos en el plano x-y cubriendo el intervalo [2, 8] [1, 4]. Se puede calcular la altura correspondiente para cada pareja (x, y ) mediante la relaci on z = x y . Los valores resultantes pueden representarse del modo mostrado por la gura 5.2 a). La gr aca que resulta es poco clara y por ello se preere la que se muestra en la gura 5.2 b) en la cual se han trazado rect angulos que pasan por los distintos puntos calculados en IR3 . En los p arrafos que siguen se va a explicar c omo conseguir gr acas de este estilo usando MATLAB. Antes de ello conviene volver al ejemplo para analizar ciertos detalles. Observe que cada una de las variables independientes x e y se ha hecho variar dentro de su intervalo obteni endose una serie de puntos. En el caso del ejemplo mostrado por las guras, los puntos son {2, 4, 6, 8} para el eje de abscisas y {1, 2, 3, 4} para el eje de ordenadas. Estos puntos pueden acomodarse en dos vectores vx = (2, 4, 6, 8) y vy = (1, 2, 3, 4). El producto cartesiano produce 16 pares (x, y ). Para cada uno de esos pares se ha calculado la altura. Estas alturas pueden incluirse en una matriz z de cuatro las y cuatro columnas. Para el caso que nos ocupa es f acil ver que la matriz toma los valores: 1 0 z= 1 2 3 2 1 0 5 4 3 2 7 6 5 4

Puede verse que el eje x se ha hecho corresponder con las columnas de la matriz y el eje y

Inform atica,

1o

Ing. Civil

Dpto. Ingenier a de Sistemas y Autom atica. ETSI. US.

51

con las las (aunque recorridas en sentido contrario). De este modo en el dibujo los elementos de la la 1 (z1,j con j = 1, , ny ) aparecen paralelos al eje x repartidos por la l nea y = 1. Los elementos de la la 2 (z2,j con j = 1, , ny ) aparecen paralelos al eje x repartidos por la l nea y = 2, y as sucesivamente.
alturas Superficie z=xy

10 eje z eje z 5 0 5 4 2 eje y 0 2 4 eje x 6

10 5 0 5 4 2 eje y 0 2 4 eje x 6

a)

b)

Figura 5.2: Alturas y representaci on gr aca de una supercie sobre una rejilla. Volviendo ahora al caso general, lo habitual es tomar puntos (x, y ) situados sobre una rejilla en el dominio rectangular, con nx ny puntos. La rejilla consiste en una divisi on de cada eje seg un los valores contenidos en dos vectores vx y vy . De este modo los puntos de la rejilla vienen dados por los pares (vxj , vyk ) para k = 1, , ny y j = 1, , nx. Las alturas correspondientes a cada uno de los pares (vxj , vyk ) ser an los valores f(vxj , vyk ). Estos valores se pueden incluir en una matriz z IRnynx cuyos elementos vienen dados por zkj = f(vxj , vyk ). La relaci on zkj = f(vxj , vyk ) es fundamental para comprender los programas que trabajan con supercies, por lo que se recomienda que la tenga siempre presente. Como resumen observe que el problema de dibujar gr acas de la supercie dada por una cierta funci on conlleva por tanto crear una matriz z como la descrita anteriormente y tambi en un par de vectores vx e vy cuyas componentes son las abscisas {vxj } y ordenadas {vyk } de la rejilla. Posteriormente, mediante la funci on mesh de MATLAB se realiza la representaci on gr aca, simplemente escribiendo la orden mesh(vx, vy, z).

5.2.1

Ejemplo de trazado de supercies

Escriba este programa de ejemplo para ilustrar los pasos indicados. Guarde las ordenes en un archivo con nombre ejesup.m. Posteriormente ejecute el programa y dedique cierto tiempo a vericar que el resultado es correcto. vx = [2, 4, 6, 8]; vy = [1, 2, 3, 4]; for k=1:4, for j=1:4, z(k,j) = vx(j)-vy(k); end end

52 mesh(vx, vy, z); xlabel(eje x (columnas) ); ylabel(eje y (filas) ); zlabel(eje z); title(Superficie z=x-y);

PRACTICA 5. SUPERFICIES

Realice cambios en los vectores a nadiendo o quitando componentes y observe el resultado producido en la matriz z y en la gr aca. No olvide borrar las variables de una prueba a otra.

5.2.2

Funci on para el trazado de supercies

Resumiendo, el problema de representar gr acamente una funci on de dos variables en MATLAB necesita que se proporcionen los datos siguientes: El dominio en el plano [xinf , xsup ] [y inf , y sup ]. El n umero de puntos en la rejilla en abscisas nx y en ordenadas ny . La funci on a representar, que se supone conocida y ja para cada caso. Los resultados que se pretenden conseguir son: El vector vx cuyas componentes vxj (con j = 1, , nx) son las divisiones en el eje de abscisas de la rejilla. Se ha de vericar que la primera componente es vx1 = xinf y la u ltima ha de ser vxnx = xsup . El vector vy cuyas componentes vyk (con k = 1, , ny ) son las divisiones en el eje de ordenadas de la rejilla. Se ha de vericar que la primera componente es vy1 = y inf y la u ltima ha de ser vyny = y sup . La matriz z de ny las y nx columnas cuyas componentes son zkj = f(vxj , vyk ) siendo los sub ndices k = 1, , ny y j = 1, , nx. Como aplicaci on de todo esto se le pide que escriba el diagrama de ujo de una funci on de nombre cosxey que reciba como argumentos los valores xinf , xsup , y inf , y sup , nx y ny y proporciona como resultado los vectores vx, vy y la matriz z correspondiente a la supercie 2 f(x, y ) = cos(x) ey . L ogicamente para este diagrama se permite que utilice las funciones coseno (cos) y exponencial (exp) sin necesidad de indicar sus respectivos diagramas. Posteriormente codique la funci on en MATLAB para realizar luego las pruebas siguientes. >> clear all >> [vx, vy, z] = cosxey(-3, 3, -1, 1, 20, 15); >> whos El resultado que debe obtener es: vx vy z 1x20 1x15 15x20 160 120 2400 double array double array double array

Compruebe que las dimensiones de los vectores y matrices obtenidos como resultados son los correctos de acuerdo con el planteamiento del ejercicio y teniendo en cuenta los argumentos que se le han pasado a la funci on en esta llamada concreta de ejemplo. Ahora podr a usar los vectores y matrices reci en calculados para realizar la gr aca de la 2 y supercie correspondiente a f(x, y ) = cos(x) e . Para ello basta con introducir las ordenes siguientes:

Inform atica,

1o

Ing. Civil

Dpto. Ingenier a de Sistemas y Autom atica. ETSI. US.

53

>> >> >> >>

mesh(vx, vy, z); xlabel(eje x (columnas) ); ylabel(eje y (filas) ); zlabel(eje z);

Si no consigue realizar la funci on correctamente pruebe la soluci on que se indica a continuaci on. function [vx, vy, z] = cosxey( xinf, xsup, yinf, ysup, nx, ny) for j=1:nx, vx(j) = xinf + (j-1)*(xsup-xinf)/(nx-1); end for k=1:ny, vy(k) = yinf + (k-1)*(ysup-yinf)/(ny-1); end for k=1:ny, for j=1:nx, z(k,j) = cos(vx(j))*exp( -vy(k)*vy(k) ); end end Puede ver que la funci on toma argumentos que son escalares y devuelve resultados vectoriales y escalares. Pruebe la funci on con distintos valores de los argumentos y compruebe que se obtienen vectores y matrices con las dimensiones correctas. Adem as dibuje la supercie correspondiente a la matriz de alturas z obtenida en cada caso.

5.3

Curvas de nivel

Las curvas de nivel son otra forma c omoda para representar supercies. En el entorno MATLAB se dispone de una funci on que permite dibujar curvas de nivel llamada contour. Para realizar unas pruebas use la funci on cosxey del apartado anterior. Los vectores vx, vy y la matriz z resultantes se van a utilizar para crear curvas de nivel del siguiente modo: >> >> >> >> >> figure contour(vx,vy,z) xlabel(valores de x) ylabel(valores de y) title(Curvas de nivel de f(x,y))

Observe la gura que resulta y comp arela con la supercie dibujada con mesh. Una variante interesante se consigue con la funci on contourf cuya forma de uso es similar a la anterior. Pruebe lo siguiente: >> figure >> contourf(vx,vy,z) A la gura anterior se le puede a nadir una barra que indique la equivalencia entre colores y valores de z . Para ello escriba simplemente:

54 >> colorbar

PRACTICA 5. SUPERFICIES

y observe el resultado. Realice alguna otra prueba con mesh y con contour y contourf. Creando primeramente otra supercie usando la funci on cosxey.

5.3.1

Una funci on para pruebas

En el entorno MATLAB se dispone de una funci on que proporciona matrices de alturas que pueden utilizarse para pruebas. La funci on tiene el nombre peaks. Esta funci on crea una matriz z de alturas nx = ny que puede usarse luego con funciones como mesh y contour. Realice la siguiente prueba >> clear all >> z=peaks(20); >> whos compruebe que se ha creado una matriz z de tama no 20 20. Proceda ahora a dibujar la supercie que representa mediante la orden mesh(z). Observar a que aparece una ventana con el trazado de la supercie. El argumento de la funci on peaks es el n umero de puntos en cada eje como puede poner de maniesto repitiendo el ejercicio con otro argumento como >> >> >> >> clear all z=peaks(60); mesh(z); whos

Observe que la supercie es la misma pero dibujada con mayor detalle al ser la distancia entre puntos menor que antes. Pruebe tambi en a dibujar las curvas de nivel correspondientes a la matriz de alturas obtenida de este modo.

5.4

B usqueda de cumbres

Dada una matriz z de alturas como las usadas en los apartados anteriores con ny las y nx columnas se desea determinar si existen m aximos locales (cumbres). Para concretar m as consid erese la supercie mostrada en la gura 5.3 y su correspondiente gr aca de curvas de nivel. Puede observarse que existe m as de una cumbre. El objetivo no es hallar la cumbre m as alta sino indicar en qu e lugares existe una cumbre. Para solucionar el problema se puede usar la idea de que una cumbre es un punto del terreno que sobresale de los puntos vecinos. Este hecho ser a visible en la matriz z de alturas pues la cumbre corresponder a a alg un elemento zk,j con la propiedad de ser mayor que sus vecinos. Por ejemplo, en la matriz siguiente: 3 4 z= 4 4 4 2 3 0 1 0 1 2 2 1 1 2 2 2 2 1 2 2 2 3 2 1 2 2 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0

hay una sola cumbre, correspondiente al elemento z4,5 . Puede verse que los elementos adyacentes tienen menor valor, por tanto el z4,5 es un m aximo local. Ha de tenerse en cuenta que los vecinos que hay que comprobar son: el de arriba, el de abajo, el de la izquierda, el de la derecha y tambi en los cuatro situados en las diagonales; es

Inform atica,

1o

Ing. Civil

Dpto. Ingenier a de Sistemas y Autom atica. ETSI. US.

55

50

10 5 altura 0
filas k

45 40 35 30 25 20

6 4 2 0 2 4 6

5 10 60 40 20 filas k 0 0 40 20 columnas j 60

15 10 5 10 20 30 columnas j 40 50

Figura 5.3: Terreno con m ultiples cumbres y simas (izquierda) y mapa con curvas de nivel (derecha). La barra de la derecha indica la correspondencia entre tonos de gris y altura. decir, arriba a la izquierda, arriba a la derecha, abajo a la izquierda y abajo a la derecha. Los elementos que est an situados en los bordes de la matriz (los de las las primera y u ltima y los de las columnas primera y u ltima) no pueden ser comprobados porque no tienen vecinos por todas partes, por ello se dejan fuera del an alisis.

5.4.1

Una funci on que busca cumbres

Escriba un algoritmo en forma de diagrama de ujo para una funci on que permita determinar los puntos en los que hay una cumbre (m aximo local) de una funci on utilizando el m etodo descrito anteriormente. La funci on recibe como argumento una matriz z de alturas y sus dimensiones ny (las) y nx (columnas). La funci on ha de tener como nombre cumbres y deber a analizar los elementos interiores de la matriz, es decir todos excepto los de los bordes. La funci on ha de comprobar para cada elemento interior si se cumple o no la condici on de ser mayor que los vecinos. El resultado de la funci on ha de ser el n umero de cumbres halladas n y dos vectores vk y vj de dimensi on n conteniendo los ndices la y columna correspondientes a todos los elementos zk,j que cumplen la condici on de ser cumbres. Para comprobar si la funci on cumbres funciona correctamente se har an algunas pruebas. En primer lugar con una matriz peque na que contenga una sola cumbre, como por ejemplo: 0 0 a= 0 0 0 0 4 1 1 1 1 1

Realizando la llamada a la funci on,

>> clear all >> a = [ 0, 0, 1; 0, 0, 1; 0, 4, 1; 0, 1, 1]; >> [n, vk, vj] = cumbres(a, 4, 3); se debe obtener como resultado n = 1, vk = (3), vj = (2), puesto que la u nica cumbre es el elemento a3,2 . A continuaci on pruebe con una matriz que contenga dos cumbres, como la siguiente:

56 0 0 m= 0 0 0 1 1 1 1 1

PRACTICA 5. SUPERFICIES

0 5 1 1 1

1 1 1 4 1

Realice la llamada a la funci on y compruebe que el resultado es n = 1, vk = (2, 4), vj = (2, 3), puesto que las cumbres son m2,2 y m4,3 . Si estas pruebas dan un resultado correcto puede pasar a una prueba con matrices mayores. Para ello puede usar la funci on peaks. Esta funci on devuelve una matriz de alturas con nx = ny igual al argumento que se le pasa. Comience calculando la matriz z para pruebas e inspeccionando la supercie con las ordenes siguientes; >> >> >> >> >> >> >> >> clear all; close all; z=peaks(40); mesh(z); figure contourf(z); colorbar; grid; ylabel(filas k); xlabel(columnas j);

Ahora realice una llamada a la funci on cumbres y compruebe visualmente en la gr aca que el resultado obtenido es correcto. Para ello mire si los puntos (k, j ) obtenidos por la funci on se corresponden en la gr aca con cumbres de la supercie dada por z . Las cumbres pueden verse en el gr aco de curvas de nivel. Compruebe que el programa proporciona resultados correctos para cualquier elecci on de nx = ny . Advertencia: Si usa valores de nx = ny menores que 20 el resultado puede ser enga noso aunque sea correcto.

5.5

Autoevaluaci on

Se incluyen a continuaci on unos ejercicios que plantean crear y probar funciones que reciben y devuelven valores vectoriales. En cada caso la tarea pasa por realizar un diagrama de ujo y luego intentar codicar una funci on de MATLAB y probar su buen funcionamiento. Si su soluci on no funciona debe buscar los errores por s mismo. Si a pesar de todo no consigue resolver el problema pruebe a introducir la soluci on que aqu se indica.

5.5.1

Ejercicio 1. Cumbre mayor

Enunciado. Una funci on de nombre mayormat ha de admitir como argumento una matriz m n z IR de alturas y sus dimensiones m y n. La funci on devolver a el mayor elemento de la matriz y sus ndices la y columna. Para saber el orden de los argumentos tenga en cuenta que la llamada a la funci on ser a similar a: >> [ valormax, indfila, indcol ] = mayormat( z, m, n); Suponga que m y n son n umeros enteros mayores que cero y que el elemento de mayor valor no se encuentra repetido en la matriz. Escriba el c odigo de MATLAB de la funci on mayormat.

Inform atica,

1o

Ing. Civil

Dpto. Ingenier a de Sistemas y Autom atica. ETSI. US.

57

Discusi on. Se pide el c odigo de una funci on con un nombre concreto, con argumentos concretos y que devuelve un cierto resultado. Es importante respetar el orden en que los argumentos y resultados han de ser colocados. Soluci on. El diagrama de ujo que resuelve el problema es similar a los que se muestran en el tema 7. A partir del diagrama se codica f acilmente la funci on poniendo atenci on a la cabecera. function [ maxi, kmax, jmax ] = mayormat( z, m, n) maxi = z(1,1); kmax=1; jmax=1; for k=1:m for j=1:n if maxi < z( k, j) maxi = z( k, j); kmax = k; jmax = j; end end end Observe que la funci on admite argumentos vectoriales z y escalares m y n. La sintaxis no obstante es la misma que para el caso puramente escalar.

5.5.2

Ejercicio 2. Interpolaci on de alturas

Enunciado. Se dispone de una matriz de alturas z y de dos vectores vx IRnx y vy IRny que representan las abscisas y ordenadas correspondientes a los distintos elementos de z . Dado un punto Q en el plano con coordenadas (xq, yq ) se desea saber qu e altura zq le corresponde. Tenga en cuenta que Q puede estar desplazado con respecto a la rejilla dada por vx y vy . Suponga, no obstante, que Q es estrictamente interior a la rejilla, o sea que xinf < xq < xsup y y inf < yq < y sup . Escriba el c odigo de MATLAB de una funci on de nombre interp que calcule zq mediante interpolaci on. Para saber el orden de los argumentos tenga en cuenta que la llamada a la funci on ser a similar a: >> zq = interp( z, vx, vy, m, n, xq, yq);

Discusi on. Se pide el c odigo de una funci on con un nombre concreto, con argumentos concretos y que devuelve un cierto resultado. Es importante respetar el orden en que los argumentos y resultados han de ser colocados. Soluci on. El diagrama de ujo que resuelve el problema es similar a los que se muestran en el tema 7. A partir del diagrama se codica f acilmente la funci on poniendo atenci on a la cabecera.

58

PRACTICA 5. SUPERFICIES

function [zq]

= interp( z, vx, vy, m, n, xq, yq)

k=1; while vy(k)<yq & k<m k=k+1; end k=k-1; j=1; while vx(j)<xq & j<n j=j+1; end j=j-1; zq = ( z(k,j) + z(k+1,j) + z(k,j+1) + z(k+1,j+1) )/4; Observe que la funci on admite argumentos vectoriales y escalares. No obstante la sintaxis es la misma que para el caso puramente escalar.

5.6
5.6.1

Ejercicios propuestos adicionales


Ejercicio propuesto 1.

Sea z IRmn una matriz gen erica que representa la orograf a de un terreno, donde zkj representa la altitud en metros del punto del terreno situado en las coordenadas vx(j ), vy (k ). Se quiere crear otra matriz t que tenga todos los valores iguales a cero excepto aqu ellos que sean mayores a cierto valor cota que valdr an 1. Por ejemplo si cota = 10 y 10 10 z= 10 10 10 10 14 11 11 0 11 0 , entonces t = 0 11 11 0 0 0 1 1 1 1 . 1 1

Escriba el c odigo de MATLAB de una funci on que calcule dicha matriz t, que tendr a como nombre zonaalta, y recibir a como argumentos la matriz z , sus dimentiones m y n y la cota, y devolver a la matriz t.

5.6.2

Ejercicio propuesto 2.

Sean los vectores a = (a1 , , ap , ap+1 ) y b = (b1 , , bq , bq+1 ) y las constantes p > 0 y q > 0 los coecientes y los grados correspondientes a los polinomios: A(x) = a1 xp + + ap x1 + ap+1 B (x) = b1 xq + + bq x1 + bq+1 . Escriba el c odigo de MATLAB de una funci on que calcule el polinomio suma, tendr a como nombre sumpol y recibiri a como argumento dos vectores de coecientes de los polinomios a y b y sus grados p y q , y devolver a el vector de coecientes c correspondientes al polinomio suma C (x) = A(x) + B (x) y el grado r de dicho polinomio.

S-ar putea să vă placă și