EIP Breve Selección de Instrucciones 2014-2015

30
M. D´ ıez Minguito y A. Millares Valenzuela Instituto Interuniversitario del Sistema Tierra en Andaluc´ ıa Universidad de Granada Curso de Introducci´ on a MATLAB TM Breve selecci´ on de instrucciones February 15, 2015

description

Matlab

Transcript of EIP Breve Selección de Instrucciones 2014-2015

M. Dıez Minguito y A. Millares ValenzuelaInstituto Interuniversitario del Sistema Tierra en AndalucıaUniversidad de Granada

Curso de Introduccion aMATLABTM

Breve seleccion de instrucciones

February 15, 2015

Contents

1 Algunas instrucciones basicas en MatlabTM . . . . . . . . . . . . . . . . . . . . . . . 11.1 Operadores aritmeticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Operaciones con vectores y matrices . . . . . . . . . . . . . . . . . . . . . . . . . . 31.4 Visualizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.5 Lectura y escritura con y sin formato . . . . . . . . . . . . . . . . . . . . . . . . . . 171.6 Entrada y salida de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.7 Estructuras de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

1.7.1 Iterativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.7.2 De decision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

1.8 Otras funciones utiles de MatlabTM . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.9 Algunos consejos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

2 Mas informacion en la web... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

v

List of Figures

1.1 Placa, distribucion de nodos y condiciones de contorno. . . . . . . . . . . . 91.2 Solucion interpolada del sistema de ecuaciones lineales Eq. 1.32

segun las condiciones de contorno dadas en el ejemplo (Fig. 1.2). . . . 91.3 Ejemplo de representacion con la funcion plot. Tal y como se

indica, se estan representando las funciones f (x) = sin(x) yg(x) = cos(x)sin(x2). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.4 Ejemplo de representacion con la funcion surfc. En este caso serepresenta la funcion de Bessel de primera especie de orden cero J0con argumento x2 + y2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

1.5 Representacion de diferentes funciones conocidas. . . . . . . . . . . . . . . . . 17

vii

Chapter 1Algunas instrucciones basicas en MatlabTM

“Tell me and I forget. Teach me and I remember. Involve me andI learn”. Benjamin Franklin.

1.1 Operadores aritmeticos

Las siguientes operaciones pueden efectuarse tanto en un archivo .m como en el laventana de instrucciones (Command Window). Los archivos .m son archivos ASCIIque son interpretados y ejecutados por MatlabTM. Se definen los siguientes oper-adores:

Operador producto: el producto de un escalar a con b se define en MatlabTM me-diante ∗, esto es, a∗b.

Operador suma: se define con a+b.Operador resta: se expresa de la siguiente forma a−b.Operador exponente: un numero real a elevado a b se expresa como aˆb.Operador division: se define como a/b.Operador asignacion (igual): a un numero c que se le asigna, por ejemplo, el valor

resultante de la suma de a con b se expresa en MatlabTM como c = b+a. Es im-portante notar que tanto en MatlabTM como en otros lenguajes de programacion,el operador = no representa el “igual” en sentido matematico, sino la asignaciondel contenido de la variable que hay a la derecha de = a la variable que se encuen-tra a la izquierda. Abusando del lenguaje diremos que “’c’ es igual a ’b+ a’”,pero en realidad deberıa decirse “a la variable c se le asigna el resultado dea+ b”. Es comun en todos los lenguajes de programacion efectuar operacionesde la forma a = a+1. Esto, matematicamente no tiene sentido, pero si el signo =se interpreta como operador asignacion no hay error. El valor resultado de sumarel contenido de la variable a con 1, se almacena de nuevo en la variable a.

1.2 Funciones

MatlabTM incluye una pletora de funciones como, por ejemplo, sqrt(x), log(x),sin(x), bessel j(n, x), exp(x), que calculan, respectivamente, la raız cuadrada, el log-

1

2 1 Algunas instrucciones basicas en MatlabTM

aritmo neperiano, el seno, la funcion de Bessel de primera especie de orden n y laexponencial de una variable (o una matriz) x. En la Ayuda de MatlabTM puedenencontrarse estas y muchas mas, junto con su definicion y su uso.

Example 1.1. Una vez familiarizado con el entorno de MatlabTM, la creacion dearchivos y algunas funciones basicas, el usuario deberıa ser capaz de realizar lassiguientes operaciones:

1. Determinar la celeridad de onda en aguas someras c =√

gh, donde h = 10m yg = 9.8m/s2.

2. Obtener la elevacion de una onda progresiva unidimensional η(x, t)= a ·cos(ωt− kx)en x = 10km en un determinado instante t = 1.5horas, dados la amplitud a = 1.5m, el periodo T = 12.45 horas y la longitud de onda λ = 360 km.

3. Estimar la altura de ola maxima Hmax,N a partir de la altura de ola significante

considerando para ello la expresion Hmax,N ≈ Hs

(√lnN

2 + γ√8 lnN

), donde γ =

0.577 es la constante de Euler-Mascheroni, N = 1000 y Hs = 1.34 m.

Listing 1.1 Operaciones sencillas con MatlabTM. Ejemplo 1.1% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PROGRAMA: e j e m p l o 1 %% % DESCRIPCION : Ejemplo de o p e r a c i o n e s s e n c i l l a s %% % con Matlab %% % USO: [ c , e ta , HmaxN] = e j e m p l o 1 ( ) %% % ENTRADAS: V a r i a s m e d i a n t e ’ i n p u t ’ %% % SALIDAS : %% % − c : c e l e r i d a d %% % − e t a : e l e v a c i o n %% % − HmaxN: a l t u r a de o l a maxima %% % FECHA: 3 0 / 0 3 / 2 0 1 2 %% % s e e a l s o i n p u t , f p r i n t f %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

f u n c t i o n [ c , e t a , HmaxN] = e jemplo1 ( )

c l o s e a l lc l e a r a l lc l c

% ( 1 ) C e l e r i d a d de onda en aguas somerasdi sp ( ’∗∗∗ CELERIDAD EN AGUAS SOMERAS ∗∗∗ ’ )h0 = input ( ’ I n t r o d u z c a e l n i v e l medio (m) : ’ ) ;g = input ( ’ I n t r o d u z c a l a a c e l e r a c i o n de l a g r a v e d a d (m/ s ˆ 2 ) : ’ ) ;c = s q r t ( g∗h0 ) ;f p r i n t f ( ’ La c e l e r i d a d es %f m/ s\n\n ’ , c )

% ( 2 ) E l e v a c i o n de una onda p r o g r e s i v adi sp ( ’∗∗∗ ELEVACION DE UNA ONDA PROGRESIVA a∗cos (w∗ t−k∗x ) ∗∗∗ ’ )a = input ( ’ I n t r o d u z c a l a a m p l i t u d de onda (m) : ’ ) ;T = input ( ’ I n t r o d u z c a e l p e r i o d o de l a onda ( s ) : ’ ) ;w = 2∗pi / T ; % 1 / sL = input ( ’ I n t r o d u z c a l a l o n g i t u d de onda (m) : ’ ) ;k = 2∗pi / L ; % 1 /mx = input ( ’ I n t r o d u z c a x , l a p o s i c i o n de medida (m) : ’ ) ;t = input ( ’ I n t r o d u z c a t , e l i n s t a n t e de medida ( s ) : ’ ) ;e t a = a∗cos (w∗ t−k∗x ) ;f p r i n t f ( ’ La e l e v a c i o n m ar ea l e s %f m\n\n ’ , e t a )

% ( 3 ) A l t u r a de o l a maxima

1.3 Operaciones con vectores y matrices 3

di sp ( ’∗∗∗ ESTIMACION DE LA ALTURA DE OLA MAXIMA ∗∗∗ ’ )gE = 0 . 5 7 7 ; % gamma de E u l e rN = input ( ’ I n t r o d u z c a e l numero de o l a s : ’ ) ;H13 = input ( ’ I n t r o d u z c a l a a l t u r a de o l a s i g n i f i c a n t e (m) : ’ ) ;HmaxN = H13∗( s q r t ( 0 . 5∗ l o g (N) ) + gE / s q r t (8∗ l o g (N ) ) ) ;f p r i n t f ( ’ La a l t u r a maxima e s t i m a d a es %f m\n ’ , HmaxN)

1.3 Operaciones con vectores y matrices

Sin entrar en detalles, diremos que una matriz es una coleccion de elementos orde-nados en filas y columnas. Ası, por ejemplo, la matriz A es una matriz 3×3

A3×3 =

a b cd e fg h j

, (1.1)

la matriz B es un vector fila con 4 columnas

B1×4 =(

a b c d), (1.2)

y la matriz C es un vector columna con 3 filas

C3×1 =

abc

. (1.3)

En general una matriz Dnm define una matriz de n filas por m columnas. EnMatlabTM los vectores se definen con corchetes de la siguiente forma1:

A = [a,b,c (1.4)d,e, f (1.5)

g,h, j] . (1.6)

Esta forma de introducir matrices se suele emplear en los .m. La coma (o elespacio) representa la separacion entre columnas, mientras que la introduccion denuevas filas se hace un retorno de carro (en un .m, no en la ventana de instrucciones)o con el punto y coma. Las matrices anteriores se expresan en una sola lınea de lasiguiente forma: A3×3 = [a,b,c; d,e, f ; g,h, j], B1×4 = [a,b,c,d] y C3×1 = [a;b;c].

Cuando se trabaja con vectores suele ser habitual querer saber el maximo y/o elmınimo y/o la media de un vector. Las funciones max(), min() y mean() efectuan

1 Habiendo definido previamente las variables a, b, c, d, e, f , g e j.

4 1 Algunas instrucciones basicas en MatlabTM

esas operaciones. Ası, por ejemplo, si A = [16.3− 9585], max(A) produce comosalida 6.30, min(A) -958 y mean(A) -236.4250. Si existe algun elemento marcadocomo NaN puede usarse la funcion nanmean() que realiza la media de todos loselementos excepto los NaN. Estas funciones son aplicables a matrices, no solo avectores, y se les puede especificar la dimension sobre la que se realiza la operacion.Las funciones max() y min() devuelven opcionalmente los ındices de los elementosmaximo(s) y mınimo(s), respectivamente.

Para definir de forma automatica vectores hay disponibles varias funciones deMatlabTM.

linspace: Con a=linspace(x1, x2, N) se define un vector a de N elementos equies-paciados linealmente entre los valores x1 y x2.

zeros: Con a=zeros(N, M) se define una matriz de N filas por M columnas cuyoselementos son todos ceros.

ones: Con a=ones(N, M) es igual que con zeros(), pero rellenando la matriz conunos.

eye: a=eye(N) define una matriz identidad de N×N.rand: a=rand(N,M) define una matriz N ×M de numero aleatorios uniforme-

mente distribuidos en el intervalo (0, 1).

Una forma rapida de definir matrices y que es similar (pero no igual, ojo con losredondeos) a la funcion linspace() es haciendo uso del operador rango : (dos puntos).Por ejemplo, A = 50 : 100 define un vector de 51 elementos, cuyos elementos vande 50 a 100 a saltos de 1. Por defecto usa un “salto” de 1. Si queremos especificarotro valor debemos especificarlo de la siguiente manera: A = 50 : 2 : 100, define unvector de 26 elementos cuyos elementos son 50, 52, . . .98, 100. Del mismo modo,A = 0 : 0.1 : 100 es un vector de 1001 elementos entre 0 y 100 cuyo espaciado entreellos es 0.1.

Una vez definida la matriz o el vector es posible acceder a sus elementos. Porejemplo, para la matriz D siguiente

D = [1,−1,0.1 (1.7)3,0,−0.65 (1.8)

−9,−12,1.54] , (1.9)

MatlabTM devuelve los valores de los respectivos elementos con la instruccionD(n,m) donde n indica la fila y m la columna. Por ejemplo, para D(2,3) MatlabTM

devuelve el valor -0.65 y para D(3,1) el valor -9. Tambien podemos usar el op-erador rango para obtener no uno, sino varios elementos ordenados. Por ejem-plo, a = D(3,1 : 3) almacena en a la fila 3 completa, esto es, el vector a es(−9.00,−12.00, 1.54). Si lo que se quiere es el rango completo, 1 : 3, puede in-dicarse de forma abreviada como a = D(3, :), sin poner el numero inicial o el final.Otro ejemplo, podrıa ser b = D(2,2 : 3). En este caso, se define un vector b cuyoselementos son (0,−0.65).

1.3 Operaciones con vectores y matrices 5

Igual que con numeros, pueden realizarse operaciones aritmeticas con matrices.Para sumar y restar matrices se emplean los operadores + y −, respectivamente2.Para que la suma/resta este bien definida (matematicamente y en MatlabTM) las ma-trices tienen que tener identico numero de filas y columnas, de otro modo MatlabTM

dara un mensaje de error. Por ejemplo, no podremos sumar la matriz D3×3 a la ma-triz al vector

a1×3 = [3−60.02] , (1.10)

puesto que el numero de filas no coincide. En cambio, podemos sumar la matrizD3×3 definida en 1.7 a la matriz C3×3

C = [1,−1,1 (1.11)−1,1,0 (1.12)

−2,−2,0] , (1.13)

siendo el resultado

[2,−2,1.1 (1.14)2,1,−0.65 (1.15)

−11,−14,1.54] . (1.16)

El producto de matrices se efectua haciendo uso del operador ∗. Recuerdese ladefinicion del producto de matrices. Ojo que no es elemento a elemento. Para que elproducto de matrices AnA,mA ∗BnB,mB este bien definido matematicamente el numerode columnas de la matriz a la izquierda (A) debe coincidir con el numero de fila de lamatriz a la derecha (B), esto es, mA = nB. El resultado sera una nueva matriz CnA,mB

de nA filas y mB columnas. Esta condicion se cumple para las matrices cuadradas Cy D. El resultado de C ∗D es

[−11,−13,2.29 (1.17)2,1,−0.75 (1.18)−8,2,1.1] . (1.19)

Recuerdese tambien que el producto de matrices no es conmutativo. El resultadode D∗C es

2 Recuerdese que la suma y la resta entre matrices se realiza elemento a elemento.

6 1 Algunas instrucciones basicas en MatlabTM

[1.8,−2.2,1 (1.20)4.3,−1.7,3 (1.21)

−0.08,−6.08,−9.0] . (1.22)

Es igualmente posible calcular el producto del vector a, definido en Eq. 1.10con la matriz C, puesto que el numero de columnas de a coincide con el numerode filas de C. El resultado de a1,3 ∗D3,3 es un vector v1,3 cuyos elementos son(8.96,−9.04,3.0000). Si queremos realizar el producto D3,3 ∗ a1,3 MatlabTM pro-ducira un mensaje de error, puesto que el numero de columnas de D no coincide conel numero de filas de a (Inner matrix dimensions must agree).

El operador division / esta relacionado con la inversion de matrices. En MatlabTM

A/B representa A∗B−1, donde B−1 es la matriz inversa de B. En este caso, para queA/B este bien definido, esto es, para que A ∗B−1 este bien definido el numero decolumnas de A debe coincidir con el numero de columnas de B. Tambien se de-fine la inversion por la izquierda, esto es, B−1 ∗A. Esto en MatlabTM se realiza conla barra inversa: A\B. Esto es util para resolver sistemas de ecuaciones de formasencilla.

Dadas dos matrices en MatlabTM, es muy frecuente querer calcular, no el pro-ducto en el sentido usual, sino el producto elemento a elemento. Lo mismo con ladivision. Es evidente que no se puede emplear el mismo sımbolo. Ese producto/di-vision elemento a elemento se le especifica a MatlabTM poniendo un punto . delantede la operacion3. Por ejemplo, para efectuar un producto elemento a elemento en-tre las matrices C y D se le darıa a MatlabTM la instruccion C. ∗D. Este productoelemento a elemento (especial de MatlabTM), sı que es conmutativo puesto que elproducto de escalares lo es. El resultado serıa T =C.∗D

T = [1,1,0.1 (1.23)−3,0,0 (1.24)

18,24,0] . (1.25)

Del mismo modo se harıa con el operador exponente, si queremos elevar a unapotencia los elementos de una matriz. Por ejemplo, si R = T.ˆ2

R = [1,1,0.01 (1.26)9,0,0 (1.27)

324,576,0] . (1.28)

En este caso, al ser la matriz cuadrada, podrıa determinarse Q = T ˆ2 (sin punto),es decir, Q = T ∗T . El resultado claramente es diferente (las operaciones son difer-entes)

3 Notese que, por definicion, la suma/resta de matrices ya se realiza elemento a elemento, ası queno es necesario poner un punto delante de la operacion suma/resta.

1.3 Operaciones con vectores y matrices 7

Q = [−0.2,3.4,0.1 (1.29)−3,−3,−0.3 (1.30)−54,18,1.8] . (1.31)

Example 1.2. Este ejemplo ha sido tomado de [Gerald, C.F. y P.O. Wheatley (2000),Analisis Numerico con Aplicaciones] y se corresponde con el problema de determi-nacion del mapa de temperaturas de equilibrio en una placa metalica bidimensionalde dimensiones 2m× 2m. Los contornos, tal y como se indica en la Fig. 1.1, sehallan cada uno a una determinada temperatura mantenida constante (imagınese encontacto con un termostato a la temperatura indicada). Se pretende determinar lastemperaturas en el interior de la placa, discretizando su interior en 9 nodos, denom-inados uk, con k = 1 . . .9 (Fig. 1.1). Las temperaturas en los nodos vienen dadaspor la ecuacion de difusion, y que en equilibrio se reduce a la ecuacion de Laplace.Aplicada a este sistema y debidamente discretizada mediante diferencias finitas cen-tradas da lugar al Sistema de ecuaciones lineales siguiente:

−4u1 +u2 +u4 = −50u1−4u2 +u3 +u5 = −50

u2−4u3 +u6 = −150u1 −4u4 +u5 +u7 = 0

u2 +u4−4u5 +u6 +u8 = 0u3 +u5−4u6 +u9 = −100 (1.32)

u4 −4u7 +u8 = −50u5 +u7−4u8 = −50

u6 +u8−4u9 = −150

En la practica, la temperatura uk es simplemente el resultado de considerar elpromedio aritmetico de las temperaturas de los 4 nodos circundantes. La soluciondel sistema de ecuaciones lineales Eq. 1.32 puede verse en la Fig. 1.2.

Listing 1.2 Resolucion del sistema de ecuaciones lineales Eq. 1.32. Para ganar generalidad, se hansupuesto unas temperaturas genericas Tu, Td , Tl y Tr en los contornos.% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PROGRAMA: e j e m p l o 2 %% % DESCRIPCION : R e s u e l v e con Matlab un s i s t e m a de %% % e c u a c i o n e s l i n e a l e s s i m i l a r a l d e l e j e m p l o 2 %% % USO: s o l = e j e m p l o 2 ( Tu , Td , Tl , Tr ) %% % ENTRADAS: %% % − Tu : Ta en e l c o n t o r n o s u p e r i o r %% % − Td : Ta en e l c o n t o r n o i n f e r i o r %% % − Tl : Ta en e l c o n t o r n o i z q u i e r d o %% % − Tu : Ta en e l c o n t o r n o derecho %% % SALIDAS : %% % − s o l : M a t r i z d i s t r i b u c i o n de Tempera turas %% % FECHA: 3 0 / 0 3 / 2 0 1 2 %

8 1 Algunas instrucciones basicas en MatlabTM

% % s e e a l s o inv , de t , p c o l o r %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%f u n c t i o n s o l = e jemplo2 ( Tu , Td , Tl , Tr )

c l o s e a l lc l e a r a l lc l c

% S i s t e m a Au=b , donde A es una m a t r i z 9 x9

A = [−4 1 0 1 0 0 0 0 0 ;1 −4 1 0 1 0 0 0 0 ;0 1 −4 0 0 1 0 0 0 ;1 0 0 −4 1 0 1 0 0 ;0 1 0 1 −4 1 0 1 0 ;0 0 1 0 1 −4 0 0 1 ;0 0 0 1 0 0 −4 1 0 ;0 0 0 0 1 0 1 −4 1 ;0 0 0 0 0 1 0 1 −4];

b = [−Tu−Tl ;−Tu ;−Tu−Tr ;−Tl ;0 ;−Tr ;−Td−Tl ;−Td ;−Td−Tr ] ;

% V e r i f i c a m o s que l a m a t r i z A sea no−s i n g u l a r , i . e . d e t ( A) ˜=0i f ( abs ( det (A))>1e−7)

T=A\b ;% o b i e n% s o l=i n v ( A)∗b

end% Para r e p r e s e n t a r e l r e s u l t a d o s como en l a p l a c a . . .% ( i n c l u y e CCs )s o l = z e r o s ( 5 , 5 ) ;s o l ( 1 , 2 : 4 ) = Tu ;s o l ( end , 2 : 4 ) = Td ;s o l ( 2 : 4 , 1 ) = Tl ;s o l ( 2 : 4 , end ) = Tr ;s o l ( 2 , 2 : 4 ) = [ T ( 1 ) , T ( 2 ) , T ( 3 ) ] ;s o l ( 3 , 2 : 4 ) = [ T ( 4 ) , T ( 5 ) , T ( 6 ) ] ;s o l ( 4 , 2 : 4 ) = [ T ( 7 ) , T ( 8 ) , T ( 9 ) ] ;

% Aunque se ver a en e l ap a r t a d o s i g u i e n t e con mas d e t a l l e . . .% usaremos l a f u n c i o n p c o l o r para v i s u a l i z a r e l r e s u l t a d ox = 2 : 2 : 2∗ l e n g t h ( s o l ( : , 1 ) ) ;y = 2 : 2 : 2∗ l e n g t h ( s o l ( 1 , : ) ) ;pc o l or ( x , y , s o l ) ; shading i n t e r px l a b e l ( ’ x ’ )y l a b e l ( ’ y ’ )z l a b e l ( ’ u ( x , y ) ’ )t i t l e ( ’ D i s t r i b u c i o n de t e m p e r a t u r a s u ( x , y ) ’ )c o l o r b a r

1.4 Visualizacion 9

Fig. 1.1 Placa, distribucion de nodos y condiciones de contorno.

Fig. 1.2 Solucion interpolada del sistema de ecuaciones lineales Eq. 1.32 segun las condicionesde contorno dadas en el ejemplo (Fig. 1.2).

1.4 Visualizacion

MatlabTM integra no solo herramientas de calculo y analisis, sino tambien de visu-alizacion. Algunas de las funciones mas empleadas para visualizar resultados sonplot(), plotyy(), subplot(), surf() y otras. El usuario curioso puede aprender el uso deestas funciones consultando la referencia de las mismas en la Ayuda de MatlabTM.

Example 1.3. Algunos ejemplos del uso de estas funciones pueden encontrarse enlas Figuras 1.3 y 1.4.

Listing 1.3 Ejemplos de funciones de visualizacion.% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PROGRAMA: e j e m p l o 3 %% % DESCRIPCION : Ejemplos de f u n c i o n e s de %% % v i s u a l i z a c i o n %

10 1 Algunas instrucciones basicas en MatlabTM

% % USO: [ ] = e j e m p l o 3 ( ) %% % ENTRADAS: Ninguna %% % SALIDAS : Ninguna %% % FECHA: 3 0 / 0 3 / 2 0 1 2 %% % s e e a l s o LineSpec , meshgrid , s u r f , mesh , p c o l o r %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

f u n c t i o n [ ] = e jemplo3 ( )

c l o s e a l lc l e a r a l lc l c

% ( 1 ) p l o t . Dos f u n c i o n e s en una misma f i g u r ax = [ 0 : 0 . 0 1 : 2∗ pi ] ;f = s i n ( x ) ;g = cos ( x ) .∗ s i n ( x . ˆ 2 ) ;

f i g u r ep l o t ( x , f , ’ b ’ )hold onp l o t ( x , g , ’ r ’ )x l a b e l ( ’ x ’ )hold o f f

x l a b e l ( ’ x ’ )y l a b e l ( ’ f ( x ) y g ( x ) ’ )t i t l e ( ’ Ejemplo con p l o t ’ )l egend ( ’ f ( x )= s i n ( x ) ’ , ’ g ( x )= cos ( x ) s i n ( x ˆ 2 ) ’ )

% ( 2 ) mismo p l o t con o p c i o n e s avanzadasf i g u r ep l o t ( x , f , ’ L i n e S t y l e ’ , ’−− ’ , ’ LineWidth ’ , 2 , ’ Co lo r ’ , [0 0 0 ] ) ;hold onp l o t ( x , g , ’ L i n e S t y l e ’ , ’− ’ , ’ LineWidth ’ , 2 , ’ Co lo r ’ , [0 0 0 ] ) ;x l a b e l ( ’ x ’ )hold o f f

s e t ( gca , ’ F o n t S i z e ’ , 24 , ’ FontName ’ , ’ A r i a l ’ ) ;x l a b e l ( ’ x ’ , ’ F o n t S i z e ’ , 3 0 ) ;y l a b e l ( ’ f ( x ) y g ( x ) ’ , ’ F o n t S i z e ’ , 3 0 ) ;t i t l e ( ’ Ejemplo con p l o t ’ , ’ F o n t S i z e ’ , 2 4 ) ;l egend ( ’ f ( x )= s i n ( x ) ’ , ’ g ( x )= cos ( x ) s i n ( x ˆ 2 ) ’ , ’ F o n t S i z e ’ , 2 0 ) ;

% ( 3 ) s u b p l o t . Dos f u n c i o n e s en dos p a n e l e s de misma f i g u r af i g u r et i t l e ( ’ Ejemplo con s u b p l o t ’ )s u b p l o t ( 1 2 1 )p l o t ( x , f , ’ b ’ )x l a b e l ( ’ x ’ )y l a b e l ( ’ f ( x ) ’ )l egend ( ’ f ( x )= s i n ( x ) ’ )

s u b p l o t ( 1 2 2 )p l o t ( x , g , ’ r ’ )x l a b e l ( ’ x ’ )y l a b e l ( ’ g ( x )= cos ( x ) s i n ( x ˆ 2 ) ’ )l egend ( ’ g ( x )= cos ( x ) s i n ( x ˆ 2 ) ’ )

% ( 4 ) p l o t y y . Dos c u r v a s con e s c a l a s d i s t i n t a s en l a misma f i g u r af i g u r et i t l e ( ’ Ejemplo con p l o t y y ’ )x = 0 : 0 . 0 5 : 2∗ pi ;f = s i n ( x ) ;g = 10 .∗ exp(−x ) .∗ s i n ( x ∗1 0 ) ;p l o t y y ( x , f , x , g )

1.4 Visualizacion 11

gr idx l a b e l ( ’ x ’ )l egend ( ’ f ( x )= s i n ( x ) ’ , ’ g ( x )=10 s i n (10 x ) eˆ{−x} ’ )

% ( 5 ) p l o t 3 , p l o t en 3D ( p a r a m e t r i c a s ) .f i g u r et = 0 : pi / 3 0 : 2 0∗ pi ;p l o t 3 (10∗ s i n ( t ) . / t . ˆ 0 . 1 , cos ( t ) . / t . ˆ 0 . 1 , t , ’m. ’ )t i t l e ( ’ Ejemplo con p l o t 3 ’ )gr id ona x i s s q u a r ex l a b e l ( ’ s i n ( t ) ’ )y l a b e l ( ’ cos ( t ) ’ )z l a b e l ( ’ t ’ )

% ( 6 ) S u r ff i g u r e[ x , y ] = meshgrid ( − 4 : 0 . 1 : 4 , − 4 : 0 . 1 : 4 ) ; % crea una mal laf = b e s s e l j ( 0 , ( x . ˆ 2 + y . ˆ 2 ) ) ;

s u b p l o t ( 3 2 1 )s u r f ( x , y , f )x l a b e l ( ’ x ’ )y l a b e l ( ’ y ’ )z l a b e l ( ’ f ( x , y )= J 0 ( x ˆ2+ y ˆ 2 ) ’ )

s u b p l o t ( 3 2 2 )s u r f ( x , y , f ) ; shading i n t e r px l a b e l ( ’ x ’ )y l a b e l ( ’ y ’ )z l a b e l ( ’ f ( x , y )= J 0 ( x ˆ2+ y ˆ 2 ) ’ )

s u b p l o t ( 3 2 3 )s u r f c ( x , y , f )x l a b e l ( ’ x ’ )y l a b e l ( ’ y ’ )z l a b e l ( ’ f ( x , y )= J 0 ( x ˆ2+ y ˆ 2 ) ’ )

s u b p l o t ( 3 2 4 )mesh ( f ) % p i n t a l o s ı n d i c e sx l a b e l ( ’ x ’ )y l a b e l ( ’ y ’ )z l a b e l ( ’ f ( x , y )= J 0 ( x ˆ2+ y ˆ 2 ) ’ )

s u b p l o t ( 3 , 2 , [ 5 6 ] )pc o l or ( x , y , f ) ; shading i n t e r p ;x l a b e l ( ’ x ’ )y l a b e l ( ’ y ’ )z l a b e l ( ’ f ( x , y )= J 0 ( x ˆ2+ y ˆ 2 ) ’ )c o l o r b a r

Example 1.4. Otros ejemplos de visualizacion de MatlabTM puede extraerse de fun-ciones sencillas y conocidas en el ambito de la Ingenierıa Marıtima (vease Fig. 1.5).Estos son:

1. Asignando valores apropiados a ση y µη , puede representarse la funcion de den-

sidad de probabilidad (pdf) Gaussiana, que es p(η) = 1ση

√2π

e− (η−µeta)2

2σ2η .

2. Un caso tıpico y recurrente en Teorıa Lineal es el uso de la relacion de dis-persion (ω2 = gk tanh(kh)) para determinar la longitud de onda dada una fre-cuencia: Dados ω y h, puede determinarse k de forma sencilla graficamente o,

12 1 Algunas instrucciones basicas en MatlabTM

Fig. 1.3 Ejemplo de representacion con la funcion plot. Tal y como se indica, se estan represen-tando las funciones f (x) = sin(x) y g(x) = cos(x)sin(x2).

Fig. 1.4 Ejemplo de representacion con la funcion surfc. En este caso se representa la funcion deBessel de primera especie de orden cero J0 con argumento x2 + y2.

mediante el uso de la funcion fzeros de MatlabTM, numericamente. El lector cu-rioso puede completar la grafica de la Fig. 1.5 dibujando las asıntotas para khgrande y pequeno.

3. Dada una altura de ola significante HS, puede representarse la funcion den-

sidad de probabilidad de Rayleigh, fR(H) = 4.01 HH2

Se−2.005 H2

H2S , y la funcion

de distribucion (cdf, o probabilidad de no excedencia) de Rayleigh, FR(H) =

1− e−2.005 H2

H2S .

4. Del mismo modo que en el apartado anterior, dado el periodo medio Tz, puederepresentarse la funcion densidad de probabilidad y de distribucion de periodos

de Bretschneider: fB(T ) = 2.7 T 3

T 4z

e−0.675(

TTz

)4

y FB(T ) = 1− e−0.675(

TTz

)4

.5. A partir de los dos items anteriores, la funcion de distribucion conjunta si T y H

estan descorrelacionadas sera f (H,T ) = fR(H) · fB(T ).

1.4 Visualizacion 13

6. Un ejemplo de funcion densidad para H-T correlacionadas, dada en funcion delas variables adimensionales Ha = H/

√m0 y Ta = T/T z, siendo T el periodo

medio (espectral) relacionado con la frecuencia media, es fHa,Ta =CL

(HaTa

)2exp{−H2

a8

[1+ 1

ν2

(1− 1

Ta

)2]}

,

donde CL = 14ν√

2π[1+(1+ν2)−1/2]. Considerese anchuras espectrales ν = 0.2 y

ν = 0.6. El lector puede comprobar que, para anchuras espectrales pequenas, ladistribucion es mas simetrica alrededor de Ta = 1 (alrededor del periodo medio).

7. La elevacion en un estuario convergente de longitud L, anchuras b(x) = bLx/L(x = L en desembocadura) y sin friccion es η(x, t) = a J0(βx)

J0(βL) cos(ωt), donde β =

ω/√

gh y J0 es la funcion de Bessel de primera especie de orden 0.8. Propagacion de onda de marea por un estuario de seccion uniforme con friccion

(debil). Puede demostrarse que η(x, t) = H2 e−

Ak02ω

x cos(ωt− k0x) y u(x, t) =

H2

c0h e−

Ak02ω

x cos(ωt− k0x).

9. Circulacion estuarina: uρ(ζ ) = − gh3

48ρAz

(∂ρ

∂x

)(−8ζ 3 +15ζ 2−6ζ

), donde ζ =

z/h.10. Sobrelevacion asociada a viento τw = ρaCDw|w| en una plataforma continental

de profundidad constante h0 y longitud L: η(x)h0

=√

1+2γxL −1. Considere γ =

nτxwL

(ρgh20/2)

, ρaCD ∼ 10−3.

Listing 1.4 Uso de las funciones de visualizacion de MatlabTM para representar curvas y figuras.% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PROGRAMA: e j e m p l o 4 %% % DESCRIPCION : V i s u a l i z a f u n c i o n e s c o n o c i d a s %% % USO: [ ] = e j e m p l o 4 ( ) %% % ENTRADAS: V a r i a s m e d i a n t e ’ i n p u t ’ %% % SALIDAS : Ninguna %% % FECHA: 3 0 / 0 3 / 2 0 1 2 %% % s e e a l s o normpdf , x l im , ecd f , f z e r o , abs %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

f u n c t i o n [ ] = e jemplo4c l o s e a l lc l e a r a l lc l c

f i g u r e

% ( 1 ) Funci on de d e n s i d a d de p r o b a b i l i d a d Gauss ianadi sp ( ’∗∗∗ FUNCION DENSIDAD GAUSSIANA ∗∗∗ ’ )mu = input ( ’ I n t r o d u z c a e l v a l o r medio \mu en m: ’ ) ;s igma = input ( ’ I n t r o d u z c a l a d e s v i a c i o n t ı p i c a \s igma en m: ’ ) ;d e t a = input ( ’ I n t r o d u z c a e l e s p a c i a d o \D e l t a\ e t a en m: ’ ) ;e t a = [mu−5∗s igma : d e t a : mu+5∗ s igma ] ; % mp e t a = 1 / ( s igma∗ s q r t (2∗ pi ) )∗ exp (−( e t a−mu ) . ˆ 2 / ( 2 ∗ s igma ˆ 2 ) ) ;

s u b p l o t ( 4 3 1 )p l o t ( e t a , pe t a , ’ k ’ )x l im ( [ mu−5∗s igma mu+5∗ s igma ] )x l a b e l ( ’\ e t a (m) ’ )y l a b e l ( ’ p (\ e t a ) ’ )t i t l e ( ’ pdf G a u s s i a n a ’ )

% sum ( p e t a )∗ d e t a =1

14 1 Algunas instrucciones basicas en MatlabTM

hold onp l o t ( e t a , normpdf ( e t a , mu , s igma ) , ’ ro ’ )f p r i n t f ( ’ Func i on d e n s i d a d g a u s s i a n a d i b u j a d a . . . \ n\n ’ )

% ( 2 ) R e l a c i o n de d i s p e r s i o ndi sp ( ’∗∗∗ RELACION DE DISPERSION ∗∗∗ ’ )T = input ( ’ I n t r o d u z c a e l p e r i o d o de l a onda T en s : ’ ) ;w = 2∗pi / T ; % 1 / sh = input ( ’ I n t r o d u z c a l a p r o f u n d i d a d en m: ’ ) ;g = 9 . 8 2 ; % m/ s ˆ2% R e l a c i o n de d i s p e r s i o n : wˆ2 = gk tanh ( kh ) , o hw ˆ 2 / ( gkh )= tanh ( kh ) .x = [ 0 : 0 . 0 0 1 : 1 0 ] ; % x l o d e f i n o como khf1 = h∗w ˆ 2 . / ( g∗x ) ;f2 = tanh ( x ) ;

s u b p l o t ( 4 3 2 )p l o t ( x , f1 , x , f2 )x l im ( [ 0 4 ] )y l im ( [ 0 2 ] )x l a b e l ( ’ x ’ )l egend ( ’ h\omega ˆ 2 / ( gkh ) ’ , ’ t a n h ( kh ) ’ )t i t l e ( ’ D e t e r m i n a c i o n g r a f i c a de k ’ )kh = f z e r o (@( x ) h∗wˆ 2 / g−x∗tanh ( x ) , h∗wˆ 2 / g ) ;k = kh / h ;f p r i n t f ( ’ El v a l o r de k es %f 1 /m\n ’ , k )lambda = 2∗pi / k ;f p r i n t f ( ’Y l a l o n g i t u d de onda c o r r e s p o n d i e n t e es %f m\n ’ , lambda )

% El v a l o r e x a c t o puede d e t e r m i n a r s e en s i m b o l i c of p r i n t f ( ’ L o n g i t u d de onda d e t e r m i n a d a . . . \ n\n ’ )

% ( 3 ) Funci on de d e n s i d a d y de d i s t r i b u c i o n de R a y l e i g hdi sp ( ’∗∗∗ FUNCIONES DE DENSIDAD Y DISTRIBUCION DE ALTURAS DE RAYLEIGH ∗∗∗ ’ )HS = input ( ’ I n t r o d u z c a l a a l t u r a de o l a s i g n i f i c a n t e en m: ’ ) ;H = [ 0 : 0 . 0 5 : 5 ] ; % mHS = 1 . 5 ; % mfR = 4.01∗H / ( HS ˆ 2 ) .∗ exp (−2.005∗ (H/ HS ) . ˆ 2 ) ;FR = 1−exp (−2.005∗ (H/ HS ) . ˆ 2 ) ;

s u b p l o t ( 4 3 3 )p l o t (H, fR )x l a b e l ( ’H (m) ’ )y l a b e l ( ’ f R (H) ’ )t i t l e ( ’ pdf de R a y l e i g h ’ )s u b p l o t ( 4 3 4 )p l o t (H, FR )x l a b e l ( ’H (m) ’ )y l a b e l ( ’ F R (H) ’ )t i t l e ( ’ c d f de R a y l e i g h ’ )f p r i n t f ( ’ F u n c i o n e s de R a y l e i g h r e p r e s e n t a d a s . . . \ n\n ’ )

% ( 4 ) Funci on de d e n s i d a d y d i s t r i b u c i o n de p e r i o d o s de B r e t s c h n e i d e rdi sp ( ’∗∗∗ FUNCIONES DE DENSIDAD Y DISTRIBUCION DE PERIODOS DE BRETSCHNEIDER ∗∗∗ ’ )Tz = input ( ’ I n t r o d u z c a e l p e r i o d o medio ( s ) : ’ ) ;T = [ 0 : 0 . 0 5 : 2 0 ] ; % sfB = 2.7∗T . ˆ 3 / ( Tz ˆ 4 ) .∗ exp (−0.675∗ (T / Tz ) . ˆ 4 ) ;FB = 1−exp (−0.675∗ (T / Tz ) . ˆ 4 ) ;

s u b p l o t ( 4 3 5 )p l o t ( T , fB )x l a b e l ( ’T ( s ) ’ )y l a b e l ( ’ f B ( T ) ’ )t i t l e ( ’ pdf de B r e t s c h n e i d e r ’ )s u b p l o t ( 4 3 6 )p l o t ( T , FB )

1.4 Visualizacion 15

x l a b e l ( ’T ( s ) ’ )y l a b e l ( ’ F B ( T ) ’ )t i t l e ( ’ c d f de B r e t s c h n e i d e r ’ )f p r i n t f ( ’ F u n c i o n e s de B r e t s c h n e i d e r r e p r e s e n t a d a s . . . \ n\n ’ )

% ( 5 ) Funci on de d e n s i d a d c o n j u n t a de H y T d e s c o r r e l a c i o n a d a sdi sp ( ’∗∗∗ FUNCIONES DE DENSIDAD Y DISTRIBUCION CONJUNTAS ∗∗∗ ’ )f p r i n t f ( ’ Usando l o s d a t o s a n t e r i o r e s . . . \ n\n ’ )fC = z e r o s ( l e n g t h ( fB ) , l e n g t h ( fR ) ) ;f o r n =1: l e n g t h ( fR )

fC ( : , n ) = fR ( n )∗ fB ;end

s u b p l o t ( 4 3 7 )% s u r f c (H, T , fC ) ; s h a d i n g i n t e r pcontour (H, T , fC )% s u r f (H, T , fC ) ; s h a d i n g i n t e r p% p c o l o r (H, T , fC ) ; s h a d i n g i n t e r px l a b e l ( ’H (m) ’ )y l a b e l ( ’T ( s ) ’ )c o l o r b a rt i t l e ( ’ pdf c o n j u n t a d e s c o r r . ’ )f p r i n t f ( ’ Func i on de d i s t r i b u c i o n c o n j u n t a H−T d e s c o r r e l a c i o n a d a r e p r e s e n t a d a . . . \ n\n ’ )

% ( 6 ) Funci on de d e n s i d a d c o n j u n t a H y T e s p e c t r a ldi sp ( ’∗∗∗ FUNCIONES DE DENSIDAD Y DISTRIBUCION DE H−T CONJUNTAS ∗∗∗ ’ )m0 = input ( ’ I n t r o d u z c a l a a l t u r a de o l a s i g n i f i c a n t e e s p e c t r a l (m) : ’ ) ;nu = input ( ’ I n t r o d u z c a l a a n c h u r a e s p e c t r a l 0<nu<1: ’ ) ;Tz = input ( ’ I n t r o d u z c a e l p e r i o d o medio ( s ) : ’ ) ;T = [ 0 : 0 . 0 5 : 2 0 ] ; % sH = [ 0 : 0 . 0 5 : 1 2 ] ; % mHa = H/ s q r t (m0 ) ; % adimTa = T / Tz ; % adimCL = 1 / ( 4∗ nu∗ s q r t (2∗ pi )∗ (1+(1+ nu ˆ 2 ) ˆ ( − 0 . 5 ) ) ) ;fHT = z e r o s ( l e n g t h ( Ta ) , l e n g t h ( Ha ) ) ;f o r t =1 : l e n g t h ( Ta )

f o r h =1: l e n g t h ( Ha )fHT ( t , h ) = CL∗ ( ( Ha ( h ) / Ta ( t ) ) ˆ 2 )∗ exp (−(Ha ( h ) ˆ 2 ) / 8∗ ( 1 + nu ˆ(−2)∗(1−Ta ( t ) ˆ ( − 1 ) ) ˆ 2 ) ) ;

endend

s u b p l o t ( 4 3 8 )%p c o l o r (H, T , fHT ) ; s h a d i n g i n t e r p% s u r f (H, T , fHT ) ; s h a d i n g i n t e r pcontour (H, T , fHT )x l a b e l ( ’H (m) ’ )y l a b e l ( ’T ( s ) ’ )c o l o r b a rt i t l e ( ’ c d f c o n j u n t a c o r r . ’ )f p r i n t f ( ’ Func i on de d i s t r i b u c i o n c o n j u n t a H−T r e p r e s e n t a d a . . . \ n\n ’ )

% ( 7 ) E l e v a c i o n en un e s t u a r i o c o n v e r g e n t e s i n f r i c c i o ndi sp ( ’∗∗∗ ELEVACION EN UN ESTUARIO CONVERGENTE SIN FRICCION ∗∗∗ ’ )L = input ( ’ I n t r o d u z c a l a l o n g i t u d d e l e s t u a r i o (m) : ’ ) ; % p . e j . L = 100000x = [ 0 : L / 1 0 0 0 : L ] ; % mTom = input ( ’ I n t r o d u z c a e l p e r i o d o de l a onda de marea ( s ) : ’ ) ; % p . e j . T = 12.45∗3600w = 2∗pi / Tom ; % 1 / sh = input ( ’ I n t r o d u z c a l a p r o f u n d i d a d media (m) : ’ ) ; % p . e j . h = 10a = input ( ’ I n t r o d u z c a l a a m p l i t u d en l a desembocadura (m) : ’ ) ; % p . e j . a = 1 . 1t 0 = input ( ’ I n t r o d u z c a e l i n s t a n t e de s a l i d a ( s ) : ’ ) ; % p . e j . t 0 = 1∗3600g = 9 . 8 2 ; % m/ s2beta = w/ s q r t ( g∗h ) ;e t a = b e s s e l j ( 0 , beta∗x ) / b e s s e l j ( 0 , beta∗L)∗ cos (w∗ t 0 ) ;

16 1 Algunas instrucciones basicas en MatlabTM

s u b p l o t ( 4 3 9 )p l o t ( x / 1 0 0 0 , e t a )x l a b e l ( ’ x (km) ’ )y l a b e l ( ’\ e t a (m) ’ )t i t l e ( ’ E s t . conv . s i n f r i c c . ’ )f p r i n t f ( ’ E l e v a c i o n en e s t u a r i o c o n v e r g e n t e s i n f r i c c i o n r e p r e s e n t a d a . . . \ n\n ’ )

% ( 8 ) Propagac i on de onda de marea en un e s t u a r i o de s e c c i o n u n i f o r m e con% f r i c c i o n d e b i ldi sp ( ’∗∗∗ PROPAGACION EN UN ESTUARIO DE SECCION UNIFORME CON FRICCION DEBIL ∗∗∗ ’ )L = input ( ’ I n t r o d u z c a l a l o n g i t u d d e l e s t u a r i o (m) : ’ ) ; % p . e j . L = 100000x = [ 0 : L / 1 0 0 0 : L ] ;A = input ( ’ I n t r o d u z c a e l v a l o r d e l c o e f i c i e n t e de f r i c c i o n ( ) : ’ ) ; % p . e j . A = 0 .0001Tom = input ( ’ I n t r o d u z c a e l p e r i o d o de l a onda de marea ( s ) : ’ ) ; % p . e j . T = 12.45∗3600w = 2∗pi / Tom ; % 1 / sa = input ( ’ I n t r o d u z c a l a a m p l i t u d en l a desembocadura (m) : ’ ) ; % p . e j . a = 1 . 1t 0 = input ( ’ I n t r o d u z c a e l i n s t a n t e de s a l i d a ( s ) : ’ ) ; % p . e j . t 0 = 1∗3600h = input ( ’ I n t r o d u z c a l a p r o f u n d i d a d media (m) : ’ ) ; % p . e j . h = 10kh = f z e r o (@( x ) h∗wˆ 2 / g−x∗tanh ( x ) , h∗wˆ 2 / g ) ;k0 = kh / h ;g = 9 . 8 2 ; % m/ s2e t a = a∗exp (−0.5∗A∗k0∗x /w) .∗ cos (w∗ t0−k0∗x ) ;u = e t a∗ s q r t ( g∗h ) / h ;

s u b p l o t ( 4 , 3 , 1 0 )p l o t ( x / 1 0 0 0 , e t a , x / 1 0 0 0 , u )x l a b e l ( ’ x (km) ’ )y l a b e l ( ’\ e t a (m) y u (m/ s ) ’ )t i t l e ( ’ E lev . y c o r r . con f r i c c . ’ )f p r i n t f ( ’ E l e v a c i o n y c o r r i e n t e s en e s t u a r i o con f r i c c i o n r e p r e s e n t a d a s . . . \ n\n ’ )

% ( 9 ) C i r c u l a c i o n e s t u a r i n adi sp ( ’∗∗∗ CIRCULACION ESTUARINA ∗∗∗ ’ )h = input ( ’ I n t r o d u z c a l a p r o f u n d i d a d media (m) : ’ ) ;z = 0 : h / 2 0 : h ; % mrho = input ( ’ S a l i n i d a d en desembocadura ( psu ) : ’ ) ;% rho = 35; % E s t i m a c i o n e s en psuDrho = rho ; % Cons idero p r o p t o be ta , c o n t r a c c i o n s a l i n aDx = input ( ’ I n t r o d u z c a l a l o n g i t u d d e l e s t u a r i o (m) : ’ ) ;Az = input ( ’ I n t r o d u z c a e l c o e f i c i e n t e de v i s c o s i d a d t u r b u l e n t a (m2 / s ) : ’ ) ; % p . e j . Az = 0 . 0 1 ;g = 9 . 8 2 ; % m/ s2ur = −(g∗( Drho / Dx)∗h ˆ 3 ) / ( 4 8∗ rho∗Az)∗(−8∗( z / h ) . ˆ 3 + 1 5∗ ( z / h ) . ˆ2 −6∗ ( z / h ) ) ;

s u b p l o t ( 4 , 3 , 1 1 )p l o t ( ur , z , ’ k ’ ) ; hold onquiver ( z e r o s ( 1 , l e n g t h ( z ) ) , z , ur , z e r o s ( 1 , l e n g t h ( u r ) ) , 0 . 0 5 )x l a b e l ( ’ z (m) ’ )y l a b e l ( ’ u {\ rho }(m/ s ) ’ )y l im ( [ 0 h ] )t i t l e ( ’ C i r c . e s t u a r i n a ’ )f p r i n t f ( ’ C i r c u l a c i o n i n d u c i d a por e l g r a d i e n t e de d e n s i d a d c a l c u l a d a . . . \ n\n ’ )

% ( 1 0 ) S o b r e l e v a c i o n v i e n t odi sp ( ’∗∗∗ SOBRELEVACION POR VIENTO ∗∗∗ ’ )F = input ( ’ I n t r o d u z c a e l F e t c h (m) : ’ ) ; % p . e j . F = 10000r hoa = input ( ’ I n t r o d u z c a l a d e n s i d a d d e l a i r e ( kg / m3 ) : ’ ) ; % p . e j . rhoa = 1 . 2rho = input ( ’ I n t r o d u z c a l a d e n s i d a d d e l agua ( kg / m3 ) : ’ ) ; % p . e j . rhoa = 1000CD = input ( ’ I n t r o d u z c a e l c o e f i c i e n t e de a r r a s t r e en s u p e r f i c i e ( adim ) : ’ ) ; % p . e j . CD = 2 . 5 e−3n = input ( ’ I n t r o d u z c a e l f a c t o r de f r i c c i o n en fondo ( adim ) : ’ ) ; % p . e j . CD = 2 . 5 e−3wind = input ( ’ I n t r o d u z c a l a v e l o c i d a d d e l v i e n t o (m/ s ) : ’ ) ; % p . e j . wind = 15h = input ( ’ I n t r o d u z c a l a p r o f u n d i d a d a l bo rde de l a p l a t a f o r m a (m) : ’ ) ; % p . e j . h0 = 150x = 0 : F / 1 0 0 0 : F ; % mg = 9 . 8 2 ; % m/ s

1.5 Lectura y escritura con y sin formato 17

h0 = 150 ; % mtauw = rhoa∗CD∗wind∗abs ( wind ) ;gamma = n∗ tauw∗F / ( 0 . 5∗ rho∗g∗h ˆ 2 ) ;e t a = h0∗( s q r t (1+2∗gamma∗x / F )−1) ;

s u b p l o t ( 4 , 3 , 1 2 )p l o t ( x / 1 0 0 0 , e t a , ’ k ’ )x l a b e l ( ’ x (km) ’ )y l a b e l ( ’\ e t a (m) ’ )t i t l e ( ’ S o b r e l e v . v i e n t o ’ )f p r i n t f ( ’ S o b r e e l e v a c i o n por v i e n t o c a l c u l a d a . . . \ n\n ’ )

Fig. 1.5 Representacion de diferentes funciones conocidas.

1.5 Lectura y escritura con y sin formato

El formato de salida (por pantalla) por defecto puede cambiarse con la instruccionformat. Por defecto, MatlabTM usa el formato corto (format short). Otros formatos

18 1 Algunas instrucciones basicas en MatlabTM

son format long G, format long E, format short E, etc. fscanf y fprintf, input, load,save.

1.6 Entrada y salida de datos

Las instrucciones save, load, dlmwrite y dlmload, entre otras, se emplean para la sal-ida y entrada de datos. Aquı damos una breve descripcion. En la Ayuda de MatlabTM

pueden encontrarse mas detalles, ası como las diferentes opciones.

save: Guarda las variables especificadas de las actualmente definidas en el espa-cio de trabajo workspace. Con la instruccion whos se identifican las actuales. Lasintaxis es la siguiente: save ’nombre-archivo.mat’ a1 a2 ... aN. El archivo .mates un archivo binario donde se almacenan las variables a1,... , aN. El nombre dearchivo incluye la ruta de directorios. Con save tambien es posible guardar datosnumericos en formato ascii: save ’mis-datos.dat’ a1 -ascii, siendo, por ejemplo,a1 una matriz de datos.

load: Para recuperar las variables con save guardadas se hace uso de la in-struccion load. La sintaxis es similar a la anterior: load ’nombre-archivo.mat’.De este modo carga de nuevo todas las variables codificadas en el archivonombre-archivo.mat. La instruccion load tambien puede emplearse en la lec-tura de archivos de datos numericos. La lectura es limpia, siempre y cuando elarchivo, e.g. ’mis-datos.dat’ no tenga cabecera y todas las filas tengan el mismonumero de elementos (columnas bien definidas). La sintaxis en este caso cambiaun poco: matriz-de-datos = load(’mis-datos.dat’) o load ’mis-datos.dat’ -ascii.En la variable matriz-de-datos se almacenan los datos.

dlmwrite: Escribe en un archivo con el formato especificado. La sintaxis esla siguiente: dlmwrite(′c : \Matlab\e jemplo.dat ′,Matriz,′ precision′,′%.6 f ′, ...′newline′,′ pc′,′ delimiter′,′ \t ′). La variable que se almacena es Matriz, con unaprecision de 6 dıgitos decimales. La separacion entre lıneas se define medianteun retorno de carro (pc) y los datos entre datos se separan con tabuladores.

dlmread: Similar a dlmwrite() pero para la lectura de datos.

Listing 1.5 Ejemplos de funciones de entrada y salida de datos.

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PROGRAMA: e j e m p l o 5 %% % DESCRIPCION : C a l c u l a e l f a c t o r i a l de un numero %% % empleando e s t r u c t u r a s i t e r a t i v a s ; c a l c u l a l a suma %% % de numeros p a r e s e impares an idando un c i c l o f o r .%% % con una e s t r u c t u r a de d e c i s i o n . %% % USO: [F P N] = e j e m p l o 5 (M) %% % ENTRADAS: E n te ro p o s i t i v o M %% % SALIDAS : M a t r i z de d a t o s %% % − F : F a c t o r i a l de M %% % − P : Suma de p a r e s %% % − I : Suma de impares %% % FECHA: 3 0 / 0 3 / 2 0 1 2 %% % s e e a l s o f o r , i f , wh i l e , s w i t c h , f a c t o r i a l %

1.7 Estructuras de datos 19

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%f u n c t i o n [ F P I ] = e jemplo5 (M)

% ( 1 ) F a c t o r i a l m u l t i p l i c a n d o de 1 a M . . .F = 1 ;f o r k =1:M

F = F∗k ;endf p r i n t f ( ’ El f a c t o r i a l m u l t i p l i c a n d o de 1 a %d r e s u l t a : %f \n ’ , M, F )

% . . . y desde M a 1 . . .F = 1 ;f o r k=M:−1:1

F = F∗k ;endf p r i n t f ( ’ El f a c t o r i a l m u l t i p l i c a n d o de %d a 1 : %f \n ’ , M, F )

% . . . o con un c i c l o w h i l e ( aunque se sabe e l numero e x a c t o de i t e r a c i o n e s )F = 1 ;k = M;whi le k>1

F = F∗k ;k = k−1;

endf p r i n t f ( ’ El f a c t o r i a l d e t e r m i n a d o con un c i c l o w h i l e : %f \n ’ , F )

% . . . y con l a f u n c i o n de Matlab f a c t o r i a l ( )F = f a c t o r i a l (M) ;f p r i n t f ( ’ El f a c t o r i a l d e t e r m i n a d o con l a f u n c i o n de Mat lab f a c t o r i a l ( ) : %f \n ’ , F )

% ( 2 ) Programa que suma l o s impares y l o s p a r e s e n t r e 0 y M

P = 0 ;I = 0 ;

f o r k =0:Mi f ( mod ( k , 2 ) = = 0 )

I = I + 1 ;e l s e

P = P + 1 ;end

end

1.7 Estructuras de datos

El codigo de MatlabTM se ejecuta instruccion a instruccion de forma secuencial. Noobstante, existen estructuras de datos iterativas y de decision en las que la ejecucionno es secuencial. Estas estructuras pueden anidarse.

1.7.1 Iterativas

Las estructuras de control iterativas usuales son el ciclo for y el ciclo while. Elciclo for es una estructura iterativa controlada por un contador. Se emplea cuando

20 1 Algunas instrucciones basicas en MatlabTM

se pretende realizar un bloque de instrucciones un numero determinado de veces,que es, en principio, conocido.

El ciclo while, en cambio, es una estructura iterativa que repite un conjunto deinstrucciones un numero determinado de veces que depende de una condicion. Elbloque de instrucciones se ejecuta hasta que deja de cumplirse la condicion. Debeemplearse un ciclo while cuando a priori no se conoce el numero de iteraciones.

1.7.2 De decision

Las palabras clave que definen las estructuras de decision son if, else, elseif, case.Las estructuras condicionales o de decision sirven igualmente para controlar el flujodel programa. En este caso, en funcion de si se cumple o no una condicion, se ejecutaun bloque u otro de instrucciones.

Las condiciones se establecen mediante operadores relacionales (logicos), estosson, <, <=, >, >=, ==, &, |, ∼, ∼=.

Example 1.5. Mediante el uso de la estructura iterativa for (tambien con while) sepuede determinar el factorial de un numero M, definido como M! = M · (M− 1) ·(M−2) · · ·1. No obstante, MatlabTM incluye una funcion propia (factorial(M)) querealiza el calculo directamente.

Example 1.6. Otro ejemplo sencillo que proponemos para que el lector se vaya fa-miliarizando con el uso de estas estructuras de datos es determinar el numero denumeros pares e impares en un determinado intervalo dado.

Listing 1.6 Ejemplo sencillo del uso de estructuras de datos iterativas (for y while) y condicionalesif-else.

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PROGRAMA: e j e m p l o 5 %% % DESCRIPCION : C a l c u l a e l f a c t o r i a l de un numero %% % empleando e s t r u c t u r a s i t e r a t i v a s ; c a l c u l a l a suma %% % de numeros p a r e s e impares an idando un c i c l o f o r .%% % con una e s t r u c t u r a de d e c i s i o n . %% % USO: [F P N] = e j e m p l o 5 (M) %% % ENTRADAS: E n te ro p o s i t i v o M %% % SALIDAS : M a t r i z de d a t o s %% % − F : F a c t o r i a l de M %% % − P : Suma de p a r e s %% % − I : Suma de impares %% % FECHA: 3 0 / 0 3 / 2 0 1 2 %% % s e e a l s o f o r , i f , wh i l e , s w i t c h , f a c t o r i a l %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%f u n c t i o n [ F P I ] = e jemplo5 (M)

% ( 1 ) F a c t o r i a l m u l t i p l i c a n d o de 1 a M . . .F = 1 ;f o r k =1:M

F = F∗k ;endf p r i n t f ( ’ El f a c t o r i a l m u l t i p l i c a n d o de 1 a %d r e s u l t a : %f \n ’ , M, F )

1.9 Algunos consejos. . . 21

% . . . y desde M a 1 . . .F = 1 ;f o r k=M:−1:1

F = F∗k ;endf p r i n t f ( ’ El f a c t o r i a l m u l t i p l i c a n d o de %d a 1 : %f \n ’ , M, F )

% . . . o con un c i c l o w h i l e ( aunque se sabe e l numero e x a c t o de i t e r a c i o n e s )F = 1 ;k = M;whi le k>1

F = F∗k ;k = k−1;

endf p r i n t f ( ’ El f a c t o r i a l d e t e r m i n a d o con un c i c l o w h i l e : %f \n ’ , F )

% . . . y con l a f u n c i o n de Matlab f a c t o r i a l ( )F = f a c t o r i a l (M) ;f p r i n t f ( ’ El f a c t o r i a l d e t e r m i n a d o con l a f u n c i o n de Mat lab f a c t o r i a l ( ) : %f \n ’ , F )

% ( 2 ) Programa que suma l o s impares y l o s p a r e s e n t r e 0 y M

P = 0 ;I = 0 ;

f o r k =0:Mi f ( mod ( k , 2 ) = = 0 )

I = I + 1 ;e l s e

P = P + 1 ;end

end

1.8 Otras funciones utiles de MatlabTM

factorial, dateaxis, isnan(), datenum, datestr, find, mascaras, inv, dot, xlim, pause...El depurador es una buena herramienta para corregir errores y, valga la redundancia,depurar el codigo.

1.9 Algunos consejos. . .

• Depurar el codigo es una tarea ardua. Cuando nuestro programa falla, MatlabTM

produce informacion jugosa del posible origen del error y de su posible causa porel Command Window. Es importante leer esta informacion e interpretarla, puestoque suele dar una idea de cual ha sido nuestro error.

Chapter 2Mas informacion en la web...

• Tutoriales y recursos Matlabhttp://es.mathworks.com/academia/student_center/tutorials/launchpad.html

• Recursos en Matlab Centralhttp://es.mathworks.com/matlabcentral/

• Material audiovisual del PID-12-203http://gdfa.ugr.es/sca/?page_id=78

• Universidad de Granadahttp://www.ugr.es/

• Escuela de Posgradohttp://escuelaposgrado.ugr.es/

23