You are on page 1of 34

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB

131
Capitulo 6
Programacin en MATLAB
0n piogiama ue oiuenauoi es una secuencia ue comanuos, tambin uenominauos
instiucciones. En un piogiama sencillo los comanuos se ejecutan uno uetis ue
otio en el oiuen en que son tecleauos. Basta ahoia, touos los piogiamas que se han
piesentauo en este libio, tanto en ficheios sciipt como en ficheios ue funcion, son
poi lo geneial piogiamas muy sencillos. Sin embaigo, en muchas otias situaciones
es necesaiio esciibii piogiamas ms complejos cuyas instiucciones no tienen que
ejecutaise en el mismo oiuen en el que se esciibieion, o que se ejecuten uistintos
tipos ue instiucciones o giupos ue instiucciones en funcion uel valoi ue una seiie
ue vaiiables ue piogiama. Poi ejemplo, un piogiama que calcule el coste ue los
envios ue paquetes en una empiesa pueue utilizai uifeientes expiesiones
matemticas que calculan el coste uepenuienuo uel tamao y peso uel paquete, uel
conteniuo (los libios, poi ejemplo, son ms baiatos ue enviai) y uel tipo ue seivicio
(coiieo aieo, poi caiieteia, etc.). En otias situaciones pueue sei necesaiio iepetii
una secuencia ue comanuos vaiias veces uentio ue un piogiama. Poi ejemplo, en
piogiamas que iesuelven ecuaciones numiicamente los clculos se iepiten hasta
que el eiioi uel iesultauo sea menoi que un cieito valoi pieviamente estableciuo.
NATLAB piopoiciona uifeientes instiucciones que se pueuen utilizai paia
contiolai el flujo ue un piogiama. Las sentencias conuicionales (Seccion 6.2) y la
estiuctuia ue piogiamacion switch (Seccion 6.S) peimiten saltaise comanuos o
ejecutai giupos especificos ue comanuos en uifeientes situaciones. Poi otio lauo,
las sentencias ue iteiacion for y while (Seccion 6.4) peimiten iepetii
secuencias ue comanuos vaiias veces seguiuas.
Paiece obvio que cambiai el flujo ue un piogiama iequieie algn tipo ue pioceso
ue toma ue uecisiones uentio uel piogiama. El oiuenauoi uebe ueciuii si ejecuta el
siguiente comanuo o pasa poi alto uno o vaiios comanuos y continuai en otia
linea ue couigo uistinta. El piogiama toma estas uecisiones compaianuo los
valoies ue las vaiiables. Esto se lleva a cabo meuiante opeiauoies logicos y
ielacionales, que sein explicauos en la seccion 6.1.
Cabe uecii tambin que los ficheios ue funcion (explicauos en el Capitulo S) se
pueuen utilizai paia piogiamai. 0n ficheio ue funcion es un subpiogiama. Cuanuo
un piogiama llega a una linea con comanuos que llaman a una funcion, entonces
esta es invocaua, le piopoiciona una entiaua, y espeia a que la funcion teimine
ue ejecutaise paia uevolvei el iesultauo ue saliua. La funcion iealiza los clculos y
tiansfieie el o los iesultauos al piogiama que la llamo, el cual continua ejecutanuo
la siguiente instiuccion

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
132
6.1 Operadoresrelacionalesylgicos
0n opeiauoi ielacional compaia uos nmeios ueteiminanuo si el enunciauo ue la
compaiacion (poi ejemplo, S< 8) es veiuaueio o falso. Si es veiuaueio, el valoi
asignauo sei 1, mientias que si es falso, el iesultauo sei u. 0n opeiauoi logico
examina la veiaciuau o falseuau ue los enunciauos y uevuelve un iesultauo
veiuaueio (1) o falto (u) segn un opeiauoi concieto. Poi ejemplo, el opeiauoi
logico Y (ANB) uevuelve 1 si uos sentencias son veiuaueias. Los opeiauoies
logicos y ielacionales se pueuen utilizai en expiesiones matemticas y, como
veiemos en este Capitulo, en combinacion con otios comanuos paia llevai a cabo
uecisiones sobie el contiol ue flujo ue un piogiama NATLAB.
Operadoresrelacionales:
Los opeiauoies ielacionales en NATLAB son:
0peiauoi ielacional Besciipcion
<
>
<=
>=
= =
=
Nenoi que.
Nayoi que.
Nenoi o igual que.
Nayoi o igual que.
Igual a
Bistinto ue.

0bseive que el opeiauoi igual a se iepiesenta poi uos signos = (sin espacio ue
sepaiacion entie ellos), ya que el signo = sencillo es el opeiauoi ue asignacion visto
en capitulos anteiioies. Be la misma foima, los otios opeiauoies ielacionales que
estn compuestos ue uos simbolos (<=,>=, =) no ueben llevai un espacio ue
sepaiacion entie ellos (se analizan en conjunto los uos).
Los opeiauoies ielacionales se utilizan como opeiauoies aiitmticos uentio
ue expiesiones matemticas. El iesultauo ue estos opeiauoies se pueue
usai en otias opeiaciones matemticas, paia acceuei a los elementos ue un
aiiay y, junto con otios comanuos NATLAB (poi ejemplo, el comanuo if),
paia contiolai el flujo ue un piogiama.
Cuanuo se compaian uos nmeios, el iesultauo es 1 (valoi logico
veiuaueio) si la compaiacion, en funcion uel opeiauoi ielacional, es
veiuaueia, y u (valoi logico falso) si la compaiacion es falsa.
Si se compaian uos escalaies, el iesultauo sei tambin un escalai que
tomaia el valoi 1 o u. Si se compaian uos aiiays (solo si tienen el mismo
tamao), la compaiacion se llevaia a cabo elemento a elemento, y el
iesultauo sei tambin un aiiay uel mismo tamao que los anteiioies. Este
contenui ceios y unos como saliuas, iesultauo ue la compaiacion ue caua
uno ue los elementos, uos a uos, ue los uos aiiays ue entiaua.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
133
Si se compaia un escalai con un aiiay, el escalai se compaia con touos los
elementos uel aiiay, ue foima que el iesultauo sei un aiiay logico, con
unos y ceios, segn el iesultauo ue la compaiacion en caua posicion uel
aiiay.
Veamos algunos ejemplos
>> 5>8

ans =
0

>> a=5<10

a =
1




>> y=(6<10)+(7>8)+(5*3==60/4)





y =
2

>> b=[15 6 9 4 11 7 14];c=[8 20 9 2 19 7 10];

>> d=c>=b

d =
0 1 1 0 1 1 0

>> b==c
ans =
0 0 1 0 0 1 0
>> b~=c
ans =
1 1 0 1 1 0 1

>> f=b-c>0
f =
Compruebasi5esmayorque8.
Comolacomparacinesfalsa(5noes
mayorque 8).larespuestaes0(falsa).
Compruebasi5esmenorque10,yalmacenaelresultadodelacomparacinena.
Comolacomparacinesverdadera(5esmenorque10),el
valorasignadoalavariablea ser 1 (verdadera).
Utilizacindeoperadoresrelacionales
enexpresinmatemtica.
Esiguala1,yaque6
esmenorque10.
Esiguala0,yaque7
noesmayorque8.
Esiguala1,yaque
5*3esiguala60/4.
Sesumalosvaloresverdaderos(unos),por
tantoelvalorfinalquecontendr yser2.
Sedefinendosvectores,byc.
Secompruebasiloselementosdec sonmayoresoiguales
queloselementosdeb.Elresultadoseguardaend.
Seasignaun1encadaposicindondeunelemento
dec esmayoroigualqueunelementodeb.
Compruebasiloselementosdeb sonigualesaloselementosdec.
Compruebasiloselementosdeb sondiferentesdeloselementosde c.
Resta cabydespuscomprueba
quelementossonmayoresque0.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
134
1 0 0 1 0 0 1

>> A=[2 9 4;-3 5 2;6 7 -1]
A =
2 9 4
-3 5 2
6 7 -1
>> B=A<=2
B =
1 0 0
1 0 1
0 0 1

El iesultauo ue una opeiacion ielacional con vectoies sei un vectoi con
unos y ceios, tambin llamauo vectoi logico. Estos vectoies se pueuen
utilizai paia acceuei a los elementos ue un aiiay. Cuanuo se utiliza un
vectoi logico paia este pioposito, se extiaen uel vectoi uonue se aplica los
elementos cuyas posiciones se coiiesponuen con unos en el vectoi logico.
Poi ejemplo:
>> r=[8 12 9 4 23 19 10]
r =
8 12 9 4 23 19 10
>> s=r<=10

s =
1 0 1 1 0 0 1


>> t=r(s)


t =
8 9 4 10

>> w=r(r<=10)

w =
8 9 4 10

Los vectoies numiicos y los aiiay con ceios y unos no son compaiables a
los aiiays logicos. Los vectoies numiicos no se pueuen utilizai paia
acceuei a los elementos ue otios vectoies. Sin embaigo, los aiiays logico si
CompruebasiloselementosdeAsonmenoreso
igualesque2.AsignaelresultadoalamatrizB.
Sedefineunvector r.
Compruebaquelementoder sonmenoresoigualesque10.
Segeneraunvectorlgicosconunosenlasposiciones
dondeloselementosder sonmenoresoigualesque10,
ycon0dondeestacondicinnosecumple.
Seutilizasparaaccederaloselementosder.
Elresultadosealmacenaenunnuevovector
Elvectortcontieneloselementosderen
cuyaposicinscontenaunos.
Aqusedetallacmotodoloanteriorsepuederealizaren
unsolopaso,obteniendoelmismoresultado.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
135
pueuen sei utilizauos en opeiaciones aiitmticas. 0na vez que se utiliza un
aiiay logico en una opeiacion aiitmtica, este cambia su estatus al ue aiiay
numiico.
En una expiesion matemtica que incluye opeiauoies ielacionales y
aiitmticos, las opeiaciones aiitmticas (+,,*,,\) tienen mayoi pieceuencia
que los opeiauoies ielacionales. Los opeiauoies ielacionales tienen entie si
igual pieceuencia y se evalan ue izquieiua a ueiecha. Se pueuen utilizai
paintesis paia cambiai este oiuen ue pieceuencia. veamos algunos
ejemplos:
>> S+4<162
ans = 1
>> S+(4<16)2
|
ans =
S.Suuu

Operadoreslgicos:
Los opeiauoies logicos en NATLAB son:
Tabla4.1: opeiauoies logicos pieuefiniuos en NATLAB:
0peiauoi logico Nombie Besciipcion
&
Ejemplo: A&B
Y
(ANB)
A y B. Funciona con uos opeianuos. El iesultauo es
veiuaueio si ambos son veiuaueios, en otio caso el
iesultauo es falso(u)
|
Ejemplo: A|B
0
(0R)
A o B. Funciona con uos opeianuos. El iesultauo es
veiuaueio si alguno ue los uos es veiuaueio, en otio
caso(los uos son falsos) el iesultauo es falso(u)

Ejemplo: A
N0
(N0T)
No A. Funciona con un opeianuo. Ba la negacion uel
opeianuo, es uecii, veiuaueio (1) si A es falso, y falso
(ceio) si A es veiuaueio.

Los opeiauoies logicos funcionan con nmeios. 0n nmeio uistinto ue ceio
es veiuaueio, y un ceio es siempie falso.
Los opeiauoies logicos (al igual que los opeiauoies ielacionales) se pueuen
utilizai como opeiauoies aiitmticos uentio ue expiesiones matemticas.
El iesultauo ue estos opeiauoies se pueue usai en otios opeiaciones
matemticas y en el acceso a elementos ue un aiiay, y junto con otios
+y/seejecutanprimero.
Larespuestaes1,yaque7<8esverdadero.
4<16seejecutaprimero.Elresultadoes1,yaqueesverdadero.
Seobtiene3,5deoperar3+12.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
136
comanuos NATLAB (poi ejemplo el comanuo if) paia contiolai el flujo ue
un piogiama.
Los opeiauoies logicos (al igual que los ielacionales) se pueuen utilizai con
escalaies y aiiays.
Los opeiauoies logicas Y y 0 pueuen tiabajai con opeianuos escalaies,
aiiays y con un aiiay y un escalai. Si ambos opeianuos son escalaies, el
iesultauo sei 1 o u. Si ambos son aiiays (ueben sei uel mismo tamao) el
iesultauo se computai elemento a elemento, y sei otio aiiay uel mismo
tamao. Cuanuo un opeianuo es escalai y el otio es un aiiay, la opeiacion
logica se iealiza entie el escalai y caua uno ue los elementos uel aiiay; el
iesultauo es un aiiay uel mismo tamao con ceios y unos como elementos.
La opeiacion logica N0 est pensaua paia un solo opeianuo. Cuanuo se
utiliza con un escalai el iesultauo sei 1 o u, mientias que si se utiliza con
un aiiay el iesultauo sei otio aiiay uel mismo tamao, con un uno en las
posiciones que tengan valoies iguales a ceio, y ceio en las posiciones uonue
el aiiay tenga valoies uistintos ue ceio.
veamos algunos ejemplos:
>> S&7

ans =
1

>> a=S|u

a =
1

>> ~2S

ans =
u

>> t=2S*((12&u)+(~u)+(u|S))

t =
Su

>> x=|9 S u 11 u 1Sj;y=|2 u 1S 11 u 4j;

>> x&y

ans =
3Y7.
3y7sonnmerosdistintosde0,luegoseconsideran
verdaderos,porlotantoelresultadodelaoperacinlogcaes1.
5O0(seasignaalavariablea).
Elresultadoes1porquealmenosunodelosdosnmerosesverdadero(distintodecero.
NO25.
Elresultadoes08falso),yaque25,alserunvalordistintode
0,seconsideraverdadero,yelopuestoes,portanto,falso.
Utilizacindeoperadoreslgicosenexpresionesmatemticas.
Sedefinendosvectoresx ey.
Elresultadodeestaoperacinesunvectorconunosencadaposicin
dondeloselementosdexeyseanverdaderos(valoresdistintosde
ceros),ycerosenelrestodelasposicionesdondeestonosecumple.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
137
1 u u 1 u 1

>> a=x|y

a =
1 1 1 1 u 1

>> ~(x+y)

ans =
u u u 1 1 u

Ordendeprecedencia:
Los opeiauoies aiitmticos, ielacionales y logicos se pueuen combinai en
expiesiones matemticas a gusto uel usuaiio, siempie que stas estn bien
foimauas. Cuanuo una expiesion tiene combinaciones ue este tipo, se uebe tenei
en cuenta el siguiente oiuen ue pieceuencia estableciuo poi NATLAB:
Orden de
precedencia
Operacin
1 (la mayoi)

2
S
4
S
6
7
8 (la menoi)
Paintesis (si hay paintesis aniuaos, el ms inteino
tiene mayoi pieceuencia).
Exposicion.
0peiacion logica N0 ().
Nultiplicacion, uivision.
Suma, iesta
0peiauoies ielacionales (>, <, >=, <=, ==, =).
0peiacion logica Y (&).
0peiacion logica 0 (|).
Si uos o ms opeiaciones tienen la misma piesiuencia, la expiesion se ejecutai en
oiuen ue izquieiua a ueiecha.
Es impoitante uestacai que el oiuen enumeiauo anteiioimente se utiliza a paitii
ue la veision 6 ue NATLAB. Las veisiones anteiioies ue NATLAB tiene un oiuen ue
pieceuencia ligeiamente uifeiente (el opeiauoi & no tiene pieceuencia sobie el
opeiauoi |), poi tanto el usuaiio uebe estai atento a estas vaiiaciones en funcion
ue la veision ue NATLAB que utilice. No obstante, estos pioblemas ue
compatibiliuau se pueuen solucionai utilizanuo paintesis, incluso cuanuo estos
no sean necesaiios.
A continuacion se muestian algunos ejemplos ue expiesiones que incluyen
opeiauoies aiitmticos, ielacionales y logicos:
Lasalidaesunvectorconunosencadaposicindondelos
elementosdex o y sean verdaderos( valores distintos de
cero).,y ceros en el resto de posiciones donde esto no se cumple.
Lasalidaesunvectorconceroencadaposicindondeelresultadode
x + y sean verdadero(valores distintos de cero), y unos en cada
posicin donde el resultado de x + y sea falso(elementos iguales a u).

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
138
>> x= -2; y =5;
>> -5< x <-1
ans =
0
>> -5<x&x<-1
ans =
1
>> ~(Y<7)
ans =
0
>> ~y<7
ans =
1
>> ~((y>=8)|(x<-1))
ans =
0
>> ~(y>=8)|(x<-1)
ans =
1

Funcioneslgicaspredefinidas:
NATLAB posee funciones que piouucen un iesultauo equivalente a los opeiauoies
logicos vistos anteiioimente. Estas funciones son:
and (A,B) Equivale a A&B
or (A,B) Equivale a A | B
not (A) Equivale a B

Auems, NATLAB posee otias funciones logicas pieuefiniuas, algunas ue las cuales
se uesciiben en la tabla siguiente (Tabla 4.2):
Tabla4.2: Funciones logicas pieuefiniuas en NATLAB.
Funcion Besciipcion Ejemplo
xor (a,b)
0 exclusiva. Bevuelve 1 (veiuaueio) si uno
ue los opeianuos es veiuaueio y el otio es
falso.
>>xor(7,0)

ans=
1
>>xor(7,5)

ans=
0
Se definen dos variablesx ey.
Esta desigualdad es correcta matemticamente. La respuesta de MATLAB,
sin embargo, es 0 (falso). MATLAB ejecutan la expresin de izquierda a
derecha. -5< x es verdadero (=1) y por lo tanto 1< -1 es falso(0).
La sentencia matemtica correcta para escribir la desigualdad anterior se
construye utilizando el operador &. La desigualdad se ejecuta primero.
Como ambos miembros son ahora 1 (verdadero), la respuesta es 1.
y <7se ejecuta primero, dando verdadero(1), por tanto ~1 es falso (0).
~ yse ejecuta primero, y es verdadero (1), ya que es un
valor distinto de cero, ~1 es 0, y 0<7 es verdadero (1).
y >=8(falso)yx<1(verdadero)seejecutanprimero.El
operadorOseejecutaalfinal,dandocomoresultadofalso(0).
y >8 (falso), y x <-1 (verdadero) se ejecutan primero. La negacin
de (y >= 8) se ejecuta despus (verdadero). El operador O se
ejecutan al final, dando como resultado verdadero (1).

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
139
all(A)
Bevuelve 1 (veiuaueio) si touos los
elementos uel vectoi A son veiuaueios
(valoies uistintos ue ceio). Poi el contiaiio,
uevuelve u si uno o ms elementos son
falsos (ceio). Si A es una matiiz, el opeiauoi
tiata las columnas como vectoies,
uevolvienuo un vectoi con unos y ceios.
>>A=[62159711];
>>all(A)

ans=
1
>>B=[62159011];
>>all(B)
ans=
0
any(A)
Bevuelve 1 (veiuaueio) si algn elementos
ue A son veiuaueio (valoi uistinto ue ceio).
Poi el contiaiio, uevuelve ceio (falso) touas
los elementos son ceio (falso). Si A es una
matiiz, el opeiauoi tiata las columnas
como vectoies, uevolvienuo un vectoi con
unos y ceios.
>>A=[60150011];
>>any(A)

ans=
1
>>B=[000000];
>>any(B)
ans=
0
find(A)
find(A>d)
Si A es un vectoi, uevuelve los inuices ue los
elementos uistintos ue ceio.
Si A es un vectoi que son mayoies que u (se
pueue utilizai cualquiei otio opeiauoi
ielacional)
>>A=[094370018];
>>find(A)

ans=
234589
>>find(A>4)
ans=
259

A continuacion se muestia la tabla ue veiuau ue los cuatio opeiauoies logicos
vistos hasta ahoia (y, o, no, xor) (Tabla4.S):
Tabla4.3: opeiauoies logicos.
Entiaua Saliua
A B Y
A&B
O
A|B
XOR
(A,B)
NO
~A
NO
~B
falso Falso Falso Falso Falso veiuauei
o
veiuauei
o
Falso veiuauei
o
Falso veiuauei
o
veiuauei
o
veiuauei
o
Falso
veiuauei
o
Falso Falso veiuauei
o
veiuauei
o
Falso veiuauei
o
veiuauei
o
veiuauei
o
veiuauei
o
veiuauei
o
Falso Falso Falso

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
140
Ejemplo 6.1: Anlisis de dados de temperaturas
Durante el mes de abril del 2002 se recogieron las siguientes temperaturas
mximas (en F) en Washington DC: 58 73 73 53 50 48 56 73 66 69 63 74 82
84 91 93 89 91 80 59 69 56 64 63 66 64 74 63 69 (datos del Ministerio Nacional
de Meteorologa y Oceanografa de Estados Unidos). Utilizar operadores
relacionales y lgicos para determinar:
a) El nmero de das en los que la temperatura fue superior a 75F.
b) El nmero de das en los que la temperatura estuvo situada entre 65F y
80F.
c) Los das del mes (la fecha) en los que la temperatura estuvo situada
entre 50F y 60F.
Solucin
En el fichero script que se muestra a continuacin se introducen las
temperaturas en un vector. Posteriormente se utilizan operadores relacionales
y lgicos para analizar los datos.

El fichero script, que se guarda con el nombre Ejemplo6_1, produce la
siguiente salida cuando se ejecuta:
>> Ejemplo6_1

NuiasTencima7S =
7

NuiasTentie6Sy8u =
12

fechasTentieSuy6u =
1 4 S 7 21 2S
>>

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
141
6.2 Sentenciacondicionales:
0na sentencia conuicionales una instiuccion NATLAB que peimite toma
uecisiones sobie si se ejecuta un giupo ue comanuos que cumplen una conuicion o,
poi el contiaiio, omitiilos. En una sentencia conuicional se evala una expiesion
conuicional. Si la expiesion es veiuaueia, el giupo ue comanuos se ejecutai. Si la
expiesion es falsa, NATLAB no ejecutai (saltai) el giupo ue comanuos en
cuestion. La foima bsica ue una sentencia conuicional es la siguiente:


Ejemplos:
if a<b
if c>=S
if a ==b Touas estas vaiiables ueben tenei valoies asignauos.
if a= u
if (u<h) & (x>7)
if (x=1S) | (y<u)
Las sentencias conuicionales pueuen sei paite ue un piogiama esciito en
foima ue ficheio sciipt o ficheio ue funcion.
Como se vei a continuacion, caua sentencia if (si) uebe ii acompaaua
ue la sentencia ue la finalizacion end (fin).
La sentencia conuicional if se utiliza habitualmente en estiuctuias ue tipo if-
end, if-else-end, e if-elseif-else-end, que se uesciibiin a
continuacion.

6.2.1 Laestructuraif-end
La estiuctuia conuicional if end se ve ue foima esquemtica en la figuia 6.1,
que muestia como se intiouucen comanuos en un piogiama, y, auems, un
uiagiama ue flujo simbolico que explica el funcionamiento (flujo uel piogiama) ue
este tipo ue sentencias. Cuanuo el piogiama se ejecuta y alcanza la sentencia if,
ste evala la expiesion conuicional. Si la expiesion iesulta veiuaueia (1), el
piogiama continua hacia abajo ejecutanuo las siguientes instiucciones que siguen
a la sentencia if, hasta alcanzai la sentencia end. Poi el contiaiio, si la expiesion
conuicional iesulta falsa (u) al sei evaluaua, el piogiama salta el bloque ue
if expresin_condicional_consistente_en_operaciones_relacionales_y_lgicas.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
142
instiucciones que hay entie la sentencias if y end, y contina con la ejecucion ue
los comanuos que estn uespus ue end.

Figura6.1: Estiuctuia ue la sentencia conuicional ifend.
Las palabias ieseivauas if y end apaiecen ue coloi azul en pantalla y las
instiucciones que se encuentian entie las uos palabias ue inuentan (se tabulan
hacia auentio) automticamente paia que el piogiama sea ms fcil ue leei y
seguii. En el Ejemplo 4.2 se muestia el uso ue esta estiuctuia if-end.

Ejemplo 6.2: Clculo del salario de un trabajador
Un cobrador cobra un determinado salario por hora hasta 40 horas semanales.
Adems, si hace horas extras (ms de 40 horas semanales), esas horas se las
pagan un 50% ms. Escribir un programa (script) que calcule el pago semanal
del trabajador. El programa pedir al usuario que introduzca el total de horas y
el salario por hora. El programa visualizar el pago semanal del trabajador
Solucin
El programa (script) primero calcular el pago semanal multiplicando el salario
por el nmero de horas. Seguidamente, mediante una sentencia if,
comprobar si el nmero de horas es mayor que 40. En caso afirmativo,
ejecutar la siguiente lnea para calcular la paga correspondiente a las horas
extras. En caso de que sea falso el programa salta estas lneas y ejecuta el
siguiente comando despus del end.
Falso
Instrucciones
ProgramaMATLAB
Diagramadeflujo
Verdadero
ProgramaMATLAB.
Ifexpresin_condicional
Grupodeinstrucciones
MATLAB.
end

..

Sentenciaif
.
End

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
143


A continuacin se muestra la ejecucin de este programa script (almacenado
como PagoSemanal) para dos casos distintos:
>> PagoSemanal
Intiouuzca el numeio ue hoias tiabajauas :SS
Intiouuzca el salaiio poi hoia en Bolaies :8
El pago semanal uel tiabajoi es ue 28u.uu Bolaies
>> PagoSemanal
Intiouuzca el numeio ue hoias tiabajauas :Su
Intiouuzca el salaiio poi hoia en Bolaies :1u
El pago semanal uel tiabajoi es ue SSu.uu Bolaies
>>


6.2.2 Laestructura if-else-end
La estiuctuia piopoiciona el mecanismo necesaiio paia ejecutai uno entie uos
giupos ue comanuos posibles en funcion ue la evaluacion ue una conuicion logica.
Se tiata, pues, ue uisciiminai entie uos opciones posibles, al contiaiio que la
estiuctuia estuuiaua en la seccion anteiioi uonue solo eia posible ejecutai o no un
giupo ue comanuos. En la figuia 6.2 se muestia esquemticamente como funciona
esta estiuctuia conuicional. La piimeia linea es una sentencia if con una
expiesion conuicional. Si esta conuicion es cieita, el piogiama ejecuta el Grupo 1
ue instiucciones que se encuentia entie el comanuo if y el comanuo else, y
luego salta hasta el comanuo end. Si la expiesion conuicional es falsa, el piogiama
salta al comanuo else y ejecuta el Grupo 2 ue instiucciones, es uecii, las
instiucciones que se encuentian entie el comanuo else y el comanuo end.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
144

Figura6.2: Estiuctuia ue la sentencia conuicional if-else-end.
A continuacion se muestia un ejemplo ue utilizacion ue este tipo ue estiuctuia en
foima ue ficheio ue funcion.

Ejemplo 6.3: Nivel de un depsito de agua
Una torre para el almacenamiento de agua tiene la geometra que se muestra
en la figura adjunta (la parte inferior es un cilindro, y la superior un como
truncado invertido). Dentro del depsito hay una boya que indica el nivel del
agua. Escribir una funcin MATLAB que calcule el volumen de agua dentro del
depsito a partir de la posicin (altura h) de la boya. La entrada de la funcin
ser el valor de la altura h en metros, y la salida ser el volumen que ocupa el
agua en metros cbicos.






Solucin
Para u b 19 m el volumen de agua se puede calcular a partir del volumen
de un cilindro de altura h:
Diagramadeflujo
Falso
Grupo1de
instrucciones
Verdadero
Sentencia
if
ProgramaMATLAB
ProgramaMATLAB.
if expresin
Grupo1deinstrucciones
MATLAB.
end

..
else

.
.
End
Grupo2de
instrucciones
..
..
..
Grupo2deinstrucciones
MATLAB.

14m
h
Dimetro25m
Dimetro46m
19m
r
h

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
145
: = n 12.S
2
b.
Para 19 < b SS m el volumen de agua se calcula sumando el volumen del
cilindro, con altura h = 19 m, y el volumen de agua en el cono:
: = n 12.S
2
- 19 +
1
3
n(b - 19)(12.S
2
+ 12.S - r
h
+ r
h
2
)
Donde r
h
cs: 12.S +
10.5
14
(b - 19).
A continuacin se muestra el cdigo de la funcin V = voluagua (h) que
resuelve el problema:


A continuacin se muestran dos ejemplos de ejecucin de la funcin en la
Ventana de Comandos:
>> voluagua(8)
ans =
3.9270e+003

>> VOL=voluagua(25.7)
VOL =
1.4115e+004
>>

6.2.3 Laestructura if-elseif-else-end
La estiuctuia if-elseif-else-end se muestia en la figuia 6.S.Esta estiuctuia
incluye uos sentencias conuicionales (if y elseif), lo que hace posible ejecutai
uno ue entie ties giupos ue instiucciones uifeientes. La piimeia linea es una

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
146
sentencia if con una expiesion conuicional. Si la expiesion es veiuaueia, el
piogiama ejecutai el Grupo 1 ue instiucciones que se encuentia entie la
sentencia if y elseif, y posteiioimente saltai a hasta el end (sin ejecutai el
iesto ue los giupos). Si la conuicion evaluaua es falsa, el piogiama saltai hasta la
sentencia elseif. Si la conuicion que se evala en elseif es veiuaueia,
entonces se ejecutai el Grupo 2 ue instiucciones que se encuentia el comanuo
elseif y el comanuo else, posteiioimente saltai hasta el end. Poi el contiaiio,
si la conuicion ue elseif iesulta falsa, el piogiama saltai al else y ejecutai el
Grupo 3 ue instiucciones que se encuentia entie el comanuo else y el comanuo
end.

Figura6.3: Estiuctuia ue la sentencia conuicional if-elseif- else - end
Es necesaiio uestacai que se pueue intiouucii ms que una sentencia elseif y
poi tanto asociai nuevos giupos ue instiucciones que se ejecutaian o no
uepenuienuo ue las conuiciones estableciuas. Auems, la sentencia else es
opcional. Esto significa que en el caso ue que haya vaiios elseif y ningn else,
si alguna conuicion ue los elseif es veiuaueia, los comanuos sei ejecutauos,
peio en otio caso (touas las conuiciones ue los elseif son falsas) no se ejecutai
ni se iealizai ninguna opeiacion.



elseifexposicin_condicional

Grupo1de
instrucciones
ProgramaMATLAB
Diagramadeflujo
Verdader
ProgramaMATLAB.
if expresin
Grupo1 de
instrucciones
end

Sentenci
aif

end
Sentenci
aif
Grupo3de
instruccione
Falso
Grupo2de
instrucciones
Verdader
Falso

Grupo2de
instrucciones
Grupo3de
instrucciones

else

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
147
6.3 Lasentencia switch-case
La sentencia switchcase es otia estiuctuia paia el contiol ue flujo ue un
piogiama. Esta sentencia piopoiciona un mecanismo paia escogei y ejecutai un
giupo ue instiucciones ue entie vaiios giupos posibles. La estiuctuia ue esta
sentencia se muestia en la Figuia 6.4.
La piimeia linea en la sentencia switghcase tiene la foima:


Bonue la expiesion pueue sei un escalai o una cauena. Noimalmente consiste en
una vaiiable a la que se le ha asignauo un valoi escalai o una cauena. No obstante,
tambin pueue consistii en una expiesion matemtica evaluable.

Figura6.4: estiuctuia ue la sentencia switchcase.
A continuacion uel comanuo switch hay uno o vaiios comanuos ue tipo
case, seguiuos poi valoies que pueuen sei escalaies o cauenas (valoi 1,
valoi 2, etc.). Caua comanuo case est asociauo a la seiie ue instiucciones
que se esciiben a continuacion ue l.
Bespus ue ultimo comanuo case pueue habei, opcionalmente, un
comanuo otherwise, seguiuo tambin ue un giupo ue instiucciones.
La ltima linea uebe ue sei una sentencia end.
Grupo1deinstrucciones
Casevalor2
.
ProgramaMATLAB
ProgramaMATLAB.
switchexpresin
casevalor1
otherwise

.
end

.
.
Grupo2deinstrucciones
Grupo3deinstrucciones

Case valor 3
.
.
. Grupo4deinstrucciones
switchexpresin

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
148
Cmofuncionalasentenciaswitch-case?
El valoi ue la expiesion uel switch se compaia con los valoies ue caua comanuo
case. Si se encuentia una coinciuencia, entonces se ejecutan las instiucciones que
siguen a uicho comanuo case (solo un giupo ue instiucciones, justo el que se
encuentia uespus uel piopio comanuo case).
Si hay ms ue una coinciuencia, solo se atenuei a la piimeia que se
encuentia.
Si no se encuentian coinciuencias se ejecutan las instiucciones que siguen
al comanuo otherwise, si ste ha siuo ueclaiauo(es opcional).
Si no se encuentian coinciuencias y no est ueclaiauo el comanuo
otherwise, entonces no se ejecutai ninguna instiuccion o giupos ue
instiucciones.
0na sentencia case pueue tenei ms ue un valoi con el que establecei
coinciuencias. Paia ueclaiailos solo es necesaiio poneilos a continuacion,
uno uetis uel otio, entie llaves y sepaiauos poi comas, ue la foima:
{valor 1, valor2, valor3,}. Este tipo ue notacion, que no se
tiatai en este libio, es lo que se conoce poi aiiay ue celuas. En caso ue
tenei ms ue un valoi, el giupo ue instiucciones coiiesponuientes al case se
ejecutai siempie que al menos haya coinciuencia con alguno ue los valoies
inuicauos.
Nota pata los programadores de C: en MATLAB, la sentencia switch-case
buscaslohastalaprimeracoincidencia,saltandoalfinal(end)unavezejecutadas
todaslasinstruccionesdelcasecorrespondiente.Estodifieredelusoquesehacede
esta sentencia en el lenguaje C, donde se pueden encontrar y ejecutar instrucciones
de ms de un case, que se corresponden con ms de una coincidencia, siendo por
tanto necesaria alguna instruccin de ruptura de secuencia, como la sentencia
break.

Ejemplo 6.4: Conversin de unidades de energa
Escribir un programa (en un fichero script) que convierta una cantidad de
energa dada (trabajo) en J (joules), ft- lb (pies-libras), cal (caloras) o eV
(electronvoltios) a la cantidad equivalente en otra unidad diferente especificada
por el usuario. El programa pedir al usuario que introduzca la cantidad de
energa y su unidad, as como la unidad a la que se quiere realizar la
conversin. La salida ser la cantidad introducida convertida a la nueva unidad
de energa elegida.
Los factores de conversin son: 1 J = 0,738 ft- lb = 0.239 cal = 6.24 x 10
18
eV.
Utilizar posteriormente este programa para:

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
149
a) Convertir 150 J a ft-lb.
b) Convertir 2800 cal a J.
c) Convertir 2.7 e V a cal.
Solucin
El programa incluye dos bloques de tipo switch- case y uno de tipo if-else
end. El primer bloque switch-case se utiliza para convertir la cantidad de
entrada, con su correspondiente unidad de media, a joules. El segundo bloque
switch-case se utiliza para convertir la cantidad en joules a la nueva unidad,
especificada por el usuario, para la conversin. La sentencia if-else - end
se utiliza para genera un mensaje de error si las unidades se introducen
incorrectamente.

Como ejemplo, a continuacin se muestra la salida de ese fichero (guardado
como ConversionEnergia), cuando se ejecuta desde la Ventana de Comandos
con los datos en el apartado b) del problema.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
150
>> ConversionEnergia
Introduzca el valor de la energia (trabajo) que hay que convertir:2800
Introduzca la unidad actual de la energia (J,ft-lb,cal,eV):cal
Introduzca la nueva unidad para la energia (J,ft-lb,cal,eV):J
E=11715.5 J
>>

6.4 Bucles
Los bucles o iteiaciones son otio ue los mtouos utilizauos paia contiolai el flujo
ue un piogiama. En un bucle, la ejecucion ue uno o vaiios comanuos se iepite
vaiias veces consecutivamente. Caua una ue estas iepeticiones se uenomina paso o
iteiacion. En caua paso se ejecutan giupos ue instiucciones NATLAB como las que
se han visto hasta ahoia. NATLAB peimite uefinii uos tipos uistintos ue bucle. Poi
un lauo, la estiuctuia for-end (Seccion 4.4.1) peimite uefinii bucles uonue el
numeio ue iteiaciones queua uefiniuo al comienzo uel bucle. Poi otio lauo, en la
estiuctuia while-end (Seccion 4.4.2) el nmeio ue iteiaciones no se conoce a
piioii, ya que uepenue ue que se cumpla o no una conuicion ueteiminaua.
Inuepenuientemente uel nmeio ue iteiaciones ue uno u otio tipo ue bucle, es
posible salii ue cualquieia ue ellos (antes ue que acaben) utilizanuo la sentencia
break (vei Seccion 4.6).

6.4.1 Buclesdeltipo for-end
En este tipo ue bucles la ejecucion ue una o vaiias instiucciones se iepiten
un nmeio fijo ue veces. La estiuctuia ue este tipo ue bucles se muestia en
la Figuia 4.S.
La vaiiable inuice uel bucle pueue tenei cualquiei nombie (noimalmente se
utiliza i, j, k, m o n como nombie ue vaiiable inuice, aunque i y j no uebeiian
usaise si se est tiabajanuo con nmeios complejos).
En el piimei paso k toma el valoi inicial f, y el sistema ejecuta los
comanuos que se encuentian entie las instiucciones for y end.
Seguiuamente el sistema vuelve a la instiuccion for paia iealizai el
segunuo paso. Ahoia k toma el valoi k = f+s, y los comanuos que se
encuentian entie las sentencias for y end se ejecutan otia vez con el
nuevo valoi ue k. el pioceso se iepite hasta el ltimo paso, es uecii, cuanuo
k toma el valoi t .Entonces el piogiama no ietoina a la instiuccion for,
sino que el bucle acaba y el sistema contina ejecutanuo los comanuos que
se encuentian a continuacion uel comanuo end. Poi ejemplo, si k =
1:2:9, se llevaiian a cabo cinco inteiacciones o pasos, y k tomaiia los
valoies 1, 3, 5,7 y 9 en caua iteiacion uel bucle.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
151
El inciemento s pueue sei negativo (poi ejemplo. k =25:-5:10 piouuce
cuatio iteiaciones con los valoies k=25, 20, 15, 10).
Si el valoi ue inciemento se omite, el inciemento poi uefecto sei ue 1 (poi
ejemplo, k=3:7 piouuce cinco iteiaciones con los valoies k= 3, 4, 5,
6,7)
Si f=t, el bucle se ejecuta solo una vez.
Si f> t y s>0, o si f<t y s<0, el bucle no se ejecutai.
Si los valoies ue k, s y t son tales que k no pueue sei igual a t, entonces,
si s es positivo, la ultima iteiacion es aquella en la que k tenui el valoi ms
alto posible y a la vez sea menoi que t (poi ejemplo, k= 8:10:50 piouuce
cinco iteiaciones con valoies k=8, 18, 28, 38, 48). Si s es negativo, la
ultima iteiacion sei aquella en la que k es el menoi valoi posible y a su vez
mayoi que t.
La vaiiable k tambin pueue tomai valoies especificos (que no son
inciementos uel valoi anteiioi). Paia ello hay que intiouucii meuiante un
vectoi los valoies que se ueseen. Poi ejemplo: for k=[7 9 -1 3 3 5].


Figura6.5: estiuctuia uel bucle for-end.
El valoi ue k no uebe sei ieuefiniuo uentio uel piopio bucle. Si se hace, el
bucle pouiia no funcionai como se espeiaba.
Touos los comanuos for ue un piogiama ueben tenei su coiiesponuiente
comanuo ue finalizacion end.
En valoi ue la vaiiable inuice uel bucle (k) no se visualiza automticamente.
Sin embaigo, es posible visualizaila teclauo k como un comanuo ms uentio
uel bucle. A veces esto es til en ueteiminauas ciicunstancias,
especialmente paia uepuiai el piogiama.
Variable
ndicedel
bucle
Valorinicialdek
(valorquetomar
enelprimerpaso)
Elincrementode
k(despusde
cadapaso)
ltimovalorquepuede
tomark(valordek,fin
delbucle).
fork=f:s:t
..
.. GrupodecomandoMATLAB
..
end

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
152
Cuanuo un bucle finaliza, la vaiiable inuice uel bucle (k) toma el valoi ue la
asignacion en el ltimo paso o iteiacion, es uecii, el valoi final inuicauo en
la piopia ueclaiacion uel bucle.
veamos un ejemplo sencillo (en foima ue sciipt) ue utilizacion ue la estiuctuia
for-end:

Cuanuo se ejecuta este piogiama, el bucle iteia cuatio veces. Poi tanto k toma los
siguientes valoies uuiante los cuatio pasos: k= 1, 4, 7 y 10. Esto implica
que los valoies asignauos a x (esto se hace en funcion ue k) uuiante esos cuatio
pasos son: x= 1, 16, 49 y 100, iespectivamente. Como no se ha tecleauo un
punto y coma uetis ue la segunua linea, el valoi ue x se visualiza en la ventana ue
Comanuos poi caua inteiaccion uel bucle, piouucienuo la siguiente saliua:
>> bucles
x =
1
x =
16
x =
49
x =
1uu
>>

Ejemplo 6.5: Series numricas.
a) Utilizar un bucle de tipo for end, en un fichero script, para
calcular la suma de los primeros n trminos de la siguiente serie
numrica:

(-1)
k
k
(2)
k
n
k=1

Ejecutar el fichero script para n=4 y n= 20.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
153
b) La funcin sen(x) se puede aproximar utilizando la siguiente serie
de Taylor:

(-1)
k
x
2k+1
(2k + 1)!

k=0

Escribir un fichero de funcin que calcule sen(x) utilizando la serie de
Taylor. Utilizar para ello la siguiente definicin de funcin: y =
Tsen(x,n). Los argumentos de entrada sern el ngulo x en grados y
el nmero n de trminos de la serie. Utilizar la funcin para aproximar el
valor de sen(150), sumando los primeros 3 trminos y despus
sumando los 7 primeros trminos. Comparar el resultado obtenido en
una y otra aproximacin.

Solucin
a) El fichero script que calcula la suma de los primeros n trminos de la
serie se muestra a continuacin:

El sumatorio se implementa mediante un bucle, de forma que en cada
paso se calcula un trmino de la serie (en la primera iteracin el primer
trmino, en la segunda, el segundo trmino, y as sucesivamente), y se
suma al anterior (al clculo en la iteracin anterior). Este programa se
guarda en disco con el nombre Ejemplo4_5a, y una vez se ejecuta en la
Ventana de Comandos produce la siguiente salida:
>> Ejemplo6_5a
Introduzaca el numero de terminos:4
El valor (suma) de la series es: -0.125000
>> Ejemplo6_5a
Introduzaca el numero de terminos:20
El valor (suma) de la series es: -0.222216
>>

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
154
b) A continuacin se muestra el fichero de funcin que aproxima el valor
de sen(x) mediante la suma de los trminos de la serie de Taylor
propuesta en el enunciado:

El piimei elemento se coiiesponue con k igual a u, lo que significa paia sumai los
n timinos ue la seiie, en la ltima iteiacion k uebe sei igual a n1. La funcion se
utiliza en la ventana ue Comanuos paia calculai el seno ue 1Su, utilizanuo ties y
siete timinos ue la seiie.

>> Tsen(1Su,S)
ans =
u.6S2S

>> Tsen(1Su,7)
ans =
u.Suuu
>>


Notasobreelbuclefor-endylasoperacioneselementoaelemento:
En cieitas ocasiones se pueue obtenei el mismo iesultauo aplicauo un bucle for-
end o iealizanuo opeiaciones elemento a elemento sobie aiiays. El pioblema ue
ejemplo 4.S ilustia como funciona un bucle for_end, peio ese pioblema tambin
se pouiia habei iesulto utilizanuo opeiaciones elemento a elemento. Las
opeiaciones elemento a elemento con aiiays son una ue las caiacteiisticas ms
notables ue NATLAB, ya que ofiece un mtouo ue clculo que en cieitas
ciicunstancias evita la utilizacion ue bucles. En geneial, las opeiaciones elemento a
elemento son mas ipiuas que los bucles y se iecomienuan en aquellas situaciones
en las que se pueuen utilizai ambos mtouos.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
155
6.4.2 Buclesdeltipo while-end
Los bucles while-end se utilizan cuanuo se necesita un piogieso iteiativo, peio
se uesconoce pieviamente el nmeio ue iteiaciones que hay que iealizai. En este
tipo ue bucles el nmeio ue pasos no se especifica al piincipio, poi tanto el pioceso
iteiativo contina mientias se satisface una conuicion ueteiminaua. La estiuctuia
ue un bloque while-end se muestia en la Figuia 4.6





Figuia 4.6: Estiuctuia uel bucle while-end
La piimeia linea ue un bucle ue este tipo incluye una expiesion conuicional.
Cuanuo el piogiama llega a esa linea, compiueba uicha expiesion. Si esta iesulta
falsa (u), NATLAB salta uiiectamente al final uel bucle, es uecii, a la sentencia end.
Poi el contiaiio, si la expiesion conuicional es veiuaueia (1), NATLAB ejecuta el
giupo ue comanuos que se encuentian entie la sentencia while y la sentencia
end. Seguiuamente NATLAB ietioceue ue nuevo a la instiuccion while y
compiueba ue nuevo la expiesion conuicional (paia esta y las sucesivas
iteiaciones). En uefinitiva, el pioceso iteiativo contina hasta que la expiesion
conuicional uel while se hace falsa.

Paraunaejecucincorrectadelbucle while-end:
La expiesion conuicional uel comanuo while uebe incluii al menos una
vaiiable.
Las vaiiables ue la expiesion conuicional ueben tenei valoies asignauos
cuanuo NATLAB ejecute el comanuo while poi piimeia vez.
Al menos una ue las vaiiables ue la expiesion conuicional uebe cambiai ue
valoi poi la ejecucion ue los comanuos que estn entie la sentencia while
y la sentencia end. En caso contiaiio, si ninguna ue las vaiiables cambia, la
conuicion uel while se mantenui siempie igual y el bucle nunca acabai
ue iteiai (bucle infinito).
While expiesion _conuicional
.
. uiupo ue instiucciones NATLAB.
.
Enu

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
156
En el siguiente piogiama se muestia un ejemplo sencillo ue bucle while- end.
En este piogiama, una vaiiable x con valoi inicial 1 se multiplica poi uos en caua
iteiacion. El bucle se iepite mientias el valoi ue la vaiiable sea menoi o igual a 1S.

Cuanuo este piogiama se ejecuta, la saliua que pueue veise en la ventana ue
Comanuos es la siguiente:
x =
1

x =
2

x =
4

x =
8

x =
16

Notaimportante:
Cuanuo se esciibe un bucle uel tipo while-end, el piogiamauoi uebe aseguiaise
ue que la vaiiable o las vaiiables que inteivienen en la expiesion conuicional sean
mouificauas en el inteiioi uel bucle, meuiante alguna sentencia apiopiaua, ue
foima que la conuicion uel while se haga falsa y el pioceso iteiativo pueua
teiminai alguna vez. En caso contiaiio, el bucle continuai inuefiniuamente (bucle
infinito) poique la conuicion ue iteiacion es siempie cieita. Poi ejemplo, en el
piogiama anteiioi, si la expiesion conuicional fueia x>=0,5, el bucle continuaiia
inuefiniuamente. Esta situacion se pueue evitai contanuo el nmeio ue pasos y
uetenienuo ue alguna foima el bucle si este nmeio sobiepasa un valoi
Valorinicialdex.
Elsiguientecomandodespusdewhileseejecutar
siempreycuandoelvalordexseamenoroiguala15.
Encadapaso,elvalordexseduplica.
Valorinicialdex.
Encadapasada,elvalordexseduplica.
Cuandox=16,laexpresincondicionalsujetaalbuclewhileesfalsa
(16noesmenoroiguala15).Estoprovocaqueelbucletermine.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
157
consiueiauo como excesivo. Esto se pueue llevai a cabo aauienuo el nmeio
mximo ue pasos en la expiesion conuicional, o utilizanuo el comanuo ue paiaua
explicita break (seccion 4.6).
Como nauie est libie ue cometei eiioies, los bucles infinitos pueuen apaiecei
aunque se intente evitailas. Cuanuo esto ocuiia, el usuaiio pueue paiai la
ejecucion ue un bucle infinito pulsanuo al combinacion ue teclas Ctrl +C o Crtl
+ Break.

Ejemplo 6.6: Representacin de una funcin mediante la serie de Taylor
La funcin f(x) = e
x
se puede representar mediante la siguiente serie de Taylor:
c
x
=
x
n
n!

n=0

Escribir un programa script en MATLAB que calcule e
x
utilizando la serie de
Taylor indicada anteriormente. El programa debe calcular e
x
sumando los
trminos de la serie en un proceso iterativo que se detenga cuando el valor
absoluto del ltimo trmino sumado sea inferior a 0,0001. Utilizar para ello un
bucle del tipo while- end, limitando el numero de iteraciones a 30. Si en la
iteracin numero 30 el valor del trmino sumado no es inferior a 0,0001, el
programa deber parar y visualizar un mensaje que diga que se necesitan ms
de 30 trminos.
Utilizar el programa para calcular e
2
, e
-4
y e
21
Solucin
Los primeros trminos de la serie de Taylor tiene la forma:
c
x
= 1 + x +
x
2
2!
+
x
3
S!
+
Ms abajo se muestra el cdigo del programa que resuelve este problema. En
primer lugar se pide al usuario que introduzca el valor de x. a continuacin el
programa asigna el valor 1 (el valor del primer trmino de la serie) a la variable
an. Seguidamente, a la variable S, que guarda la suma acumulada, se le suma
an. Despus, a partir del segundo trmino en adelante, el programa utiliza un
bucle while para calcular el trmino ensimo de la serie y sumarlo a la
variable S. Mediante la variable n, el programa cuenta el nmero de trminos
calculados. La expresin condicional de la instruccin while ser cierta en
tanto que el valor absoluto del trmino ensimo an sea mayor que 0,0001, y el
nmero de pasos n sea inferior a 30. Esto significa que si el termino 30 no es
menor que 0,0001 el bucle terminar.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
158

El programa utiliza un bloque condicional del tipo if-else- end para
visualizar los resultados. Si el bucle termina porque el termino ensimo no es
menor que 0,0001, se visualiza un mensaje que indica esta situacin. Por el
contrario, si el proceso resulta exitoso, se visualiza el valor de la funcin y el
nmero de trminos de la serie sumados. Cuando el programa se ejecuta, el
nmero de pasadas depende realmente del valor de x. Veamos a continuacin
la ejecucin del programa anterior (guardado como expox) para el clculo de
los valores e
2
, e
-4
y e
21
:
>> expox
Introduzca el valor de x:2
exp(2.000000)=7.389046)
El numero de terminos utilizados es: 12
>> expox
Introduzca el valor de x:-4
exp(-4.000000)=0.018307)
El numero de terminos utilizados es: 18
>> expox
Introduzca el valor de x:21
Se necesitan mas de 30 terminos
>>

6.5 Buclesanidadosysentenciascondicionalesanidadas
Los bucles y las sentencias conuicionales se pueuen aniuai unos uentio ue los
otios. Esto significa que un bucle yo una sentencia conuicional pueue empezai (y
acabai) uentio ue otio bucle yo sentencia conuicional. No existe limite sobie el
nmeio ue bucles y sentencias conuicionales que se pueuen aniuai. Sin embaigo,

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
159
es necesaiio iecoiuai que caua sentencia if, case, for y while uebe tenei
su coiiesponuiente sentencia ue finalizacion end. La figuia 6.7 muestia la
estiuctuia ue un bucle for-end aniuauo uentio ue otio bucle uel mismo tipo. Poi
ejemplo, si en los bucles que muestia esa figuia, n=3 y m=4, entonces paia la
piimeia iteiacion, k = 1, el bucle inteino se ejecuta cuatio veces, tomanuo h los
valoies 1, 2, 3, y 4. En la siguiente iteiacion, cuanuo k=2, el bucle inteino se
vuelve a ejecutai otias cuatio veces. Caua vez que se teclea un bucle aniuauo
NATLAB inuenta automticamente el nuevo bucle (inteiioi) en funcion uel bucle
exteiioi. En el siguiente ejemplo se muestia la utilizacion ue vaiias estiuctuias
aniuauas.

Figura6.7: estiuctuia ue los bucles aniuauos.
6.6 Loscomandos break y continue
Elcomando break:
Cuanuo se intiouuce uentio ue un bucle (ue tipo for o while), este
comanuo teimina ue foima completa la ejecucion uel bucle (no solamente
uel ltimo paso, sino ue touo el bucle). Cuanuo este comanuo apaiece
uentio ue un bucle, NATLAB salta al final uel bucle (sentencia end) y
contina con la sentencia que sigue al bucle (no vuelve hacia aiiiba en la
ejecucion).
Si el comanuo break se encuentia uentio ue un bucle, aniuauo, solo
teiminai la ejecucion uel bucle aniuauo.
Cuanuo el comanuo break apaiece fueia ue un bucle, en un ficheio sciipt o
ue funcion, piovoca la teiminacion uel ficheio en cuestion.
El comanuo break se utiliza habitualmente uentio ue sentencias
conuicionales. Bentio ue los bucles piopoiciona una foima ue acabai con el
pioceso iteiativo en funcion ue alguna conuicion estableciua. Poi ejemplo,
Cadavezquekseincrementaen1,
elbucleanidadoseejecutamveces.
Endefinitiva,elgrupodecomandos
internosseejecutauntotaldenxm
veces.
Bucle Bucle
anidado
Grupode
comandos.
fork=1:n
forh=1:m
..
..
..
end
end

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
160
cuanuo el nmeio ue iteiaciones exceue un ueteiminauo valoi, o cuanuo se
piouuce algn tipo ue eiioi en un pioceso numiico. Cuanuo se teclea fueia
ue un bucle, el comanuo break piopoiciona una foima ue teiminai con la
ejecucion uel ficheio ue foima explicita cuanuo, poi ejemplo, los uatos
suministiauos a una funcion no coinciuen con los uatos espeiauos.
Elcomando continue:
El comanuo continue se pueue usai uentio ue un bucle (for o whike)
paia uetenei la iteiacion actual y foizai la siguiente inteiaccion uel bucle.
El comanuo continue noimalmente foima paite ue alguna sentencia
conuicional. Cuanuo NARTLAB alcanza este comanuo uentio ue un bucle,
este no sigue ejecutanuo el iesto ue los comanuos uel bucle, sino que salta a
la sentencia end (fin uel bucle) y a continuacion comienza la siguiente
inteiaccion.

Ejemplo 6.7: Generacin de nmeros para el sorteo de la lotera.
En un sorteo de lotera el juegador debe elegir varios nmeros de entre una
lista dada. Escribir una funcin MATLAB que genere una lista de n nmeros
enteros, distribuidos uniformemente entre un rango a y b. Todo los nmeros
seleccionados de la lista deben ser distintos.
a) Utilizar la funcin para generar una lista de 6 nmeros que varan entre 1
y 49.
b) Utilizar la funcin para generar una lista de 8 nmeros que varan entre 60
y 75.
c) Utilizar la funcin para generar una lista de 9 nmeros que varan entre -
15 y 15.

Solucin
A continuacin se muestra una funcin MATLAB que resuelve el problema
expuesto. La funcin utiliza la instruccin rand y para asegurar que todos los
nmeros seleccionados sean distintos (que no haya nmeros repetidos), se
escogern de uno en uno. Cada nmero se generara con la funcin rand, y se
comparar con todo los nmeros ya seleccionados anteriormente para ver si
coincide con alguno de ellos. Si alguno se repite, no se seleccionar y se
generar un nuevo numero para reemplazarlo. El bucle while chequea
precisamente esta condicin, es decir que el numero no coincida con ningn
otro de los almacenados en el vector x. si se encuentra alguna coincidencia, se
realizar un proceso iterativo de un nuevo numero hasta que ste sea diferente
de los ya existentes en x.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
161

Esta funcin ser luego utilizada en la Ventana de Comandos para resolver los
tres casos planteados en el enunciado. Obsrvese que cada vez que se
ejecute esta funcin producir resultados distintos, aunque se utilicen los
mismos parmetros de entrada. Esto se debe a que se trata de nmeros
aleatorios. Por este motivo los resultados obtenidos a continuacin no
coincidirn con los que obtenga el lector cuando ejecute esta funcin.
>> loteria(1,49,6)

ans =
23 2 40 22 31 39
>> loteria(60,75,8)
ans =
15 12 4 7 74 73 2 6
>> loteria(-15,15,9)
ans =
25 1 5 7 3 9 -15 23 14
>>

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
162
6.7 Problemas propuestos
1. La temperatura mxima diaria (en F) en Nueva York y Anchorage, Alaska, durante
el mes de enero de 2001 vienen dadas en los siguientes vectores (datos tomados del
Ministerio de Meteorologa y Oceanografa de Estados Unidos).
TNY = |S1 26 Su SS SS S9 41 41 S4 SS 4S 42 S6 S9 S7 S2 S2 SS 42 S8 SS 4u S7 S6 S1 Su],
TANC = |S7 24 28 2S 21 28 46 S7 S6 2u 24 S1 S4 4u 4S S6 S4 41 42 SS S8 S6 SS SS 42 42 S7
26 2u 2S S1].
Escriba un programa script que calcule:
a) La temperatura media en ese mes para cada ciudad.
b) El nmero de das que estuvo la temperatura de cada ciudad por debajo de la media.
c) El nmero de das, y qu das del mes corresponden, en los cules la temperatura de
Anchorage fue mayor que la temperatura de Nueva York.
d) El nmero de das, y a qu das del mes corresponden, en los cuales la temperatura
fue igual en ambas ciudades.
e) El nmero de das, y que das del mes corresponden, en los cuales la temperatura de
ambas ciudades se mantuvo por encima de 32F (sin helar).


2. Represente la siguiente funcin de dos formas distintas:
(x) = _
4c
x+2
- 6 x -2
x
2
-2 x 2,S
(x + 6,S)
1
3
2,S x 6

a) Escribiendo un fichero script que utilice bucles y sentencias condicionales.
b) Cuando una funcin (x) para utilizarla posteriormente en un fichero script.

3. Escriba un programa script que calcule las races reales de una funcin cuadrtica
ox
2
+ bx + c = u. Llame al fichero raicescuad. Cuando el fichero se ejecute, ste
debe pedir al usuario que introduzca los valores de las consonantes a, b y c. Para las
races de la ecuacin, el programa calcular el discriminante D:
= b
2
- 4oc
Si D > 0, el programa visualizar un mensaje del tipo:La ecuacin tiene dos races, y
los valores de las races se visualizarn en la lnea siguiente.

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
163
Si D = 0, el programa visualizar un mensaje del tipo: La ecuacin tiene una raz, y el
valor de la raz se visualizar en la lnea siguiente.
Si D < 0, el programa visualizar un mensaje del tipo: La ecuacin no tiene races
reales.
Ejecute el fichero script en la Ventana de Comandos tres veces para calcular las
soluciones de las siguientes ecuaciones:
a) 2x
2
+8x - S = u
b) 1Sx
2
+ 1ux +S = u
c) 18x
2
+ 12x +2 = u

4. Escriba un programa (utilizando un bucle) que calcule la suma de los m primeros
trminos de la serie:

(-1)
n
1
2n + 1
(n = u,1,2, , m)
m
n=0

Esta serie se denomina serie de Leibniz, y converge a n4. Ejecute el programa para
m = 1u y m = Suu. Compare posteriormente con el valor exacto n4.
5. Escriba una funcin MATLAB que calcule las coordenadas polares de un punto
correspondiente a un sistema de coordenadas cartesianas, en un plano de dos
dimensiones. Utilice la siguiente lnea de definicin de funcin para ello: [theta
radio] = CartesianoAPolar (x, y). Los argumentos de entrada sern las
coordenadas cartesianas x e y del punto, y los argumentos de salida sern el ngulo 0 y
la distancia radial (radio) al punto en cuestin. El ngulo vendr dado en grados, y su
medida ser relativa al eje x positivo, de tal forma que sea un nmero positivo en los
cuadrantes I, II y III, y un nmero negativo en el cuadrante IV. Utilice posteriormente
esta funcin para calcular las coordenadas polares de los puntos (15, 3), (-7, -9), (-17, -
9) y (10, -6,5)






(II)
(III) (IV)
(I)
y
x
(x, y)
0

PREMAESTRIAENRECURSOSHIDRICOS2011 PROGRAMACIONCONMATLAB
164
6. La velocidad, en funcin del tiempo, de la partcula que se mueve a lo largo de una
lnea recta, se representa en el grfico adjunto y viene dada por las siguientes
ecuaciones:
:(x) =
`
1
1
1
1
1,4t
14 + Sscn _
n
10
(t -1u)]
9
9 -
9
5
(t - SS)

u t 1us
1u t 2Ss
2S t SSs
SS t 4us

Escriba dos funciones MATLAB: una de ellas debe calcular la velocidad de la partcula
en un instante t (utilice la siguiente definicin de funcin: v =velocidad (t)), y la
otra funcin deber calcular la aceleracin de la partcula en el instante t (utilice para
ello la siguiente definicin de la funcin: a = aceleracin (t)). Escriba
posteriormente un programa, en un fichero script, que represente las grficas de la
velocidad y la aceleracin, en funcin del tiempo, de una partcula en movimiento (las
dos grficas deben aparecer en la misma ventana grfica). Para ello, dentro del fichero
script, cree primero un vector t, para u t 4usegundos, y despus utilice las
funciones velocidad y aceleracin para crear los vectores v y a, que se
utilizarn para generar la representacin grfica.

You might also like