LICENCIATURA EN ESTADÍSTICA problemas de Programación Lineal.

Anuncio
LICENCIATURA EN ESTADÍSTICA
PROGRAMACIÓN MATEMÁTICA
PRÁCTICA 1: INTRODUCCIÓN AL MATLAB
OBJETIVOS: Presentación de MATLAB, principales comandos, funciones y gráficos para la resolución de
problemas de Programación Lineal.
1. Introducción al MATLAB
MATLAB es una abreviatura de MATrix LABoratory. Es un entorno informático de análisis numérico y
representación gráfica de fácil manejo, es un programa interactivo en el que se van introduciendo comandos.
Originalmente fue escrito para la enseñanza de Algebra Lineal. Internamente tiene algoritmos desarrollados para
cálculo matricial, cálculo infinitesimal, gráficos, etc.
2. Acceso
Desde Windows 3.1 se hace doble click sobre su icono. Desde Windows 95 ó 98 el programa está accesible
desde el menú Inicio - Archivos de Programa - Matlab. Sale la pantalla en blanco con una línea de comandos
indicada por el símbolo
>>
desde donde se pueden introducir instrucciones, como quit permite salir, help proporciona ayuda, clear para
borrar toda la información almacenada en memoria, format long aumenta el número de dígitos de las salidas
por pantalla, etc.
Su uso básico es como el de una calculadora, usando apropiadamente los paréntesis.
>> 2*4
>> 3*sin(2*pi)^2
>> 2*(4-7.2/8)
>> 2*4-7.2/8
pero también almacena matrices,
>> A=[3 6 7
5 -1 3
4 6 1]
>> A=[3 6 7;
5 -1 3; 4 6 1]
y vectores
>> b=[0 2 1]’
>> b=[0
2
1]
y realiza operaciones con ellos
>> A*b
o con sus componentes uno a uno
>> B=[3 5 6; 7 8 9; 1 0 -2]
B=
3 5 6
7 8 9
1 0 -2
>> A.*B
ans =
1
9 30 42
35 -8 27
4 0 -2
>> A*B
ans =
58 63 58
11 17 15
55 68 76
Se pueden borrar de la memoria las variables o las matrices una a una,
>> clear b
% o todas de una vez con clear.
También se pueden crear matrices especiales de forma sencilla,
>> I=eye(3)
% matriz identidad 3x3
>> Z=zeros(3,3)
% matrix de ceros 3x3
>> U=ones(3,1)
% vector de unos 3x1
>> d=diag(Z)
% es la diagonal de Z
>> R=rand(n,m)
% matriz de orden nxm de números aleatorios
>> x=[1:5:100]
% matriz de 1 a 100 de 5 en 5
>> y=I(1,3)
% elemento (1,3) de I, (fila,columna)
>> x=I(1:2,3)
% elementos 1 y 2 de la columna 3 de I
>> y=I(:,3)
% todos los elementos de la columna 3 de I
>> I(:,[1 3])=U(:,[1 1])
% reemplaza los elementos,
% usando la columna 1 de U repetida dos veces
Combinando las instrucciones anteriores podemos crear la matriz:
>> E=[ eye(2) , ones(2,3); zeros(2), [1:3;3:-1:1]]
También se resuelven sistemas lineales Ax = b mediante tres métodos:
>> x=A\b
% eliminación gaussiana
>> rref.([A b])
% Gauss-Jordan
>> x=A^(-1)*b ó >> x=inv(A)*b
% método de la matriz inversa
Resolver a modo de ejemplo el siguiente sistema y comparar por la cantidad de pasos los tres métodos:
X1 – 2 x2 + 3 x3 = 1
4 X1 + x2 - 2 x3 = -1
2 X1 – x2 + 4 x3 = 2
>>flops(0)
>>X=A\b
>>flops
Los comandos introducidos se pueden guardar en ficheros mediante:
>> diary(’practica4’)
>> save datos4
% Para guardar además todas las matrices con datos
>> save datos4.dat –ascii
% o en formato ASCII
>> load pepe.txt
% se puede emplear para recuperarlas o para importar datos
si pepe.txt es un fichero ascii en el directorio matlab o en la carpeta indicada en "Current Directory".
2. Gráficos en MATLAB.
Existen diferentes posibilidades. Para estos datos, usando el comando rand que genera muestras con
distribución U[0, 1],
>> x=sin(0.1*pi*(1:20));
>> y=x+rand(1,20);
2
 Gráficos de dispersión
>> plot(x,y,’.’)
plot(x,y) no generará el resultado deseado, ya que une los puntos con líneas continuas.
 Gráficos temporales
>> plot(x)
>> plot(1:length(x), x)
>> plot([y, x])
 Gráficos de funciones
Para dibujar la función sin(x) en [− ,
>> x=[-pi:0.01:pi];
>> y=sin(x);
>> plot(x,y)
>> grid on
>> title(’funcion seno’)
>> text(-2,0.6,’y=sin(x)’)
o simplemente esto,
>> fplot(’sin(x)’,[-pi,pi])
] se puede hacer esto,
 Gráficos estadísticos
Se pueden hacer diferentes gráficos estadísticos, como el histograma y el gráfico de la caja,
>> x=randn(100,1);
% El comando randn genera muestras con distribución N(0, 1)
>> hist(x)
>> boxplot(x)
Pero también MATLAB hace gráficos más sofisticados, como añadir el ajuste lineal a un gráfico de dispersión,
gráficos de cuantiles para comparar dos muestras, o gráficos de la caja para más de una variable,
>> y=x+randn(100,1)/5;
>> plot(x,y,’.’)
>> lsline
>> qqplot(x,y)
>> boxplot([x,y])
3. Optimización Lineal en MATLAB.
LINPROG Linear programming.
X=LINPROG(f,A,b) se utiliza para resolver problemas de programación lineal de la forma:
min f'*x sujeto a: A*x <= b
Ejemplo: Encontrar los valores de x que minimice -5x1-4x2-6x3
sujeto a
x1 - x2 + x3 ≤ 20
3x1 + 2x2 + 4x3 ≤ 42
3x1 + 2 x2 ≤ 30
x1, x2, x3 ≥ 0
Introducir el vector de coeficientes de la función objetivo f = [-5; -4; -6] ; luego la matriz de restricciones
A = [1 -1 1
3 2 4
3 2 0];
b = [20; 42; 30];
lb = zeros(3,1);
Escribir el comando para resolver problemas de programación lineal x = linprog(f,A,b,[],[],lb);
x=
0.0000
15.0000
3.0000
3
Ejemplo de resolución del Problema 1 de la página:
http://halweb.uc3m.es/omar/taller/TallerEstadistica/PracticaExcel/practicaIO1.pdf
Una refinería de petróleo va a producir un nuevo tipo de gasolina mezclando los 4 tipos de gasolina disponibles
actualmente, que se han obtenido procesando diferentes tipos de crudo. Los crudos de origen son cuatro y
tienen distinta composición. Para simplificar el problema se supone que cada tipo de gasolina tiene un
porcentaje distinto de los aditivos A, B y C. La tabla siguiente indica estos porcentajes y el precio unitario para
los cuatro tipos de gasolina:
Las exigencias del mercado imponen que la gasolina que se va a producir debe tener al menos el 20% del
aditivo A, al menos un 30% del B y al menos un 20% del C. Además, no puede contener más de un 30% de la
gasolina de tipo 1 ni más de un 40% de la gasolina de tipo 2. Determinar la forma menos costosa de producir
gasolina con estas especificaciones.
Comenzamos por definir las cuatro variables del problema por xi como la proporción de gasolina del tipo i en un
litro de la mezcla.
La función objetivo es: min z = 43x1+31x2+47x3+37x4 ; que es el resultado de multiplicar el vector de precio por el
vector de las variables.
Las restricciones estarán dadas por el producto de la matriz de coeficientes y el vector de las variables, de la
siguiente forma:
80 x1 + 30 x2 + 70 x3 + 40 x4 ≥ 0.20 Restricción aditivo A
10 x1 + 30 x2 + 10 x3 + 50 x4 ≥ 0.30 Restricción aditivo B
10 x1 + 40 x2 + 20 x3 + 10 x4 ≥ 0.20 Restricción aditivo C
x1 +
x2 +
x3 +
x4 = 1
Restricción de mezcla
x1
≤ 0.3
x2
≤ 0.4
xi
≥ 0
con i=1,2,3,4
4. Cuestionario.
Utiliza MATLAB para resolver el problema 2 de la Práctica 1 , teniendo en cuenta que el objetivo de la empresa
es maximizar su beneficio:
1.
2.
3.
4.
Defina las variables, la función objetivo y las restricciones del problema.
¿Cuál es la cantidad que debe fabricar de cada producto?
¿Cuál es el máximo beneficio que alcanzará la empresa?
¿Qué plantas requieren usar toda su capacidad disponible?
5. Problemas Propuestos.
Desarrollar los modelos correspondientes a los problemas 3, 4 y 5 de la Práctica 1 de Programación Lineal y
hacer sus correspondientes programas en Matlab para resolverlos.
Referencias
 Cesar Pérez (2002). MATLAB y sus aplicaciones en las ciencias y la ingeniería. Editorial:, Pearson Prentice
Hall Madrid.

Introducción al MATLAB 7.0. http://mat21.etsii.upm.es/ayudainf/aprendainf/Matlab70/matlab70primero.pdf

Otras versiones de MATLAB en http://www.tayuda.com/ayudainf/aprendainf/varios.htm
4
Descargar