Sunteți pe pagina 1din 34

03. PROGRAMACION CON MATLAB Mg.

Amado Malca Villalobos

PROGRAMACION CON MatLab

Un programa en MatLab, es una secuencia de instrucciones lógicamente ordenadas, que le indica


al programa en forma detallada todo lo que debe hacer. Si le indicamos algo que no es coherente
matemáticamente, obviamente generara un error.
En un programa por lo general hay que tomar algunas ‘decisiones’, que la asume el computador,
para ello hay que darle la orden adecuada. Así vamos a tener diferentes tipos de instrucciones:

Operadores relacionales
Operadores lógicos
Sentencias condicionales
Sentencias de iteración
Ficheros de función
Programa principal
Subprogramas

OPERADORES RELACIONALES
Estos son un conjunto de operadores básicos, con los cuales se construye cualquier expresión
lógica, la cual arroja el valor “1” si la expresión es verdadera, y genera el valor “0” si al expresión
es falsa. Estas expresiones nos ayudan a tomar decisiones.
Considere los siguientes valores de las variables:
>> x=4,y=5,z=8,w=-6
x= 4
y= 5
z= 8
w = -6
>>
Operador Descripción Tecla rápida Ejemplo
relacional:
Menor que Alt 60 >> x+y<8
< ans = 0
Mayor que Alt 62 >> z+y>w
> ans = 1
Menor o igual que Alt 60, alt 61 >> 2*x+3*y<=38+w
<= ans = 1
Mayor o igual que Alt 62, alt 61 >> x-z+y>=w
>= ans = 1
Igual a Alt 61, alt 61 >> 5*x-z==18+w
== ans = 1
Diferente de Alt 126, alt 61 >> x+y+z+w~=11
~= ans = 0

Notas:
01) El signo “=”, solo asigna un valor, a diferencia de el signo”==” que compara.
02) El resultado de la comparación será 1, cuando sea verdadero, y 0 cuando sea falso.

Ejemplos: Ejecute los siguientes comandos, y analize el resultado:


>> (4>9)+(6==8-2)+(8+5~=13)+(6<=16)
>> (6<9+8)+(1+6>=8-2)+(7-7+8~=17)+(6>=56)
>> (56==78-21)-(16-45~=6*7+9)-(8^2+5==72/6)+3*(6<=16)
>> [1 5 8 9 80]>[2 6 7 28 6]
>> A=[1 2 4;5 6 7;9 8 4]
>> A>=5

03 programación en MatLab 1
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

>> B=A>=5
>> C=[11 12 44;51 61 71;93 86 44]
>> D=C+5
>> C=[21 -12 44;55 71 71;83 96 54]
>> B==C, D~=B
>> X=B==C, Y=D~=B, Z=C<=D
Otro ejemplo, en el que vamos a comparar los elementos de una matriz con el numero más
pequeño de las maquina: eps = 2.2204e-16
>> A=[2 3 6 -8 0 5 ]
A = 2 3 6 -8 0 5
>> abs(A)<eps
ans = 0 0 0 0 1 0
>>

En MATLAB los operadores relacionales pueden aplicarse a vectores y matrices,


y eso hace que tengan un significado especial. Por ejemplo, dada una matriz A la
comparacion abs(A)<eps genera una matriz de 0's y 1's con el mismo tamaño de
A. El elemento (i; j) de dicha matriz es 1 si |Aij| < eps, siendo eps el epsilon de la
maquina (=2.204e-16).
>> A=[-1 2 0; 0 -1 -3; 1 -1 0]
A=
-1 2 0
0 -1 -3
1 -1 0
>> B=abs(A)<eps
B=
0 0 1
1 0 0
0 0 1
>>

La sentencia any(abs(A)<eps) genera un vector de 0's y 1's; 0 si la


correspondiente columna es cero y 1 en caso contrario. Es decir, any responde
true si algún elemento no es cero y false si todos son cero.
>> any(B)
ans = 1 0 1
>>
Y la sentencia any(any(abs(A)<eps)) produce un 0 (i.e. false) si todos los
elementos de any(B) son cero y 1 (true) en caso contrario.
>> any(any(B))
ans = 1
>>
Así pues, la sentencia any(any(abs(A)<eps)) se puede utilizar como una
condición. Será verdadera si y solo si algún elemento de A es, en modulo, más
pequeño que eps. En caso contrario es falsa.
Hay un operador lógico similar: all. Responde true si todos los elementos del
vector son distintos de cero; en caso contrario, responde false. Con la matriz A
de más arriba:
>> all(A)
ans = 0 1 0
>>

03 programación en MatLab 2
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

En efecto, la _unica columna de A con todos sus elementos distintos de cero es


la segunda. Pero como ninguna columna de A tiene todos sus elementos
menores que eps:
>> all(abs(A)<eps)
ans = 0 0 0
>>

Vemos en estos ejemplos que al igual que en otros lenguajes de programación,


si una comparación se cumple el resultado es 1 (true), mientras que si no se
cumple es 0 (false). Recíprocamente, cualquier valor distinto de cero es
considerado como true y el cero equivale a false. Cuando los operadores
relacionales de MATLAB se aplican a dos matrices o vectores del mismo
tamaño, la comparación se realiza elemento a elemento, y el resultado es otra
matriz de unos y ceros del mismo tamaño, que recoge el resultado de cada
comparación entre elementos. Por ejemplo:

>> A=[1 2;0 3]; B=[4 2;1 5];


>> A==B
ans =
0 1
0 0
>> A~=B
ans =
1 0
1 1
>> A>2
ans =
0 0
0 1
>>
Para saber si dos matrices son iguales, se puede usar la expresión isequal(A,B)
>> isequal(A,B)
ans = 0
La expresión isequal(A,B) es equivalente a all(all(A==B)). Por otra parte, isequal
es una de las muchas funciones lógicas que empiezan por is. He aqui una
selección de ellas. Para obtener un listado completo escribe doc is tras el prompt
de MATLAB

03 programación en MatLab 3
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

ischar verdadero si la entrada es un vector de caracteres


isempty verdadero si la entrada es un vector vacio
isequal verdadero si los vectores son iguales
isfinite detecta los elementos finitos de un vector
isfloat verdadero si el vector es de elementos en coma flotante
isinf detecta los elementos infinitos de un vector
isinteger verdadero si el vector es de números enteros
isnan detecta los elementos que son NaN en un vector
isnumeric verdadero si el vector es de números (no de caracteres)
isprime detecta los números primos en un vector
isreal verdadero si todos los números del vector son reales
isvector verdadero si se trata de un vector

Algunos ejemplos adicionales con la matriz A de más arriba

>> A
A=
1 2
0 3
>> isfinite(A)
ans =
1 1
1 1
>> isnumeric(A)
ans = 1
>> isreal(A)
ans = 1
>> isvector(A)
ans = 0
>>

OPERADORES LÓGICOS
Nom Tecla Ejemplo
Operador Descripción
bre rápida
La conjunción Alt 38 >> (6<9 & 0==7-6)+~(5>=3 & 7~=8-1)
& y ans = 1
La disyunción Alt 124 >> (4|-8)+(6&0)+(~(7>9)|(5==-8))
| o inclusiva ans = 2

03 programación en MatLab 4
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

x =-3 1 0 -Inf 0
>> f=find(x)
f =1 2 4
Una primera aplicación es extraer de x los elementos no nulos:
>> x(f)
ans = -3 1 -Inf
Podemos extraer los elementos finitos
> x(find(isfinite(x)))
ans =
-3 1 0 0
o reemplazar las componentes negativas por cero:
>> x(find(x<0))=0
x=01000
Cuando find se aplica a una matriz se hace mirandola como un vector; es decir al
vector A(:) que se obtiene -recordemos- poniendo las columnas de A una debajo
de otra. Por ejemplo
>> A=[ 4 2 16; 12 4 3], B=[12 3 1; 10 -1 7]
A=
4 2 16
12 4 3
B=
12 3 1
10 -1 7
>> C=A<B
C=
110
001
>> C(:)
ans =
1
0
1
0
0
1
>> find(A<B)
ans =
1
3
6
Otro posible uso de find con matrices es [i,j]=find(A) que devuelve vectores i y j
con los índices de las filas y columnas de A distintos de cero, respectivamente.
Asi
>> [i,j]=find(A<B)
i=
1
1
2
j=
1

03 programación en MatLab 5
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

2
3
nos dice que en las posiciones (1; 1), (1; 2) y (2; 3) están los elementos de A que
son menores que los de B.

FUNCIONES LÓGICAS PREDEFINIDAS


Función Ejemplos
Equivalencia Descripción
Lógica
La conjunción >> and(4<8,16==9+7)
and(a,b) a Ùb ans = 1
La disyunción inclusiva >> or(4>8,33~=9+7)
a Úb ans = 1
or(a,b)
La negacion >> not(4>8 | 33~=9+7)
.not(a) ~a ans = 0
La disyunción exclusiva >> xor(4>8,33~=9+7)
xor(a,b) aVb ans = 1
Cuantificador universal >> all([4 5 7 9])
Si todos son no nulos el valor es 1. ans = 1
all(A) "A >> all([4 5 7 9 0])
ans = 0
Cuantificador particular >> any([4 5 7 9 0])
Si algún elemento es no nulo el ans = 1
valor es 1 >> any([0 0 0 0 0 0 0])
any(A) $A ans = 0
>> any([0 0 0 0 0 0 6])
ans = 1
>> find([7 6 0 -4;5 -1 3
0;0 2 9 0])
ans = 1
2
Busca los elementos no nulos, y los enumera, 4
find(A)
indicando el lugar donde se hallan 5
6
8
9
10
>> find([7 6 0 -4;5 -1 3
0;0 2 9 0]>5)
Busca los elementos mayores que el valor d, e ans =
find(A>d)
indica el lugar donde se encuentran. 1
4
9

Ejemplo de aplicación:
El vector:
T = [25 38 30 33 34 35 36 38 39 39 40 39 37 35 35 35 34 33 32 32 31 30 28 24]
Representa la temperatura en grados centígrados, por horas del dia 12 de Enero.
a) Indicar cuantas veces la temperatura fue mayor de 30 grados.
b) El número de horas que la temperatura estuvo entre 25 y 35 grados.
c) El número de horas que la temperatura no estuvo entre 20 y 30 grados.
∑𝑛 2
𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖
d) Hallar la temperatura promedio 𝑣 =
𝑛

e) Hallar la varianza, y desviación estándar de los datos, con:

03 programación en MatLab 6
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

∑𝑛 2
𝑖=1(𝑥𝑖 −𝑥̅ ) 𝑓𝑖
𝑣=
𝑛

Solución

a) Indicar cuantas veces la temperatura fue mayor de 30 grados.

>> T = [25 38 30 33 34 35 36 38 39 39 40 39 37 35 35 35 34 33 32 32 31 30 28 24]


T = Columns 1 through 14
25 38 30 33 34 35 36 38 39 39 40 39 37 35
Columns 15 through 24
35 35 34 33 32 32 31 30 28 24
>> T>30
ans = Columns 1 through 14
0 1 0 1 1 1 1 1 1 1 1 1 1 1
Columns 15 through 24
1 1 1 1 1 1 1 0 0 0
>> sum(T>30)
ans = 19
>> find(T>30)
ans = Columns 1 through 14
2 4 5 6 7 8 9 10 11 12 13 14 15 16
Columns 15 through 19
17 18 19 20 21
>>
Rpta: 30 veces, en las horas: 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17
18 19 20 21

b) El número de horas que la temperatura estuvo entre 25 y 35 grados.


>> T>25 & T<35
ans = Columns 1 through 14
0 0 1 1 1 0 0 0 0 0 0 0 0 0
Columns 15 through 24
0 0 1 1 1 1 1 1 1 0
>> sum(T>25 & T<35)
ans = 10
>> find(T>25 & T<35)
ans = 3 4 5 17 18 19 20 21 22 23
>>
Rpta: 10 veces, en las horas 3 4 5 17 18 19 20 21 22 23
c) El número de horas que la temperatura no estuvo entre 20 y 30 grados.

>> not(T>20 & T<30)


ans = Columns 1 through 14
0 1 1 1 1 1 1 1 1 1 1 1 1 1
Columns 15 through 24
1 1 1 1 1 1 1 1 0 0
>> find(not(T>20 & T<30))
ans = Columns 1 through 14
2 3 4 5 6 7 8 9 10 11 12 13 14 15
Columns 15 through 21
16 17 18 19 20 21 22
>> sum(not(T>20 & T<30))
ans = 21
>>

03 programación en MatLab 7
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Rpta: 21 veces en las horas: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16


17 18 19 20 21 22

PROGRAMACION EN MatLab

Para la estructura de programación en MATLAB se requiere conocer por lo


menos
los siguientes comandos:
END : Determina hasta cual orden llega el efecto de if, for, y while. (Para
ejemplos de su uso ver if, while y for)
IF: Verifica si se cumple cierta condición, y de acuerdo a si se cumple o no
realiza la acción que se desee.
WHILE: Realiza una parte del programa mientras se cumpla alguna condición.
FOR: Muy parecido al While, pero utiliza un contador, es útil si se quiere
repetir una parte del programa un número determinado de veces.
CLEAR: Borra todas las variables de la memoria. Es recomendable usarlo al
principio de todos los programas. (simplemente escriba clear; al comienzo del
programa)
PLOT: Sirve para obtener resultados gráficos en 2D.
DISP: Sirve para escribir texto de salida o vectores. de resultados.
INPUT: Se utiliza para que el programa pida valores de variables mientras se
ejecuta.

SENTENCIAS CONDICIONALES

Estructura para una sola alternativa


Sentencia Condicional: if – end
La forma más simple de una bifurcación del tipo if . . . end es la siguiente
if condición
Sentencias
end
Aquí se ejecuta un solo conjunto de instrucciones
Esquema lógico Estructura lógica
Pr ograma
......
en MatLab
IF exp. condicional

......üï
ïï Instrucciones
......ý
ï MatLab
......ïïïþ

END
Pr ograma
......
en MatLab

03 programación en MatLab 8
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Ejemplo: Dados dos números a y b, supuestamente diferentes entre si. Indicar el


mayor de ellos.
Solución:
Archivo: fmayorab.m Ejecución en MatLab
function mayor=fmayorab(a,b) >> mayor=fmayorab(5,7)
% fmayorab.m mayor =
7
% Devuelve el mayor de dos >> mayor=fmayorab(5,35/7)
números a,b mayor =
mayor=a; 5
if b>mayor >>
mayor=b;
end

Ejercicio: Crea una función que reciba cinco números naturales distintos entre sí y
devuelva la media geométrica del mayor y del menor. La media geométrica de a y
b se define como √𝑎 ∙ 𝑏.
Solución:
Archivo: fmayorab.m Ejecución en MatLab
function mayor=fmayorab(a,b) >> mayor=fmayorab(5,7)
% fmayorab.m mayor =
7
% Devuelve el mayor de dos >> mayor=fmayorab(5,35/7)
números a,b mayor =
mayor=a; 5
if b>mayor >>
mayor=b;
end

Ejemplo 01: Decidir si un numero entero positivo ingresado por la ventana de


comandos es múltiplo de 3 o de 5.
Solución

03 programación en MatLab 9
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo: multiplo35.m Ejecución en MatLab


% Programa que determina si un entero >> multiplo35
% positivo es múltiplo de 3 o de 5 Ingrese un entero positivo: sqrt(2)
n=input('Ingrese un entero positivo'); El numero no es entero positivo
if n~=round(n) | n<=0 >> multiplo35
disp('El numero no es entero Ingrese un entero positivo: -8
positivo') El numero no es entero positivo
break >> multiplo35
end Ingrese un entero positivo: 60
El numero es múltiplo de 3
if rem(n,3)==0 El numero es múltiplo de 5
disp('El numero es múltiplo de 3') >> multiplo35
end Ingrese un entero positivo: 57
if rem(n,5)==0 El numero es múltiplo de 3
disp('El numero es múltiplo de 5') >> multiplo35
end Ingrese un entero positivo: 56
if rem(n,3)~=0 & rem(n,5)~=0 El numero no es múltiplo de 3, ni de
disp('El numero no es múltiplo de 3, 5
ni de 5') >>
end

Ejemplo02: Un trabajador tiene una remuneración básica como vendedor de 1 200


nuevos soles, pero si las ventas en el mes son mayores a 50 000, tiene una
bonificación adicional del 1% sobre la diferencia. Indicar el salario para
diferentes casos de ventas.
Solución

Archivo: sueldo.m Ejecución en MatLab


>> sueldo
% programa que calcula el sueldo de una indique las ventas efectuadas en el
persona mes 30000
% en base al monto de las ventas indique el monto base de las ventas
% Si las ventas son menor o igual que un 25000
monto M, el sueldo es S indique el salario base
% si la ventas superan M, el sueldo es S 1200
mas El sueldo de cada trabajador es de:
% la diferencia de las ventas con M 1250.00 nuevos soles
V=input('indique las ventas efectuadas >> sueldo
en el mes\n'); indique las ventas efectuadas en el
M=input('indique el monto base de las mes 50000
ventas\n'); indique el monto base de las ventas
S=input('indique el salario base\n'); 60000
if (V>M) indique el salario base
S=S+0.01*(V-M); 1200
end El sueldo de cada trabajador es de:
fprintf('El sueldo de cada trabajador es 1200.00 nuevos soles
de: %6.2f nuevos soles\n',S); >>

Estructura para dos alternativas


Sentencia Condicional: if – else - end

03 programación en MatLab 10
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

En este caso la opción que se realiza en el caso que la sentencia sea verdadera es
la misma, pero en el caso de que sea falsa se realiza otra instrucción. Y luego el
programa continua.
Esquema lógico Estructura lógica
Pr ograma
......
en MatLab
IF exp. condicional
Bloque verdadero
ELSE
Bloque falso
END
Pr ograma
......
en MatLab

Ejemplo 03: Determinar si un numero entero positivo es par o impar


Archivo: multiplo35.m Ejecucion en MatLab
% Programa que determina si un entero >> paroimpar
positivo es Ingrese un entero positivo: 67
% par o impar El numero entero es impar
n=input('Ingrese un entero positivo: >> paroimpar
'); Ingrese un entero positivo: 34
if n~=round(n) | n<=0 El numero entero es par
disp('El numero no es entero >> paroimpar
positivo') Ingrese un entero positivo: sqrt(2)
break El numero no es entero positivo
end >> paroimpar
Ingrese un entero positivo: exp(log(5))
if rem(n,2)==0 El numero entero es impar
disp('El numero entero es par')
else
disp('El numero entero es impar')
end

Ejemplo 04: Se necesita calcular el volumen de agua en un tanque, con la forma


que se indica en el grafico

03 programación en MatLab 11
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Diametro 44 m

rh
16 m

h
29 m

Diametro 20 m
ìï 100p h 0 £ h £ 29
ï
SOLUCION: El volumen es igual V (h) = ïïí 4 æ3h 3
ö 4000p
ïï p çç - 47÷ ÷ - 29 < h £ 45
ïïî 3 çè 4 ÷
ø 3
Archivo: volumen.m
% programa que calcula el volumen de agua
% de un deposito cilíndrico-conico
% la entrada es el nivel del agua en m.
% La salida es el volumen de agua en m3.
h=input('indique el nivel del agua del tanque\n');
if (h<=29)
V=100*pi*h;
else
V=((4/3)*(((3*h/4)-47)^3))-(4000*pi/3);
end
fprintf('El volumen de es: %6.2f metros cubicos\n',V);
Ejecución en MatLab
>> volumen
indique el nivel del agua del tanque 20
El volumen de es: 6283.19 metros cubicos
>> volumen
indique el nivel del agua del tanque 25
El volumen de es: 7853.98 metros cubicos
>>

ìï x 0 £ x
Ejemplo 05: Hallando el valor absoluto de un numero. x = ïí
ïïî - x x < 0
Archivo: valorabs.m Ejecución en MatLab
function y=valorabs(x) >> valorabs(88)
% esta funcion calcula el valor absoluto ans = 88
% de un numero real x >> valorabs(-45)
% donde el resultado es x, si es no ans = 45
negativo >> valorabs(0)
% y es -x si es negativo ans = 0
if (x>=0) >>
y=x;
else
y=-x;
end

Estructura con multiples alternativas


SENTENCIA CONDICIONAL: IF – ELSEIF – ELSEIF - …. .ELSE - END
Aquí la ventaja es que se pueden ejecutar tres o más grupos de instrucciones en forma disyuntiva,
es decir en forma independiente.
if condicion1
bloque1
03 programación en MatLab 12
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

elseif condicion2
bloque2
elseif condicion3
bloque3
else % opción por defecto, cuando no se cumplan las condiciones 1,2,3
bloque4
end
Donde la opción por defecto else puede ser omitida: si no está presente no se hace
nada en caso de que no se cumpla ninguna de las condiciones que se han
chequeado.
Esquema lógico Estructura Lógica
Diagrama de flujo ......Pr ograma en MatLab
if exp. condicional
......ïüïý Instrucciones
Falso
Sentencia ......ïïþ 01 MatLab
if
elseif exp. condicional
Verdadero
Falso
Sentencia ......ïüïý Instrucciones
Grupo 1 de
elseif
Instrucciones ......ïïþ 02 MatLab
Verdadero else
Grupo 3 de Grupo 2 de
......ü ïï Instrucciones
ý
Instrucciones Instrucciones ......ïïþ 03 MatLab
end
end ......Pr ograma en MatLab

Ejemplo: Determinar si un numero entero positivo es par o impar, con un enfoque: : if –


elseif – else - end

03 programación en MatLab 13
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo: paroimpar.m Ejecución en MatLab


% Programa que determina si un
entero positivo es >> paroimpar
Ingrese un entero positivo: 45
% par o impar El numero entero es impar
n=input('Ingrese un entero >> paroimpar
positivo: '); Ingrese un entero positivo: -78
if n~=round(n) | n<=0 El numero no es entero positivo
disp('El numero no es entero >> paroimpar
positivo') Ingrese un entero positivo: sqrt(2)
El numero no es entero positivo
break >> paroimpar
elseif rem(n,2)==0 Ingrese un entero positivo: 44
disp('El numero entero es El numero entero es par
par') >>
else
disp('El numero entero es
impar')
end

Ejemplo: Graficar la función


𝑥 2 + 6𝑥 − 8, −15 ≤ 𝑥 < 0
𝑓𝑝𝑎𝑟𝑡𝑒𝑠(𝑥) = { 2𝑥 + 6, 0≤𝑥<5
4 − 𝑎𝑏𝑠(𝑥 − 10), 5 ≤ 𝑥 ≤ 15
Archivo de función: fpartes.m Programa: grafico.m
function y=fpartes(x); x=-15:0.01:15;
% funcion defenida por partes y=fpartes(x);
n=length(x); plot(x,y)
y=[]; grid
for i=1:n;
if -15<=x(i) & x(i)<0-eps
y(i)=x(i).^2+12*x(i)-18; Ejecución en MatLab
elseif 0<=x(i) & x(i)<5-eps >> grafico
y(i)=2*x(i)+16; >>
elseif 5<=x(i) & x(i)<=15
y(i)=4-3*abs(x(i)-10);
else
y(i)=0;
end
end

30

20

10

-10

-20

-30

-40

-50

-60
-15 -10 -5 0 5 10 15

03 programación en MatLab 14
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

ESTRUCTURA DE MULTILE SELECCION


Sentencia: switch-case
Es otra estructura para el control de flujo de un programa. Esta sentencia proporciona un
mecanismo para escoger y ejecutar un grupo de instrucciones de entre varios grupos posibles.
Estructura lógica

......Pr ograma en MatLab


switch exp resion
case valor 1
……..grupo 1 de instrucciones
case valor 2
…… grupo 2 de instrucciones
case valor 3
……. Grupo 3 de instrucciones
otherwise
…… grupo 4 de instrucciones
end
......Pr ograma en MatLab

¿Cómo funciona la sentencia switch-case?


El valor de la expresión del switch se compara con los valores de cada comando
case. Si se encuentra una coincidencia, entonces se ejecutan las instrucciones que
siguen a dicho comando case (solo un grupo de instrucciones).
Si hay más de una coincidencia, solo se atenderá a la primera que se encuentra.
Si no se encuentran coincidencias se ejecutan las instrucciones que siguen al
comando otherwise, si este ha sido declarado (es opcional).
Si no se encuentran coincidencias y no está declarado el comando otherwise,
entonces no se ejecutara ninguna instrucción o grupo de instrucciones.
Una sentencia case puede tener más de un valor con el que establecer
coincidencias. Para declararlos solo es necesario ponerlos a continuación, uno
detrás del otro, entre llaves y separados por comas, de la forma: {valor1, valor2,
valor3, . . . }. En este caso al tener más de un valor, el grupo de instrucciones
correspondientes al case se ejecutara siempre que al menos haya coincidencia con
alguno de los valores indicados.

Ejemplo: Decidir de un conjunto de notas de 0 a 20, en forma de un vector, y luego


indicar:
a) cuantas están entre 0 y 10 inclusive.
b) Cuantas están entre 11 y 13 inclusive.
c) Cuantas están entre 14 y 17 inclusive.
d) Cuantas están entre 18 y 20 inclusive.

03 programación en MatLab 15
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo: notalumno.m Ejecución en MatLab


function notalumno(x) >> notalumno(5)
% Programa que discrimina notas: Desaprobado
% Dado las notas en forma de vector >> notalumno(15)
%cuantas están entre 0 y 10 inclusive. Bueno
%Cuantas están entre 11 y 13 inclusive. >> notalumno(sqrt(2))
%Cuantas están entre 14 y 17 inclusive. Compre un cerebro
%Cuantas están entre 18 y 20 inclusive. >> notalumno(-pi)
Compre un cerebro
switch x >> notalumno(20)
case {0,1,2,3,4,5,6,7,8,9,10} Excelente
disp('Desaprobado') >>
case {11,12,13}
disp('Regular')
case {14,15,16,17}
disp('Bueno')
case {18,19,20}
disp('Excelente')
otherwise
disp('Compre un cerebro')
end

Ejemplo: Escribir un programa para convertir una expresión de longitud, que puede estar en m,
dm, cm, mm, dam, hm, km, pulgada, pie, yarda. En otro número equivalente en otra unidad
indicada por el usuario.
SOLUCION:
Por cuestiones del espacio en la hoja, primero presentaremos la ejecución y luego el programa.
Ejecución en MatLab
>> cambiounidad
Introduzca el valor de la distancia que hay que convertir: 3777
Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam, hm, km): dm
Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam, hm, km): km
V=0.3777km
>> cambiounidad
Introduzca el valor de la distancia que hay que convertir: 6799
Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam, hm, km): ham
Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam, hm, km): m
Horror, La unidad de entrada o la de conversión se ha tecleado en forma incorrecta\n
>> cambiounidad
Introduzca el valor de la distancia que hay que convertir: 98888888
Introduzca la unidad actual de la distancia (m, cm, dm, mm, dam, hm, km): mm
Introduzca la nueva unidad para la distancia (m, cm, dm, mm, dam, hm, km): km
V=98.8889km
>>

Programa en MatLab

03 programación en MatLab 16
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo: cambiounidad.m
Vent=input('Introduzca el valor de la distancia que
hay que convertir:\n');
UnitEnt=input('Introduzca la unidad actual de la
distancia (m, cm, dm, mm, dam, hm, km):\n','s');
UnitSal=input('Introduzca la nueva unidad para la
distancia (m, cm, dm, mm, dam, hm, km):\n','s');
error=0;
switch UnitEnt
case 'm'
Vi=Vent;
case 'cm'
Vi=Vent/100;
case 'dm'
Vi=Vent/10;
case 'mm'
Vi=Vent/1000;
case 'dam'
Vi=Vent*10;
case 'hm'
Vi=Vent*100;
case 'km'
Vi=Vent*1000;
otherwise
error=1;
end
switch UnitSal
case 'm'
Vf=Vi;
case 'cm'
Vf=100*Vi;
case 'dm'
Vf=10*Vi;
case 'mm'
Vf=1000*Vi;
case 'dam'
Vf=Vi/10;
case 'hm'
Vf=Vi/100;
case 'km'
Vf=Vi/1000;
otherwise
error=1;
end
if error==1
disp('Horror, La unidad de entrada o la de
conversión se ha tecleado en forma incorrecta\n')
else
fprintf('V=%g%s\n',Vf,UnitSal)
end

Ejemplo05: Elabore un programa que pida la edad de una persona, y visualice lo siguiente
Si 0 £ edad < 6 , mostrar: infante
Si 6 £ edad < 12 , mostrar: niño
Si 12 £ edad < 18 , mostrar: adolescente
Si 18 £ edad < 25 , mostrar: joven
Si 25 £ edad < 60 , mostrar: adulto
Si 60 £ edad , mostrar: anciano
Solución:

Programa en MatLab: edad.m

03 programación en MatLab 17
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo: multilo5.m Ejecución en MatLab


%Etapas de un ser humano
%Uso del comando menu
Edad=menu('Indique su
edad:','0<=E<6','6<=E<12','12<=E<
18','18<=E<25','25<=E<60','60<=E'
);
switch Edad
case 1
disp('Infante')
case 2
disp('Niño')
case 3
disp('Adolescente')
case 4
disp('Joven')
case 5
disp('Adulto')
case 6
disp('Anciano')
end

Ejemplo: Ingrese un entero y clasifíquelo como un múltiplo de 5 mas algún residuo.


Solución:
Programa en MatLab: multiplo5.m
Archivo: multilo5.m Ejecución en MatLab
% programa que permite clasificar si un >> multiplo5
entero es múltiplo de 5 o no Ingrese un numero entero:
n=input('Ingrese un numero entero:\n'); 56
r=mod(n,5); Es múltiplo de 5 más 1
switch r >> multiplo5
case 0 Ingrese un numero entero:
disp('Es múltiplo de 5') -56
case 1 Es múltiplo de 5 más 4
disp('Es múltiplo de 5 más 1') >> multiplo5
case 2 Ingrese un numero entero:
disp('Es múltiplo de 5 más 2') sqrt(56)
case 3 No es entero
disp('Es múltiplo de 5 más 3') >>
case 4
disp('Es múltiplo de 5 más 4')
otherwise
disp('No es entero')
end

03 programación en MatLab 18
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

BUCLES o ITERACIONES

Los bucles o iteraciones se usan para controlar el flujo de un programa. En un


bucle, la ejecución de uno o varios comandos se repite varias veces
consecutivamente. Cada una de estas repeticiones se denomina paso o iteración.
En MatLab tenemos definido dos tipos de bucle:

Bucle for-end: el numero de iteraciones se define al comienzo del bucle.

Bucle while-end: El numero de iteraciones no se conoce al inicio del bucle,


depende de que se cumpla o no alguna condición.

En ambos casos se puede salir de estos bucles, antes de que acaben con el
comando breack.

BUCLES DEL TIPO FOR-END


Estructura Lógica
for k = f : s :t
k: variable índice del bucle
…….comandos
f: valor inicial de k
…….en MatLab s: incremento del valor k, por defecto 1
end t: valor límite de la variable k

Ejemplo: Sumar los 50 primeros números enteros positivos múltiplos de 7.


Solución:
SOLUCION:
Programa: sumnat.m Ejecución en MatLab
function s=sumnat(n) >> sumnat(3)
% esta función suma de ans = 6
% los n primeros números naturales >> sumnat(0)
% el resultado es la suma de tales ans = 0
números >> sumnat(-6)
s=0; ans = 0
for k=1:1:n >> sumnat(6)
s=s+k ans = 21
end >>

Ejemplo 02: Usando el bucle for - end, hallar la raíz cuadrada de los primeros 20
números, y presentarlos en una tabla de 20 por 2.

% Calculo de la raiz cuadrada de los n primeros enteros positivos


% usando el comando for-end
n=input('ingrese la cantidad de terminos: ');
u=[1:n]';
v=ones(n,1);
for k=1:1:n;
v(k)=sqrt(u(k));
end
disp('')
03 programación en MatLab 19
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

disp('numero raiz cuadrada')


for k=1:n;
fprintf('%5.0i %5.4f\n',u(k),v(k))
end

Ejemplo 05: En los meses de Enero a Diciembre del 2012, se registro un promedio de
lluvia mensual :
286 253 254 305 274 203 165 190 161 228 224 280
Hallar el valor promedio en el año
El numero de meses en que la temperatura estuvo debajo de la media, y en qué meses se
dio.

clear
lluvia=[286 253 254 305 274 203 165 190 161
228 224 280];
n=length(lluvia);
prom=sum(lluvia)/n;
D=zeros(1,n);
for k=1:n
D(k)=lluvia(k)>prom;
end
D

Por ejemplo, para sumar los 25 primeros términos de la serie 1/n:

Programa: programa6.m Ejecución en MatLab


% sumando los términos de la >> programa6
serie 1/n Ingrese la cantidad de términos a sumar:
55
n=input('Ingrese la cantidad la suma es:
de términos a sumar: \n'); 4.5936
s=0; >>
for i=1:n
s=s+1/i;
end
disp('la suma es:')
disp(s)

Otra forma de definir una expresión es usando notación vectorial:


Programa: prog05.m Ejecución en MatLab
disp([' Grados S.',' Radianes',' >> prog05
Seno(x)']) Grados S. Radianes Seno(x)
for x=[pi/8 pi/6 pi/4 pi/3 pi/2 pi] 22.5000 0.3927 0.3827
disp([x*180/pi,x, sin(x)]) 30.0000 0.5236 0.5000
end 45.0000 0.7854 0.7071
60.0000 1.0472 0.8660
90.0000 1.5708 1.0000
180.0000 3.1416 0.0000
>>

(−1)𝑘 𝑘
Ejemplo: Calcular la suma de términos de la siguiente serie: ∑𝑛
𝑘=1 2𝑘
SOLUCION:

03 programación en MatLab 20
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Programa: sumserie.m Ejecución en MatLab


% este programa calcula la suma de >> sumserie
términos ingrese el numero de términos de la
% de la serie: serie: 5
% Sum(k=1:n)((-1)^k)*k/(2^k)) la suma de los términos de la serie es: -
% la función suma 0.2813
% los n primeros números naturales >> sumserie
% el resultado es la suma de tales ingrese el numero de términos de la
números serie: 99
la suma de los términos de la serie es: -
n=input('ingrese el numero de 0.2222
términos de la serie: \n'); >> sumserie
s=0; ingrese el numero de términos de la
for k=1:1:n serie: 5
s=s+((-1)^k)*k)/(2^k); la suma de los términos de la serie es:
end 1.7813
fprintf('la suma de los términos de >>
la serie es: %5.4f \n',s)

Ejemplo: La función seno se puede aproximar usando la serie de Taylor. Como


𝑛 (−1)𝑘 𝑥 2𝑘+1
sigue: 𝑠𝑒𝑛(𝑥 ) = ∑𝑘=1 , donde x esta en radianes
(2𝑘+1)!
SOLUCION:
Programa: senserie.m Ejecución en MatLab
% este programa calcula el seno de x, >> senserie
donde x esta en radianes ingrese el valor del ángulo en
% mediante la serie de Taylor % con n grados sexagesimales: 190
términos, en la serie ingrese el numero de términos a
% las variables de entrada son x en considerar: 3
grados sexagesimales El seno aproximado es: 0.5801
% y n que es el numero de términos >> senserie
% La salida es el valor aproximado del ingrese el valor del ángulo en
seno grados sexagesimales: 150
x=input('ingrese el valor del ángulo en ingrese el numero de términos a
grados sexagesimales: \n'); considerar: 7
n=input('ingrese el numero de términos El seno aproximado es: 0.5000
a considerar: \n'); >>
s=0;xr=x*pi/180;
for k=0:1:n-1
s=s+((-
1)^k)*(xr^(2*k+1))/factorial(2*k+1);
end
fprintf('El seno aproximado es: %5.4f
\n',s)

Puede comprobar para x = 1, en sexagesimales seria 180/pi.


k
1 1 1 1 (- 1)
sen(1) = - + - + ..... + + ....
1! 3! 5! 7! (2k + 1)!
Ejemplo: Ahora vamos a considerar el problema de cambiar los elementos de un
vector bajo ciertas condiciones.
El programa multiplica por tres los elementos del vector que sean positivos, y
múltiplos de 3 ó 5; y eleva al cuadrado los negativos mayores que -10.
SOLUCION:

03 programación en MatLab 21
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Archivo: cambiavector.m
% Este programa cambia los elementos de un vector.
% triplica los elementos positivos, y múltiplos de 3 ó 5
% eleva al cuadrado los negativos mayores que -10.
x=input('Ingrese un vector con elementos enteros: \n');
n=length(x);
for k=1:1:n
if x(k)>0 & ( rem(x(k),3)==0 | rem(x(k),5)==0 )
x(k)=3*x(k);
elseif x(k)<0 & x(k)>-10
x(k)=x(k)^2;
end
end
disp(x)

Ejecucion en MatLab
>> prog07
Ingrese un vector con elementos enteros:
[6 8 14 72 96 6 8 -2 0 66 -30 24]
18 8 14 216 288 18 8 4 0 198 -30 72
>>

Ejemplo: Crear una matriz de orden m por n, donde el elemento i j este dado por la expresión:
ai j = 3i - 4 j
SOLUCION:

03 programación en MatLab 22
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Programa: creamatriz.m
% Creacion de una matriz de orden mxn
% Donde el elemento i j esta dado por
% a(i,j)=3i-4j
m=input('ingrese el numero de filas de la matriz ');
n=input('ingrese el numero de columnas de la matriz ');
A=zeros(m,n);
for k=1:1:m
for l=1:1:n
A(k,l)=3*k-4*l;
end
end
A
Ejecucion en MatLab
>> creamatriz
ingrese el numero de filas de la matriz 4
ingrese el numero de columnas de la matriz 5
A=
-1 -5 -9 -13 -17
2 -2 -6 -10 -14
5 1 -3 -7 -11
8 4 0 -4 -8
>> creamatriz
ingrese el numero de filas de la matriz 5
ingrese el numero de columnas de la matriz 8
A=
-1 -5 -9 -13 -17 -21 -25 -29
2 -2 -6 -10 -14 -18 -22 -26
5 1 -3 -7 -11 -15 -19 -23
8 4 0 -4 -8 -12 -16 -20
11 7 3 -1 -5 -9 -13 -17
>> creamatriz
ingrese el numero de filas de la matriz 0
ingrese el numero de columnas de la matriz 0
A = []

Ejemplo: Construya una matriz de orden mxn, donde se tenga que


a(i,j)=3*i+j, si i>j; a(i,j)=-2*i+3*j+1, si i<j ; a(i,i)=i^2, si i=j
Programa: senserie.m Ejecución en MatLab
% construyendo una matriz de orden mxn, >> matriz01
% a(i,j)=3*i+j, si i>j Ingrese el numero de filas de la
% a(i,j)=-2*i+3*j+1, si i<j matriz:
% a(i,i)=i^2 3
m=input('Ingrese el numero de filas de Ingrese el numero de columnas de
la matriz:\n'); la matriz:
n=input('Ingrese el numero de columnas 5
de la matriz:\n'); 1 5 8 11 14
A=zeros(m,n); 7 4 6 9 12
for i=1:m 10 11 9 7 10
for j=1:n >> matriz01
if i<j Ingrese el numero de filas de la
A(i,j)=-2*i+3*j+1; matriz:
elseif i>j 7
A(i,j)=3*i+j; Ingrese el numero de columnas de
else la matriz:
A(i,j)=i*j; 6
end 1 5 8 11 14 17
end 7 4 6 9 12 15
end …………………………..
disp(A) 22 23 24 25 26 27
>>

Ejemplo: Construya el triangulo de Pascal como una matriz de orden n por n.


Donde el elemento a(1,j)=a(i,1)=1; a(i,j)= a(i,j-1)+a(i-1,j) para todo i>1, j>1.
SOLUCION:

03 programación en MatLab 23
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Programa: matrizpascal.m
% Programa que construya el triangulo de Pascal
% como una matriz de orden n por n.
% Donde el elemento a(1,j)=a(i,1)=1
% a(i,j)= a(i,j-1)+a(i-1,j)
% para todo i>1, j>1.
n=input('Ingrese el orden de la matriz: \n');
A=ones(n,n);
for k=2:1:n
for l=2:1:n
A(k,l)=A(k,l-1)+A(k-1,l);
end
end
disp(A)

Ejecucion en MatLab
>> matrizpascal
Ingrese el orden de la matriz:
5
1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20 35
1 5 15 35 70
>>

Ejemplo09: Hallar los términos de la sucesión de Fibonacci hasta el término n, teniendo en cuenta
que: t(1)=1, t(2)=1, t(i)=t(i-1)+t(i-2), en todo i=desde 3 hasta n
Solución:
Programa en MatLab: progfibo.m Ejecución en MatLab
% Cálculo de los términos de la >> progfibo
sucesión de Fibonacci: Ingrese la cantidad de términos a
% F(1)=1, F(2)=1, F(n+2)=F(n+1)+F(n), mostrar:
n entero positivo 9
n=input('Ingrese la cantidad de 1 1 2 3 5 8 13 21
términos a mostrar: \n'); 34
F=zeros(n,1); >> progfibo
F(1)=1; Ingrese la cantidad de términos a
F(2)=1; mostrar:
if n==1 | n==2 -9
disp(F') El valor de n, no es el adecuado
elseif n>2 >>
for k=1:n-2
F(k+2)=F(k+1)+F(k);
end
disp(F')
else
disp('El valor de n, no es el
adecuado')
end

03 programación en MatLab 24
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

BUCLES DEL TIPO WHILE - END

Este tipo de bucle se usa cuando hay necesidad de un proceso iterativo, pero se
desconoce cuantos pasos deben hacerse, generalmente está sujeto a condiciones
que se hallan al ejecutar la solución del `problema.
En algún caso será necesario del uso de algún comando que pare el programa en
caso de que no se halle la condición pedida.

Estructura lógica

while exp resion _ condicional


…………..instrucciones
………..de MatLab
end

Donde la expresión condicional puede ser una expresión vectorial o matricial. Las
sentencias se siguen ejecutando mientras haya elementos distintos de cero en condición;
es decir, mientras haya algún o algunos elementos true. El bucle se termina cuando todos
los elementos de condición son false (es decir, cero).

Recomendaciones:
La expresión condicional del comando while debe incluir al menos una variable
Respecto a esta variable debe tener un valor asignado cuando se ejecute el
comando while por primera vez
La o las variables de la expresión condicional deben cambiar entre la sentencia
while y end, de otro modo se tendría un bucle infinito
Para evitar un bucle infinito se puede usar el comando break
Un bucle infinito también se puede terminar con “Ctrl + C” o “Ctrl +
break”

Ejemplo: En el siguiente ejemplo se ejecutan una serie de operaciones sobre un cierto


número n mientras este se mantenga mayor que 1. Concretamente, si n es par se divide
por 2 y si es impar se multiplica por 3 y se le suma 1:
¿Crees que este proceso tiene fin cualquiera que sea el valor de n? (Conjetura de Collatz,
misterio de Siracusa, problema de Kakutani, algoritmo de Hasse o problema de Ulam).

03 programación en MatLab 25
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Programa en MatLab: algoritmohasse.m Ejecución en MatLab


function algoritmohasse(n) >> algoritmohasse(19)
disp(n) 19 58 29 88 44 22
11 34 17 52 26 13
while n>1 40 20 10 5 16 8
if rem(n,2)==0 4 2 1
n=n/2; >>
disp(n)
else
n=3*n+1;
disp(n)
end;
end;

Ejemplo: A una variable x se le incrementa su valor inicial en 7, mientras que esta


sea menor de 200.
SOLUCION:
Programa: incrementador.m
% Este programa incrementa un número inicial en 7,
% mientras este sea menor que 200
x=input('Ingrese un numero: \n');
n=0;
while x<200;
x=x+7;
n=n+1;
end
fprintf('El nuevo valor es: %-3.2i \n',x)
fprintf('Se ha incrementado %-3i veces el siete\n',n)
Ejecucion en MatLab
>> incrementador
Ingrese un numero: 45
El nuevo valor es: 206
Se ha incrementado 23 veces el siete
>> incrementador
Ingrese un numero: 234
El nuevo valor es: 234
Se ha incrementado 0 veces el siete
>>

Ejemplo: Elaborar un programa que divida en tres partes un intervalo, y tome la


parte intermedia hasta que la longitud sea menor que 0.001
SOLUCION:

03 programación en MatLab 26
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Programa: trisecaintervalo.m
% Este programa divide en tres partes un intervalo
% y toma la parte intermedia, hasta que la longitud sea
menor que 0.001
a=input('Ingrese el lado izquierdo del intervalo: \n');
b=input('Ingrese el lado derecho del intervalo: \n');
if b-a > 0.001
while b-a>0.001;
a=(b+2*a)/3;
b=(a+b)/2;
end
fprintf('El lado izquierdo del nuevo intervalo es: %-3.5f
\n',a)
fprintf('El lado derecho del nuevo intervalo es: %-
3.5f\n',b)
else
fprintf('Los datos no generan un intervalo valido. &$####
\n')
end
Ejecucion en MatLab
>> trisecaintervalo
Ingrese el lado izquierdo del intervalo: 1
Ingrese el lado derecho del intervalo: 4
El lado izquierdo del nuevo intervalo es: 2.49977
El lado derecho del nuevo intervalo es: 2.50023
>> trisecaintervalo
Ingrese el lado izquierdo del intervalo: 5
Ingrese el lado derecho del intervalo: 2
Los datos no generan un intervalo valido. &$####
>>

Ejemplo: La función exponencial al ser expresada como una serie de Taylor,


queda como sigue:
¥
xn x 2 x3 x 4 x5
ex = å
n= 0 n!
= 1+ x + + + +
2! 3! 4! 5!
+L

Hallar el valor de e x , con los sumandos necesarios hasta que el ultimo sumando
sea menor que 0.000001. Además la suma no debe pasar de 30 términos, si fuese
el caso hay que indicar que se necesitan más sumandos.
Hallar con este programa: e 2 , e- 4 , e10 y e 20
SOLUCION:

03 programación en MatLab 27
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Programa: seriexp.m
% Este programa calcula el valor de e^x con la Serie de
Taylor
% hasta que el ultimo termino sea menor que 0.00000l,
% o haya 30 términos como máximo

x=input('Ingrese el valor de x: \n');


n=1;sn=1;s=sn;
while sn>0.000001 & n<30

s=s+(x^n)/factorial(n);
n=n+1;
sn=abs((x^n)/factorial(n));
end
if n>=30
fprintf('Se necesitan mas de 30 terminos \n')
else
fprintf('El valor de exp(%f) es %-3.5f\n',x,s)
end
Ejecucion del programa
>> seriexp
Ingrese el valor de x: 2
El valor de exp(2.000000) es 7.38906
>> seriexp
Ingrese el valor de x: 21
Se necesitan mas de 30 terminos
>> seriexp
Ingrese el valor de x: 0
El valor de exp(0.000000) es 1.00000
>> seriexp
Ingrese el valor de x: 8
Se necesitan mas de 30 terminos
>> seriexp
Ingrese el valor de x: 5
El valor de exp(5.000000) es 148.41316
>>

LOS COMANDOS BREAK Y CONTINUE

El comando break se usa principalmente para terminar un posible bucle infinito; si esta dentro de
un bucle, pero si esta en un programa normal, termina el programa.

El comando “continue” lo que hace es terminar la iteración de un bucle y pasar a la siguiente


iteración.

03 programación en MatLab 28
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

7. PROGRAMACION EN MATLAB
PROBLEMAS PROPUESTOS
1. Calcule las siguientes expresiones a mano, sin utilizar MATLAB . Utilice luego
MATLAB para comprobar que el resultado es correcto.
a) 5  8 3
b) y = 7  3  1 6  2
c) y = (7  3)  1  (6 2)
20
d) y  2 x 4  5 - 7
4

2. Sean a = 10 y b = 6. Calcule las siguientes expresiones a mano, sin utilizar


MATLAB. Utilice luego MATLAB para comprobar que el resultado es correcto.
a) y  a  b  b
b
b) y  a  b 
2
 b
c) y  a   b  
 2
3. Sean v   4  2 1 5 0 1  3 8 2 y w  0 2 1 -1 0 -2 4 3 2 . Calcule las
siguientes expresiones a mano sin utilizar MATLAB. Utilice luego MATLAB para
comprobar que el resultado es correcto.
a) v  w
b) w v

4. A partir de los vectores v y w del ejercicio anterior, utilice operadores


relacionados para crear un vector compuesto por los elementos de w que sean
mayores que los elementos de v

5. Calcule las siguientes expresiones a mano, sin utilizar MATLAB .Utilice luego
MATLAB para comprobar que le resultado es correcto
a) 5&-2
b) 8  216  5& 2
c)  4&0  8  410

6. La temperatura máxima 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 Nacional de Meteorología y Oceanografía de Estados Unidos).
TNY = 31 26 30 33 33 39 41 41 34 33 45 42 36 39
37 45 43 36 41 37 32 32 35 42 38 33 40 37 36 51 50
TANC = 37 24 28 25 21 28 46 37 36 20 24 31 34 40
43 36 34 41 42 35 38 36 35 33 42 42 37 26 20 25 31
Escriba un programa script que calcule:
a) La temperatura media en ese mes para cada ciudad.
03 programación en MatLab 29
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

b) El número de días que estuvo la temperatura de cada ciudad por debajo de la


media.
c) El número de días, y a qué días del mes corresponden, en los cuales la
temperatura de Anchorage fue mayor que la temperatura de Nueva York.
d) El número de días, y a qué días del mes corresponden, en los cuales la
temperatura fue igual en ambas ciudades.
e) El número de días, y a qué días del mes corresponden, en los cuales la
temperatura de ambas ciudades se mantuvo por encima de 32°F (sin helar).

7. Represente la siguiente función de dos formas distintas:


 4e x  2 6  x  2

f ( x)   x 2
2  x  2,5
( x  6,5)1/3 2,5  x  6

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

8. Escriba un programa script que calcule las raíces reales de una función cuadrática
ax  bx  c  0 . Llame al fichero raicescuad . Cuando el fichero se ejecute, éste debe
2

pedir al usuario que introduzca los valores de las constantes a, b y c . Para calcular las
raíces de la ecuación , el programa calculará el discriminante D :
D=b 2  4ac
Si D 0, el programa visualizará un mensaje del tipo: “La ecuación tiene dos raíces”, y los
valores de las raíces se visualizarán en la línea siguiente.
Si D =0, el programa visualizará un mensaje del tipo: “La ecuación tiene una raíz”, y el
valor de la raíz se visualizará en la línea siguiente.
Si D 0, el programa visualizará un mensaje del tipo: “La ecuación no tiene raíces reales”.
Ejecute el fichero script en la Ventana de Comandos tres veces para calcular las
soluciones de las siguientes ecuaciones:
a) 2 x2  8x  3  0
b) 15 x 2  10 x  5  0
c) 18 x 2  12 x  2  0

9. Utilice bucles para crear una matriz A de dimensión 4 x 7, en la cual el valor de


cada elemento sea la suma de sus índices (el número de la fila y el número de la
columna de cada elemento). Por ejemplo, el valor del elemento A (2,5) será 7.

10. Utilice bucles y sentencias condicionales para crear una matriz de dimensión 5 x
8, en la cual el valor de cada elemento sea igual a la raíz cuadrada de la suma de los
índices de cada elemento, siempre que el elemento no se encuentre en una columna o
fila par. El valor de un elemento que éste en una fila o columna par será igual a la suma
del cuadrado de los índices. (Los índices de un elemento de una matriz son el número
de fila y el número de columna que le corresponden.)

03 programación en MatLab 30
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

11. Escriba un programa (utilizando un bucle) que calcule la suma de los m primeros
términos de la serie:
m
1
 (1)
n 0
n

2n  1
(n  0,1, 2,..., m)

Esta serie se denomina se denomina serie de Leibniz, y converge a  / 4 . Ejecute el


programa para m  10 y m  500 . Compare posteriormente estos resultados con el
valor exacto  / 4 .

12. Sea el vector x  15 -6 0 8 -2 5 4 -10 0,5 3 . Escriba un programa que utilice
sentencias condicionales y bucles para calcular la suma de los elementos positivos del
vector x .

13. Escriba un programa script que encuentre el menor número entero impar que sea
divisible por 3, y cuyo cubo sea mayor que 4000. Utilice un bucle que comience en 1 y se
detenga cuando encuentre el número que cumpla las condiciones anteriores. Finalmente
el programa visualizará el mensaje: “El número pedido es: ” , y visualizará
seguidamente el número calculado.

14. Escriba una función que ordene los elementos de un vector de cualquier longitud,
de mayor a menor. Utilice la siguiente línea de definición de función: y = ordenar (x) . La
entrada de la función será un vector x de cualquier longitud, y la salida y será un vector
que contendrá los elementos de x en orden descendente. No se puede utilizar la función
predefinida de MATLAB sort para este ejercicio. Cree su propia función y pruébela con
un vector de 14 elementos (enteros) generados aleatoriamente y distribuidos entre -30 y
30. Utilice la función rand de MATLAB para generar el vector inicial.

15. Escriba una función que ordene los elementos de una matriz. Utilice la siguiente
línea de definición de función: B = ordenarmatriz (A) , donde A será una matriz de
cualquier tamaño, y B será otra matriz del mismo tamaño con los elementos de A
ordenados de forma ascendente, fila por fila. De esta forma, los elementos B (1,1) y B (
m, n ) serán, respectivamente, los elementos menor y mayor de la matriz ordenada.
Pruebe posteriormente está función en una matriz de dimensión 4 x 7, con los números
enteros generados aleatoriamente y distribuidos entre -30 y 30. Utilice la función rand
de MATLAB para generar la matriz inicial.

16. Escriba un programa (fichero script) que calcule el coste de enviar un paquete en
función de la siguiente tabla de precios:

Tipo de Peso Peso (2 – 10 libras) Peso (10 – 50 libras)


servicio (0 – 2
libras)

03 programación en MatLab 31
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

Tierra 1,50 € 1,50 € + 0,50 € 5,50 € + 0,30 €


adicionales por cada adicionales por cada
libra o fracción de libra, libra o fracción de libra,
a partir de las 2 libras a partir de las 10 libras
de peso. de peso.

Aire 3,00€ 3,00 € + 0,50 € 10,20 € + 0,60 €


adicionales por cada adicionales por cada
libra o fracción de libra, libra o fracción de libra,
a partir de las 2 libras a partir de las 10 libras
de peso. de peso.

Nocturno 18 € 18 € + 6 € adicionales por No se realizarán entregas


cada libra o fracción de para paquetes que
libra, a partir de las 10 pesen más de 10 libras.
libras de peso-

El programa debe pedir al usuario que introduzca el peso y el tipo de servicio.


Seguidamente, el programa visualizará el coste del servicio. Si se introduce un paquete
que pese más de 50 libras para un servicio de aire o tierra, el programa visualizará un
mensaje del tipo: “No se realiza reparto por aire o tierra para paquetes con peso superior
a las 50 libras”. Si se introduce el peso de un paquete que supera las 10 libras de peso
para un servicio nocturno, el programa visualizará un mensaje del tipo: “No se realizan
entregas nocturnas para paquetes que pesen más de 10 libras”, Ejecute el programa e
introduzca los valores 0,5 , 6,3 , 20 y 50,4 libras para servicios de tierra y aire, así como
2, 8 , 1 y 13 libras para el servicio de reparto nocturno.

17. Sea el vector x  1: 50 . Escriba un programa en un fichero script que borre del
vector x aquellos elementos que son divisibles por 3, 4 ó 5. Al final el programa debe
mostrar el vector resultante.

18. Escriba una función 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 línea de definición de función para ello:
 theta radio = CartesianoApolar (x,y) Los argumentos de entrada serán las
coordenadas cartesianas x e y del punto, y los argumentos de salida serán el ángulo θ
y la distancia radial (radio) al punto en cuestión. El ángulo θ vendrá dado en grados, y su
medida será relativa al eje x positivo, de tal forma que sea un número positivo en los
cuadrantes І, ІІ y ІІІ, y un número negativo en el cuadrante ІV. Utilice posteriormente
esta función para calcular las coordenadas polares de los puntos (15, 3), (-7, 12), (-17, -
9) y (10, -6,5).

03 programación en MatLab 32
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

19. Un deposito de gasóleo tiene la forma de un cilindro vertical rematado por sus dos
extremos hemisféricos, tal y como se muestra en la figura adjunta. El radio del cilindro y
de los hemisferios es r  40 , y la longitud de la parte cilíndrica es 1,2 metros.

Escriba una función (definida de la forma: V = Vtanque (h) que calcule el


volumen del depósito en función de la altura h. Utilice posteriormente la función
para representar un gráfico del volumen en función de la altura, para 0  h  2
metros.

20. La velocidad en función del tiempo, de una partícula que se mueve a lo largo de
una línea recta, se representa en el gráfico adjunto y viene dada por las siguientes
ecuaciones:


 1, 4t 0  t  10 s

14  5sen(   t  10 ) 10  t  25 s
 10
v( x)  
 9 25  t  35 s

 9
 9   t  35  35  t  40 s
 5

Escriba dos funciones MATLAB: una de ellas debe calcular la velocidad de la partícula en
un instante t (utilice la siguiente definición de función v = velocidad (t) , y la otra
función deberá calcular la aceleración de la partícula también en el instante t (utilice
para ello la siguiente definición de función: a = aceleración (t)) . Escriba posteriormente
un programa, en un fichero script, que represente las gráficas de la velocidad y la
aceleración, en función del tiempo, de una partícula en movimiento (las dos gráficas
deben aparecer en la misma ventana gráfica). Para ello, dentro del fichero script, cree
03 programación en MatLab 33
03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

primero un vector t , para 0  t  40 segundos, y después utilice las funciones


velocidad y aceleración para crear los vectores v y a , que se utilizarán para
generar la representación gráfica.
21. Una báscula se compone de una bandeja sujeta a una serie de muelles, tal y
como se muestra en la figura adjunta. Cuando se sitúa un objeto en la bandeja, ésta se
mueve hacia debajo de forma que el peso del objeto se puede calcular a partir del
desplazamiento de la bandeja. Inicialmente ,solo los dos muelles exteriores soportan el
peso. Sin embargo, si el objeto es lo suficientemente pesado, la bandeja hará contacto
con el tercer muelle situado justo entre los otros dos exteriores.

k1  800 N / m, k2  1700 N / m, d  20mm


Escriba una función que calcule el peso W de un objeto en función del desplazamiento x
de la bandeja en la báscula. Utilice la siguiente definición para dicha función :
W=báscula (x)
a) Utilice posteriormente esta función en la Ventana de Comandos para calcular el
peso de dos objetos que producen un desplazamiento de la bandeja de 1,5 y 3,1 cm.
b) Escriba un programa script que represente gráficamente el peso en función del
desplazamiento x , para 0  x  4 cm.

03 programación en MatLab 34

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