Sei sulla pagina 1di 14

Métodos numéricos 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)

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
>>

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
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:

>> 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
Métodos numéricos 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
is real 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
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.

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)
or(a,b) a b ans = 1
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) a b ans = 1

03 programación en MatLab 5
Métodos numéricos 03. PROGRAMACION CON MATLAB Mg. Amado Malca Villalobos

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])
Busca los elementos no nulos, y los enumera,
find(A) indicando el lugar donde se hallan
ans = 1 2
4 5 6
8 9 10
>> find([7 6 0 -4;5 -1 3
Busca los elementos mayores que el valor d, e
find(A>d) indica el lugar donde se encuentran.
0;0 2 9 0]>5)
ans = 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

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)

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
>>

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
>>

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

Acceso a los elementos de un vector


Ya hemos estudiado como se accede a los elementos de un vector o una matriz a través de sus
índices, en esta página vamos a ver nuevas formas de acceder dichos elementos cuando
cumplen determinadas condiciones.

Ejemplo: Obtener los elementos del vector u que son menores que 10

>> u=[15 6 9 4 11 7 14 56 9 -5]


u = 15 6 9 4 11 7 14 56 9 -5
>> m=u<10
m = 0 1 1 1 0 1 0 0 1 1
>> v=u(m)
v = 6 9 4 7 9 -5
>>

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

Producto de un vector por un vector lógico

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

Representar la parte positiva de una función

Representar la función f(x) definida del siguiente modo

( ) ( )
( ) {
( )
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.

Representar una función escalón

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

Evitando la división entre cero

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

OR exclusivo. Devuelve 1 si un operando es >> xor(7,0)


xor(a,b) verdadero y el otro es falso. Devuelve 0 si los dos ans = 1
son verdaderos o los dos son falsos. >> xor(7,-5)

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.

Ejecución en MatLab: programa10.m


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]
a=sum(T>30), A=find(T>30), AA=T(A)
b=sum(T>25 & T<35), B=find(T>25 & T<35), BB=T(B)
c=sum(T<=20 | T>=30), C=find(T<=20 | T>=30), CC=T(C)
Ejecutando en MatLab
>> programa10
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
a = 19
A = 2 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
AA = 38 33 34 35 36 38 39 39 40 39 37 35 35 35 34 33 32 32 31
b = 10
B = 3 4 5 17 18 19 20 21 22 23
BB = 30 33 34 34 33 32 32 31 30 28
c = 21
C = 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
CC = 38 30 33 34 35 36 38 39 39 40 39 37 35 35 35 34 33 32 32 31
30
>>

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

Ejemplo: En el siguiente vector guarda las edades de varias personas:


edad=[45,47,15,23,7,60,35,28,32,10,41,36,70,12]. Determinar
a) El número total de personas,
b) Quienes son adultos (marcar con un uno) y el número de adultos mayores de 20 años,
c) Quienes son niños y el número de niños, que tengan 10 años o menos.
d) Quienes son jóvenes y el número de jóvenes, mayores de 10 años y hasta 20 años inclusive
e) ¿Hay algún niño?
f) ¿Son todos adultos?

Programacion en MatLab programa11.m


edad=[45,47,15,23,7,60,35,28,32,10,41,36,70,12]
n=length(edad),
b=sum(edad>20), B=edad(find(edad>20))
c=sum(edad<=10), C=edad(find(edad<=10))
d=sum(edad>10 & edad<=20), D=edad(find(edad>10 & edad<=20))
e=any(edad<=10)
f=all(edad>20)

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?

Programacion en Matlab programa11.m


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=edad(find(edad>20))
peso_adulto=peso(find(edad>20))

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
>>

Ejemplo: Dado el vector v=1:16;


a) Mostrar los números pares mayores que 4

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.

Programación en MatLab programa12.m


v=1:16
P=v(find(rem(v,2)==0 & v>4))
v(find(rem(v,3)==0))=[]
v2=v(find(rem(v,3)~=0)) % otra opcion

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)

Programación en MatLab programa13.m


sal=[12000,15000,18000,24000,35000,50000,70000]
emp=[3000,2500,1500,1000,400,100,25]
total_emp=sum(emp)
emp_arriba_32000=emp.*(sal>32000)
m=sum(emp_arriba_32000)
emp_abajo_32000=emp.*(sal<32000)
n=sum(emp_abajo_32000)
sal_prom=sum(sal.*emp)/total_emp

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:

* Si se consumen 500 Kwh o menos el coste es de 2 céntimos por Kwh


* Si se consumen más de 500 Kwh y pero no más de 1000 el coste es 10 euros por los primeros
500 Kwh y 5 céntimos por Kwh para el consumo que exceda los 500 Kwh

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.

Programando en MatLab programa12.m


consumo=[200,500,700,1000,1500];
coste=5+10*(consumo>500)+25*(consumo>1000);
coste=coste+0.02*(consumo<=500).*consumo;
coste=coste+0.05*(consumo>500 & consumo<=1000).*(consumo-500);
coste=coste+0.1*(consumo>1000).*(consumo-1000);
disp([consumo',coste'])

Ejecutando en Matlab
>> programa12
200 9
500 15
700 25
1000 40
1500 90
>>

03 programación en MatLab 14

Potrebbero piacerti anche