07 Programacion Matlab
07 Programacion Matlab
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.
>> 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
07 programación en MatLab 1
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
07 programación en MatLab 2
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> 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
>> 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
>>
07 programación en MatLab 3
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
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
La negacion Alt 126 >> ~0+~5+~(-7)
~ no ans = 1
Verdad si cualquiera de los
any elementos de un vector es no cero
Verdad si todos los elementos de un
all vector son no cero
Algunos ejemplos
>> x=[-1 1 1]; y=[ 1 2 -3];
>> x>0, y>0
ans =0 1 1
ans =1 1 0
>> x>0 & y>0
ans =0 1 0
>> x>0 | y>0
ans =1 1 1
>> xor(x>0,y>0)
ans =1 0 1
>> any(x>0)
ans =1
>> all(x>0)
ans =0
>>
Para terminar con los operadores lógicos estudiamos otro comando muy útil: find.
Este comando devuelve los indices (los lugares que ocupan) los elementos no
nulos de un vector. Por ejemplo
>> x=[-3 1 0 -inf 0]
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
07 programación en MatLab 4
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> 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
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.
07 programación en MatLab 5
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
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.
Solución
07 programación en MatLab 6
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
07 programación en MatLab 7
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
PROGRAMACION EN MatLab
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
Sentencia Condicional: if – end
if condición
Sentencias
end
Diagrama de flujo
Pr ograma
......
en MatLab
Si exp. condicional
Falso Sentencia
if ......
Instrucciones
Verdadero ......
MatLab
......
Instrucciones
End
Pr ograma
End ......
en MatLab
07 programación en MatLab 8
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
07 programación en MatLab 9
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
07 programación en MatLab 10
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
h
29 m
Diametro 20 m
SOLUCION: El volumen es igual
100 h 0 h 29
3
V h 4 3h 4000
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: 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 fumncion calcula el valor ans = 88
absoluto >> valorabs(-45)
% de un numero real x ans = 45
% donde el resultado es x, si es no >> valorabs(0)
negativo ans = 0
% y es -x si es negativo >>
if (x>=0)
y=x;
else
y=-x;
end
07 programación en MatLab 11
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
07 programación en MatLab 12
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
if n<0 | n==0
disp('Introduce un número positivo');
elseif rem(n,2)==0
a=n/2;
else
a=(n+1)/2
end
Naturalmente la condición n<0 | n==0 podría sustituirse por la más compacta n<=0.
Se ha escrito de la forma expuesta para hacer uso de una condición con dos
relaciones y un operador lógico.
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
07 programación en MatLab 13
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
ejecutara siempre que al menos haya coincidencia con alguno de los valores
indicados.
Ejemplo de aplicación:
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
>>
07 programación en MatLab 14
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Programa en MatLab
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
07 programación en MatLab 15
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
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
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:
En ambos casos se puede salir de estos bucles, antes de que acaben con el comando
breack.
07 programación en MatLab 16
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
07 programación en MatLab 17
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
for k=1:n
x(n)>0&(rem(x(n),3)==0
F | rem(x(n),8)==0)
V
x(n)<0 & x(n)>-10
F x(n) = 3*x(n)
x(n)= (x(n))^2
end
07 programación en MatLab 18
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Archivo: cambiavector.m
% Este programa cambia los elementos de un vector.
% multiplica por tres los elementos positivos, y múltiplos de 3 ó
5
% eleva al cuadrado los negativos mayores que -10.
for k=1:1:n
if x(k)>0 & ( rem(x(k),3)==0 | rem(x(k),8)==0 )
x(k)=3*x(k);
elseif x(k)<0 & x(k)>-10
x(k)=x(k)^2;
end
end
x
Ejecucion en MatLab
>> cambiavector
Ingrese un vector con elementos enteros:
[1 5 9 0 -5 -30 64]
x = 1 5 27 0 25 -30 192
>> cambiavector
Ingrese un vector con elementos enteros:
[1 5 7 16 15 -20 -7 9 0 -5 -30 64]
x = 1 5 7 48 45 -20 49 27 0 25
-30 192
>>
Y por supuesto, se pueden encajar múltiples bucles for. . . end unos dentro de otros. El
siguiente código proporciona una matriz simétrica 5 x 5 con el elemento i/j en la posicion (i;
j) para i >= j:
>> n=5; A=eye(n);
>> for j=2:n
for i=1:j-1
A(i,j)=i/j;
A(j,i)=i/j;
end
end
>> A
A=
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 1.0000 0.6667 0.5000 0.4000
0.3333 0.6667 1.0000 0.7500 0.6000
0.2500 0.5000 0.7500 1.0000 0.8000
0.2000 0.4000 0.6000 0.8000 1.0000
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:
07 programación en MatLab 19
07. 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 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.
Solución:
SOLUCION:
07 programación en MatLab 20
07. 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.
07 programación en MatLab 21
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
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 varibles de la expresión condicional deben cambiar entre la sentencia while
y end, de otro modo se tendría un bicle infinito
Para evitar un bucle infinito se puede usar el comando break
Un bucle infinito también se puede terminar con Ctrl + C 0 Ctrl + break
07 programación en MatLab 22
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Programa: incrementador.m
% Este programa incrementa un numero 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:
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. &$####
>>
07 programación en MatLab 23
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejemplo: La función exponencial al ser expresada como una serie de Taylor, queda
como sigue:
x xn x 2 x3 x 4 x5
e 1 x
n 0 n! 2! 3! 4! 5!
x
Hallar el valor de e , 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:
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
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
>>
07 programación en MatLab 24
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
EJEMPLOS ADICIONALES
Ejemplo01. 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.
if n<0
disp('Error, ingreso un valor inadecuado ')
break
elseif n==0
fact=p;
else
for k=1:n
p=p*k;
end
fact=p;
end
Ejemplo03:METODO DE BISECCION
Considérese la ecuación f x 0 , Donde la función f cumple las condiciones para aplicar el
método de las tangentes en cierto intervalo. La solución se da por un proceso iterativo:
x1
f ( xk )
xk 1 xk ,k 1, 2,3,
f '( xk )
x
Según ello resolver: e x 0, x 1,0
07 programación en MatLab 25
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
k=1;
d=1;
while abs(d)>=tol & k<miter
[f df]=fun(x(k));
x(k+1)=x(k)-(f/df);
d=x(k+1)-x(k);
k=k+1;
end
if abs(d)>tol
sol=[]
disp('El numero de iteraciones no es suficiente o el proceso
diverge')
else
sol=x'
disp('El numero de iteraciones es:')
k
end
x(1)=x1;
k=1;
d=1;
while d>=tol & k<miter
x(k+1)=-exp(x(k));
d=abs(x(k+1)-x(k));
k=k+1;
end
disp(x')
fprintf('El numero de iteraciones es: %5.0f',k)
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.
07 programación en MatLab 26
07. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
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
07 programación en MatLab 27