Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
03 programación en MatLab 1
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> (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
>> 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
>>
03 programación en MatLab 2
Métodos numéricos 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:
>> 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
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
>> 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
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
03 programación en MatLab 4
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
-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
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.
03 programación en MatLab 5
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
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
03 programación en MatLab 6
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
ans = 10
>> find(T>25 & T<35)
ans = 3 4 5 17 18 19 20 21 22 23
>>
Ejemplo: Obtener los elementos del vector u que son menores que 10
Como vemos el vector m=u<10 contienen unos y ceros como resultado de la comparación de cada uno
de los elementos del vector u con 10. Si es menor devuelve 1 si es mayor o igual devuelve 0. Sin
embargo, v=u(m) crea un vector formado por aquellos elementos del vector u que se corresponden con
1 en el vector m.
Ejemplo: Sea el vector x=[-4,0,5,-3,0,3,7,-1,6];, vamos a contar cuantos elementos del vector x
son positivos, negativos o nulos
>> x=[-4,0,5,-3,0,3,7,-1,6]
x = -4 0 5 -3 0 3 7 -1 6
>> u=x<0
u = 1 0 0 1 0 0 0 1 0
>> neg=sum(u)
03 programación en MatLab 7
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
neg = 3
>> pos=sum(x>0)
pos = 4
>> cero=sum(x==0)
cero = 2
Vamos a calcular el producto elemento a elemento del vector a por el vector lógico u, que
utilizaremos en los siguientes apartados
>> a=[15,6,9,4,11,7,14]
a = 15 6 9 4 11 7 14
>> u =[0,1,1,1,0,1,0]
u = 0 1 1 1 0 1 0
>> a.*u
ans =
0 6 9 4 0 7 0
( ) ( )
( ) {
( )
Programación en MatLab
x=0:pi/30:3*pi;
y=cos(x);
y=y.*(y>0);
plot(x,y)
set(gca,'XTick',0:pi/2:3*pi)
set(gca,'XTickLabel',{'0','\pi/2','\pi','3\pi/2','2\pi','5\pi/2','3\pi
'})
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0 \pi/2 \pi 3\pi/2 2\pi 5\pi/2 3\pi
La expresión (y>0) devuelve un vector cuyos elementos son 1 cuando cos(x) es positivo y 0 en
caso contrario. El producto elemento a elemento y.*(y>0) conserva inalterados los valores
positivos y los otros los hace cero.
03 programación en MatLab 8
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
( ) {
Programacion en MatLab
x=0:0.01:6;
y=(2*x).*(0<=x & x<1)+2*(1<=x & x<3)+(-x+5).*(3<=x & x<5);
plot(x,y)
ylim([-0.1 2.1])
1.8
1.6
1.4
1.2
0.8
0.6
0.4
0.2
0 1 2 3 4 5 6
Supongamos que queremos dibujar la gráfica de la función y=sin(x)/x desde -4π a 4π. Pero
cuando x es cero tenemos una división entre cero. Un modo de evitar este problema es sustituir
x=0 por x=eps. Si escribimos eps en la ventana de comandos obtenemos un número muy
pequeño 2.2204e-016.
Programando en MatLab
x=-4*pi:pi/30:4*pi;
x=x+(x==0)*eps;
y=sin(x)./x;
plot(x,y)
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-15 -10 -5 0 5 10 15
La expresión (x==0) devuelve un uno cuando x=0, entonces x toma el valor final x=eps que
evita la división entre 0.
Evitando el infinito
03 programación en MatLab 9
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Vamos a dibujar la función y=tan(x) desde -3π/2 a 3π/2. El problema es que tan(x) se aproxima
a ±∞ cuando x=±π/2, ±3π/2, ...
x=-3*pi/2:pi/100:3*pi/2;
y=tan(x);
y=y.*(abs(y)<100);
plot(x,y)
set(gca,'XTick',-3*pi/2:pi/2:3*pi/2)
set(gca,'XTickLabel',{'-3\pi/2','-\pi','-
\pi/2','0','\pi/2','\pi','3\pi/2'})
40
30
20
10
-10
-20
-30
-40
-3\pi/2 -\pi -\pi/2 0 \pi/2 \pi 3\pi/2
abs(y)<100 devuelve un vector que es cero solamente cerca de las asíntotas (cuando la tangente
es muy grande en valor absoluto), y un uno en los demás casos. Se sugiere poner un símbolo
comentario % delante de la tercera línea para anularla, guardar el script y probar el efecto.
x=-3*pi/2:pi/100:3*pi/2;
y=tan(x);
%y=y.*(abs(y)<100);
plot(x,y)
set(gca,'XTick',-3*pi/2:pi/2:3*pi/2)
set(gca,'XTickLabel',{'-3\pi/2','-\pi','-
\pi/2','0','\pi/2','\pi','3\pi/2'})
15
x 10
6
-2
-4
-6
-3\pi/2 -\pi -\pi/2 0 \pi/2 \pi 3\pi/2
Funciones MATLAB
03 programación en MatLab 10
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
ans = 0
>>a = [5 3 11 7 8 15];
>> all(a)
Devuelve 1 si todos los elementos del vector son
ans =1
all(a) distintos de cero. Devuelve 0 si uno o más elementos
>> b = [3 6 11 4 0 13];
son cero
>> all(b)
ans = 0
>> a = [5 0 14 0 0 13];
>> any(a)
Devuelve 1 si hay elementos del vector que son
ans =1
any(a) distintos de cero. Si todos los elementos del vector
>> b = [0 0 0 0 0 0 ];
son cero devuelve cero.
>> any(b)
ans = 0
Devuelve los índices de los elementos del vector >> a = [0 7 4 2 8 0 0 3
distintos de cero 9];
find(a) >> find(a)
find(a>d) Si a es un vector, find devuelve los índices de los ans =2 3 4 5 8 9
elementos que son mayores que d (se puede utilizar >> find(a>4)
cualquier otro operador relacional distinto a a>d) ans=2 5 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 día 12 de Enero.
a) Indicar cuantas veces la temperatura fue mayor de 30 grados, en qué hora fue y cuál es la temperatura.
b) El número de horas que la temperatura estuvo entre 25 y 35 grados, en qué hora fue y cuál es la temperatura.
c) El número de horas que la temperatura no estuvo entre 20 y 30 grados, en qué hora fue y cuál es la temperatura.
En el caso de la función all se puede emplear en sentencias de este tipo: Si todos los elementos
del vector a son mayores que uno, hacer alguna tarea. Del mismo modo se puede emplear la
función any.
if all(a>1)
hacer algo...
end
03 programación en MatLab 11
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
Ejecucion en MatLab
>> programa11
edad = 45 47 15 23 7 60 35 28 32 10 41 36 70 12
n = 14
b = 10
B = 45 47 23 60 35 28 32 41 36 70
c= 2
C = 7 10
d= 2
D = 15 12
e= 1
f= 0
>>
Ejemplo: Creamos un vector de datos de los pesos de las personas, cuyas edades y pesos se
indican:
edad=[45,47,15,23,7,60,35,28,32,10,41].
peso=[70,83,45,60,25,55,90,73,65,35,78]
¿Cuantos adultos pesan más de 65 kg? ¿Qué peso y edad tienen?
Ejecucion en MatLab
>> programa11
edad = 45 47 15 23 7 60 35 28 32 10 41
peso = 70 83 45 60 25 55 90 73 65 35 78
adulto = 45 47 23 60 35 28 32 41
peso_adulto = 70 83 60 55 90 73 65 78
>>
03 programación en MatLab 12
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
b) Eliminar del vector v todos los elementos que son múltiplos de tres.
Ejecución en MatLab
>> programa12
v= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
P = 6 8 10 12 14 16
v= 1 2 4 5 7 8 10 11 13 14 16
v2 = 1 2 4 5 7 8 10 11 13 14 16
>>
Ejemplo: Una empresa paga los siguientes tipos de salario anual: 12000, 15000, 18000, 24000,
35000, 50000 y 70000. El número de empleados en cada una de las categorías es: 3000, 2500,
1500, 1000, 400, 100 y 25. Calcular:
a) El número total de empleados
b) El número de empleados de la empresa cuyos salarios son superiores a 32000 e inferiores a
dicha cantidad
c) El salario medio por empleado en la empresa (media ponderada)
Ejecución en MatLab
>> programa13
sal = 12000 15000 18000 24000 35000
50000 70000
emp = 3000 2500 1500 1000 400
100 25
total_emp = 8525
emp_arriba_32000 = 0 0 0 0 400 100 25
m = 525
emp_abajo_32000 = 3000 2500 1500 1000
0 0 0
n = 8000
sal_prom = 1.7038e+004
>>
Ejemplo: El recibo de la electricidad de los residentes en una determinada ciudad se calcula del
siguiente modo:
03 programación en MatLab 13
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos
* Si se consumen más de 1000 Kwh el coste es 35 euros por los primeros 1000 Kwh y 10
céntimos por Kwh para el consumo que exceda los 1000 Kwh
* La compañía eléctrica incluye un gasto fijo de 5 euros, independiente del consumo.
Las lecturas del contador de electricidad de cinco familias ha sido el siguiente: 200, 500, 700,
1000, 1500 Kwh, respectivamente. Mostrar los resultados del cálculo en dos columnas, una del
consumo y la otra del coste de la electricidad consumida.
Ejecutando en Matlab
>> programa12
200 9
500 15
700 25
1000 40
1500 90
>>
03 programación en MatLab 14