matrices en matlab - Wilson Cortés Álvarez

Anuncio
UNIVERSIDAD TECNOLOGICA DE PEREIRA
FACULTAD DE INGENIERIA INDUSTRIAL
MATRICES - INFORMATICA III – Febrero 17 de 2012
MATRIZ: Es un arreglo que puede contener varias direcciones (filas y columnas), pueden ser:
Bidimensionales, Tridimensionales, Entre otros.
Los elementos que la componen pueden ser de diferente tipo (a nivel columna): numérico, cadena, fecha,
booleano, entre otros (en general se utilizan de tipo numérico). A continuación se esquematiza una matriz
bidimensional en donde cada elemento tiene una posición definida (fila, columna) con su respectivo contenido:
Columnas
Filas
6
1
8
189
100
7
23
15
50
12
16
9
Diagonal secundaria, compuesta por los números 2, 12, 23 y 189
2
80
97
41
Matriz de 4x4 (en este caso la matriz es cuadrada)
Diagonal principal, compuesta por los números 6,7,16 y 41
* Para la utilización de diagonales la matriz debe ser cuadrada, esto es, el número de filas igual al número de
columnas.
Para referirnos a cada elemento se debe invocar su posición fila y columna (en su orden), por ejemplo:
- El número 6 esta en la posición 1,1
- El número 7 esta en la posición 2,2
- El número 80 esta en la posición 2,4
- El número 9 esta en la posición 4,3
Tipos de matrices: Rectangular, cuadrada, traspuesta, opuesta, nula, simétrica, antisimétrica, diagonal, escalar,
identidad, triangular, inversa, entre otras.
Operaciones con matrices:
- Suma y Resta de matrices: Las dos matrices (n x m y p x q) deben ser de la misma dimensión, donde n=p y
m=q.
- Producto de un real por una matriz: Se multiplica el escalar por cada elemento y se obtiene una matriz del
mismo orden.
- Producto de matrices: Se debe tener en cuenta que el número de columnas de la primera matriz debe ser igual al
número de filas de la segunda matriz, la matriz producto corresponde al orden n x q. El elemento que ocupa el
lugar (i, j) en la matriz producto se obtiene sumando los productos de cada elemento de la fila i de la matriz A por
el correspondiente de la columna j de la matriz B.
Ejercicios:
1) Ingresar tres notas parciales para N estudiantes con un porcentaje de 25%, 35% y 40% respectivamente;
calcular y mostrar el promedio de las notas definitivas mayores o iguales a 3 y la cantidad de estudiantes que
perdieron la materia (nota definitiva menor a 3.0).
clc
clear all
matriznotas = 0;
nota1 = 0;
nota2 = 0;
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
nota3 = 0;
ndf = 0;
promedio = 0;
sumadf = 0;
candf = 0;
perdieron = 0;
canalumnos = 0;
canalumnos = input('Cantidad de alumnos: ');
% Llenar la matriz con las 3 notas parciales por alumno
for a = 1 : canalumnos
disp(sprintf('Notas del alumno No.%d', a))
nota1 = input('Primera nota 25%: ');
nota2 = input('Segunda nota 35%: ');
nota3 = input('Tercera nota 40%: ');
% Almacenar en la matriz
matriznotas(a, 1) = nota1;
matriznotas(a, 2) = nota2;
matriznotas(a, 3) = nota3;
end
% Recorrer la matriz, calcular la nota definitiva y verificar si cumple
% para el promedio solicitado.
for a = 1 : canalumnos
ndf = matriznotas(a, 1) * 0.25 + matriznotas(a, 2) * 0.35 + matriznotas(a, 3) * 0.4;
if ndf >= 3
sumadf = sumadf + ndf;
candf = candf + 1;
else
perdieron = perdieron + 1;
end
end
promedio = sumadf / candf;
disp(sprintf('Promedio de las notas definitivas mayores o iguales a tres --> %.2f', promedio))
disp(sprintf('Cantidad de estudiantes que perdieron la materia --> %d', perdieron))
disp('Fin del ejercicio')
2) Diseñar una matriz cuadrada (n x n) y una vez llena de números, calcular el valor total de la diagonal principal
mostrando su resultado.
3) Diseñar una matriz cuadrada (n x n) y una vez llena de números, calcular el valor total de la diagonal principal
pero solo para aquellos números cuyo valor sea par y al final mostrar su resultado.
4) Diseñar una matriz cuadrada (n x n) y una vez llena de números, calcular el valor total de la diagonal
secundaria pero solo para aquellos números impares, y al final mostrar su resultado.
5) Se cuenta con una matriz poblacional de municipios, la cual presenta una dimensión de 10 x 5, donde 10 son
los municipios y 5 son las columnas con la siguiente información en su orden:
- Cantidad de niños
- Cantidad de mujeres
- Cantidad de hombres
- Altitud
- Temperatura
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
Se requiere determinar: Número total de habitantes,
temperatura mayor o igual a 20 grados centígrados.
promedio poblacional y cantidad de municipos con
clc
clear all
censomun = 0; % Variable para la matriz de censo del municpio
promhabi = 0; % Variable para calcular el promedio de los habitantes por municipio
numtothabi = 0; % Variable para sumar la población total
tempmayor = 0; % Variable para contar las temperaturas mayores a 15 grados centígrados
disp('Matriz con información de municipios')
[censomun] = xlsread('InfoMunicipios.xlsx', 'Poblacion'); % Leer la información de los municipios desde Excel
for m = 1 : 10
% Recorrer los 10 municipios
% Acumular la población
numtothabi = numtothabi + (censomun (m,1) + censomun(m,2)+ censomun(m,3));
if censomun(m,5) >= 20
% Determinar si el municipio tiene una temperatura >= a 20 grados centígrados
tempmayor = tempmayor + 1; % De ser afirmativo irlos contando
end
end
promhabi = numtothabi / 10; % Determinar el promedio poblacional de los municipios
disp(sprintf('El total de habitantes es de %d', numtothabi))
disp(sprintf('El promedio de habitantes por municipio es de %12.2f', promhabi))
disp(sprintf('La cantidad de municipios con >= 20 grados centígrados es %d', tempmayor))
6) Crear un libro en Excel y en una hoja ingresar los gastos de la semana para n personas (las filas que quiera
digitar en lo posible no menor a 10). Esta matriz tendrá una dimensión de n x 7 (donde el n son las personas y el
7 son los días de la semana de lunes a domingo). Los valores ingresados son numéricos en su totalidad, nada de
encabezados con nombres de columnas, nombres de personas o nombres de los días. Se requiere determinar:
- El gasto total
- El mayor valor de gasto en persona (en otras palabras la persona que más gasto)
- Nombre del día que tuvo mayor gasto (incluido su valor).
a) Solución algorítmica
clc
clear all
gastos = 0;
% Variable para almacenar los datos como una matriz
gastotal = 0; % Variable para acumular el gasto total de la semana
mayorgastop = 0; % Variable para almacenar el gasto mayor de persona en la semana
mayorgastod = 0; % Variable para almacenar el gasto mayor del día de la semana
posdia = 0;
% Varible para determinar la posición del dia de mayor gasto
nomdia = '';
% Variable para determinar el nombre del día a partir de la posición
disp('Matriz con información de gastos semanales de personas')
gastos = xlsread('Personas.xlsx', 'Gastos'); % Leer la información de los gastos desde Excel
[personas] = size(gastos, 1); % Determinar la cantidad de personas
for p = 1 : personas % Recorrer desde la primera hasta la última persona
sumaper = 0; % Dejar la variable en cero para acumular el gasto de la persona actual
for d = 1 : 7 % Recorrer desde el primer hasta el último día de la semana
gastotal = gastotal + gastos(p,d); % Acumular el gasto total (dia a dia)
% Acumular el gasto de la persona actual (7 dias de la semana)
sumaper = sumaper + gastos(p,d);
end
if sumaper > mayorgastop
mayorgastop = sumaper;
end
end
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
% Sumar la matriz gasto por columnas, para hallar el acumulado por día
vectordia = sum(gastos);
% Recorrer el vector de gastos acumulados por dia para hallar el mayor
for d = 1 : 7
if vectordia(d) > mayorgastod
mayorgastod = vectordia(d);
posdia = d; % Posición del dia en el vector
end
end
if posdia == 1
nomdia = 'Lunes';
elseif posdia == 2
nomdia = 'Martes';
elseif posdia == 3
nomdia = 'Miércoles';
elseif posdia == 4
nomdia = 'Jueves';
elseif posdia == 5
nomdia = 'Viernes';
elseif posdia == 6
nomdia = 'Sábado';
else
nomdia = 'Domingo';
end
disp(sprintf('El gasto total de la semana fue de : %14.2f', gastotal))
disp(sprintf('El gasto mas alto de persona fue de : %14.2f', mayorgastop))
disp(sprintf('El día que mas se gasto fue el %s por valor de : %14.2f', nomdia, mayorgastod))
disp('Fin del ejercicio')
b) Solución directa mediante funciones predeterminadas
clc
clear all
gastos = 0; % Variable para almacenar los datos como una matriz
gastotal = 0;
% Variable para acumular el gasto total de la semana
mayorgastop = 0; % Variable para almacenar el gasto mayor de persona en la semana
mayorgastod = 0; % Variable para almacenar el gasto mayor del día de la semana
posdia = 0;
% Varible para determinar la posición del dia de mayor gasto
nomdia = '';
% Variable para determinar el nombre del día a partir de la posición
disp('Matriz con información de gastos semanales de personas')
gastos = xlsread('Personas.xlsx', 'Gastos'); % Leer la información de los gastos desde Excel
gastotal = sum(sum(gastos));
% Totalizar el gasto de la semana
mayorgastop = max(sum(gastos, 2));
% Suma la matriz por filas (personas) y extrae el máximo valor
[mayorgastod, posdia] = max(sum(gastos, 1)); % Suma la matriz por columnas (días) y extrae el máximo valor
if posdia == 1
nomdia = 'Lunes';
elseif posdia == 2
nomdia = 'Martes';
elseif posdia == 3
nomdia = 'Miércoles';
elseif posdia == 4
nomdia = 'Jueves';
elseif posdia == 5
nomdia = 'Viernes';
elseif posdia == 6
nomdia = 'Sábado';
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
else
nomdia = 'Domingo';
end
disp(sprintf('El gasto total de la semana fue de : %14.2f', gastotal))
disp(sprintf('El gasto mas alto de persona fue de : %14.2f', mayorgastop))
disp(sprintf('El día que mas se gasto fue el %s por valor de : %14.2f', nomdia, mayorgastod))
disp('Fin del ejercicio')
7) Una empresa cuenta con una matriz de ventas (leer desde libro de Excel primera hoja) para el segundo
semestre del año, la cual presenta las siguientes columnas en su orden:
Documento del vendedor
Ventas mes de julio
Ventas mes de agosto
Ventas mes de septiembre
Ventas mes de octubre
Ventas mes de noviembre
Ventas mes de diciembre
Se requiere determinar:
a)
Valor total de las comisiones pagadas al 5%
b)
Valor total de las comisiones pagadas al 2%
c)
Documento y valor de las ventas del semestre del vendedor que menos ventas realizo.
Para las dos primeras respuestas, tenga en cuenta:
- Se paga comisión del 5% siempre y cuando las ventas del mes en curso hayan sido superiores a 5.000.000
millones.
- Se paga comisión del 2% siempre y cuando las ventas del mes en curso hayan sido entre el rango de 2.000.000 y
5.000.000 millones.
clc
clear all
ventas = 0; % Variable para almacenar la matriz de ventas
tcomis5 = 0; % Variable para acumular las comisiones al 5%
tcomis2 = 0; % Variable para acumular las comisiones al 2%
documento = 0; % Variable para almacenar el documento del vendedor con menos venta
ventamenor = 0; % Variable de referencia para almacenar el valor menor de venta en vendedor
vendedores = 0; % Variable para determinar la cantidad de vendedores (filas de la matriz)
disp('Matriz con información de ventas del segundo semestre de los vendedores')
ventas = xlsread('Empresa.xlsx', 'Vendedores'); % Leer el archivo desde Excel
vendedores = size(ventas, 1); % Determinar las filas de la matriz (cantidad de vendedores)
for v=1:vendedores
% Se recorre desde el primer vendedor hasta el último
ventasvendedor = 0; % Se inicia las ventas del vendedor en cero
for m=2:7
% Se recorre desde el mes de Julio hasta Diciembre
if ventas(v, m) > 5000000 % Se evalúa si el mes tiene ventas superiores a 500.000 pesos
tcomis5 = tcomis5 + (ventas(v, m) * 0.05); % Se cálcula la comisión al 5%
end
% Se evalúa si el mes tiene ventas entre 2.000.000 y 500.000 pesos
if ventas(v, m) >= 2000000 & ventas(v, m) <= 5000000
tcomis2 = tcomis2 + (ventas(v, m) * 0.02); % Se cálcula la comisión al 2%
end
ventasvendedor = ventasvendedor + ventas(v, m); % Se acumulan las ventas por mes del vendedor
end
if v == 1 % Si es el primer vendedor entonces es el de menor venta
ventamenor = ventasvendedor;
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
documento = ventas(v, 1);
elseif ventasvendedor < ventamenor % Se compara la venta del siguiente vendedor con la referencia menor
ventamenor = ventasvendedor;
documento = ventas(v, 1);
end
end
disp(sprintf('El valor total de las comisiones pagadas al 0.05 es: %f', tcomis5));
disp(sprintf('El valor total de las comisiones pagadas al 0.02 es: %f', tcomis2));
disp(sprintf('El documento del vendedor que menos vendio es %f con una venta de : %f', documento,
ventamenor));
disp('Fin del ejercicio')
8) En una matriz (leerla desde Excel) se tiene la información para la liquidación de una nómina mensual para n
empleados, en donde el orden de sus columnas es la siguiente:
Código
Sueldo
Días
Bonificación
Descuentos
El total a pagar se debe deducir de la siguiente manera:
(Sueldo/30)*Dias + Bonificacion – Descuentos – Salud
Nota: El valor de salud se calcula del 4% del (Sueldo/30)*Dias.
Calcular y mostrar al final:
- Total a pagar por todos los empleados
- Total de la bonificación
- Total Descuentos
- Total Salud
clc
clear all
nomina = 0; % Variable para almacenar la matriz de nómina mensual
empleados = 0; % Variable para determinar la cantidad de empleados (filas de la matriz)
salud = 0;
% Variable para calcular el valor de salud a pagar por parte de cada empleado
totalpagar = 0; % Variable para acumular el valor pagado a los empleados
totalboni = 0; % Variable para acumular el valor de las bonificaciones de los empleados
totaldesc = 0; % Variable para acumular el valor de los descuentos de los empleados
totalsalud = 0; % Variable para acumular el valor de la salud descontada a los empleados
disp('Matriz con información de nómina mensual de empleados')
nomina = xlsread('Nomina.xlsx', 'Liquidacion'); % Leer el archivo desde Excel
empleados = size(nomina, 1); % Determinar la cantidad de empleados a procesar
for e = 1 : empleados % Recorrer desde el primer empleado hasta el último
salud = ((nomina(e,2)/30)*nomina(e,3)) * 0.04; % Liquidar la salud
totalpagar = totalpagar + (((nomina(e,2)/30)*nomina(e,3))+ nomina(e,4) - nomina(e,5) - salud);
totalboni = totalboni + nomina(e,4); % Acumular la bonificación
totaldesc = totaldesc + nomina(e,5); % Acumular los descuentos
totalsalud = totalsalud + salud;
% Acumular la salud calculada en la variable salud
end
disp(sprintf('Valor total a pagar de la nómina mensual: %14.2f', totalpagar));
disp(sprintf('Valor total de la bonificaciones pagadas: %14.2f', totalboni));
disp(sprintf('Valor total de los descuentos otorgados: %14.2f', totaldesc));
disp(sprintf('Valor total de la salud descontada: %14.2f', totalsalud));
disp('Fin del ejercicio')
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
9) Un campeonato de fútbol presenta información para 8 equipos en una matriz con datos de las finales, dicha
matriz esta conformada por 4 columnas con la siguiente información (en su orden):
- Código del equipo
- Cantidad de partidos ganados
- Cantidad de partidos empatados
- Cantidad de partidos perdidos.
Se requiere determinar:
- Código del equipo con mayor puntaje
- Promedio de los puntos
- Cantidad de equipos cuya diferencia entre partidos ganados y empatados sea mayor a 3.
Nota: Los puntos por equipo se calculan de la siguiente manera:
Partido ganado:
3 puntos
Partido empatado: 1 punto
Partido perdido:
0 puntos.
10) Un campeonato de microfútbol presenta información para n equipos en una matriz con datos de las finales,
dicha matriz esta conformada por 3 columnas con la siguiente información (en su orden):
- Cantidad de partidos ganados
- Cantidad de partidos empatados.
- Cantidad de Partidos perdidos
Se requiere determinar:
- Promedio de los puntos de los partidos empatados
- Puntaje mas bajo
- Cantidad de equipos cuyo número de partidos perdidos sea menor o igual a 2
Nota: Los puntos por equipo se calculan de la siguiente manera:
Partido ganado:
2 puntos
Partido empatado: 1 punto
Partido perdido:
0 puntos.
11) Un campeonato de fútbol cinco presenta información para 9 equipos en una matriz con datos de las finales,
dicha matriz esta conformada por 4 columnas con la siguiente información (en su orden):
- Cantidad de partidos empatados
- Cantidad de partidos perdidos
- Cantidad de partidos ganados
- Goles a favor
Se requiere determinar:
- Mayor número de goles a favor
- Cantidad de equipos cuyos partidos empatados se encuentre entre 5 y 10
- Promedio de los puntos de los partidos ganados.
Nota: Los puntos por equipo se calculan de la siguiente manera:
Partido ganado:
4 puntos
Partido empatado: 2 puntos
Partido perdido:
1 puntos.
12) La materia de informática III cuenta con un grupo de n alumnos, al final del curso para cada estudiante se
tienen 3 notas con un valor porcentual así:
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
- Primer parcial
35%
- Segundo parcial 30%
- Tercer parcial
35%
Muestre al final los siguientes resultados:
- Cantidad de estudiantes que pasaron la materia (nota definitiva mayor o igual a 3.0), cantidad de estudiantes
que la perdieron (nota definitiva menor a 2.0) y cantidad de estudiantes que la habilitan (nota definitiva mayor o
igual a 2.0 y menor a 3.0).
- Promedio de la nota definitiva
- La mayor nota definitiva de la materia.
13) Un curso de Inglés avanzado cuenta con un grupo de 25 estudiantes, al final del curso para cada estudiante se
tienen 3 notas con un valor porcentual así:
Primer parcial 50%
Segundo parcial 25%
Talleres
25%
Muestre al final los siguientes resultados:
- La menor nota definitiva de la materia
- Cantidad de estudiantes que pasaron la materia (nota definitiva mayor a 3.0), cantidad de estudiantes que la
perdieron (nota definitiva menor o igual a 2.0) y cantidad de estudiantes que la habilitan (nota definitiva mayor a
2.0 y menor o igual a 3.0).
- Promedio de la nota definitiva superior a 4.
14) En una matriz de 15 x 3, un almacén de Grandes Superficies tiene registrada las ventas, en su orden las
siguientes columnas:
Valor de la venta
Valor impuesto
Descuento
El programa debe determinar y mostrar los siguientes resultados:
- El mayor descuento aplicado
- Valor total de la venta
- Valor total de los impuestos (columna Valor impuesto) cuyo valor sea mayor al 20% del valor de la venta
(columna Valor de la venta). Por ejemplo, se tiene un valor venta por $100 y su valor impuesto es de $21,
aplicaría para la sumatoria (sobrepasa el porcentaje estipulado).
15) En una matriz de n x 4, un hipermercado tiene registrada las ventas, en su orden las siguientes columnas:
Cantidad de artículos vendidos
Valor de la venta
Valor impuesto
Descuento
El programa debe determinar y mostrar los siguientes resultados:
- Valor total de los impuestos (columna valor impuesto)
- La menor cantidad de artículos vendidos
- Valor total de los descuentos (columna descuento) cuyo valor sea menor al 10% del valor de la venta (columna
Valor de la venta). Por ejemplo, se tiene un valor venta por $100 y su valor descuento es de $9, aplicaría para la
sumatoria (no sobrepasa el porcentaje estipulado).
16) Un hotel tiene una distribución estructural de n pisos por n habitaciones. Se requiere determinar para la
contratación en temporada alta de personal de seguridad lo siguiente:
- Vigilantes por pisos pares (10% de los huéspedes)
- Vigilantes por pisos impares (20% de los huéspedes)
- Vigilantes adicionales para puertas de evacuación (40% de las contratados para pisos pares e impares).
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
Tenga en cuenta:
a)
No hay vigilantes de huéspedes para el primer y último piso
b)
La cantidad de vigilantes en pisos pares e impares no puede ser inferior a 1
17) Se cuenta con una matriz de recaudos de impuestos municipales n x 5, en donde el orden de su información
por columnas es el siguiente:
- Código contribuyente
- Factura
- Fecha
- Tipo de impuesto (1, 2, 3 ó 4)
- Valor
Se requiere determinar al final:
a)
Suma total de los recaudos por cada tipo impuesto
b)
Menor valor de los tipos de impuesto
c)
Número de factura con mayor valor del recaudo
d)
Promedio del valor del recaudo
18) En una matriz de n x 4 se tiene la información para la liquidación de una nómina mensual para n empleados,
en donde el orden de sus columnas es la siguiente:
Código
Sueldo
Días trabajados en el mes
Alimentación
El total a pagar se debe deducir de la siguiente manera:
(Sueldo/30)* Dias + Prima – Alimentacion – Salud - Pension
Nota:
El valor de salud y pensión se calcula del 4% del (Sueldo/30)*Dias
La Prima extralegal corresponde al 70% del Sueldo siempre y cuando haya laborado los 30 días de la
semana.
Determinar al final como resultados:
- Total a pagar por todos los empleados
- Cantidad de empleados que obtuvieron la prima extralegal
- Total Prima extralegal
- Total de Salud más Pensión
19) Teniendo como referencia 2 matrices, efectúe algorítmicamente su mulplicación generando con este proceso
una tercera matriz. Tenga en cuenta que para multiplicar 2 matrices se debe cumplir con el requerimiento que las
columnas de la primera sean iguales a las filas de la segunda.
20) Genere algorítmicamente la matriz identidad de una matriz cualquiera n x n
Profesor Wilson Cortés Álvarez, Ingeniero y Auditor de Sistemas de Información
e-mail: wcortes@utp.edu.co - wcortesalvarez@yahoo.com
Descargar