0% encontró este documento útil (0 votos)
3 vistas225 páginas

Clases Programacion Lineal 2024

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 225

Departamento de Matemática

UNIVERSIDAD NACIONAL
DE MISIONES

Investigación Operativa
Cristian Kornuta
Problemas
lineales
y
No lineales MATLAB/OCTAVE
SciPy
GAMS
OptimGraf 1.3
KORNUTA, Cristian Andres
KORNUTA, Cristian Andres
Nacido en Posadas, Provincia de Misiones, el 24 de febrero de 1979.
Ex alumno de la Maestría en Tecnología de la información año 2016 (Tesis pendiente).
Licenciado en Sistemas de Información; cuyo tema de tesis fue: “Desarrollo De Un Controlador Difuso Para La Navegación De Robots Móviles ISBN: 978-950-766-
108-2”, F.C.E.Q. y N.- U.Na.M.. Nota: 10, Recibido con honoren; 2014.
Ex alumno de la Carrera Analista en Sistema de Computación, 3º año, F.C.E.Q. y N.-U.Na.M. (Tesis pendiente)

Actividades Académicas:
Auxiliar Docente de Segunda en la cátedra Matemática IV (Análisis numérico)(Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M.) Años: 2017 - Actualidad;
Auxiliar Docente de Segunda en la cátedra Investigación de Operaciones (Analista en Sistemas-F.C.E.Q. y N.- U.Na.M.-Licenciatura en sistemas, F.C.E.Q. y N. -
U.Na.M.) Años: 2013 - Actualidad;
Auxiliar Docente de Segunda en la cátedra Teoría de la Computación (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M – Profesorado universitario en informática -
F.C.E.Q. y N.) Año: 2013- Actualidad.
Auxiliar Docente de Segunda en la catedra Introducción a la informática (Analista en Sistemas - F.C.E.Q. y N. - Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M –
Profesorado universitario en informática - F.C.E.Q. y N.) Años: 2010 - Actualidad.
Jefe de trabajos prácticos de la cátedra Investigación de Operaciones (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2015-2016.
Profesor de la cátedra Introducción a la Informática (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2013, 2014.
Profesor del taller de informática (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2013.
Profesor de consulta de la cátedra Introducción a la Informática (Analista en sistemas, F.C.E.Q. y N. - U.Na.M – sede Iguazú). Año: 2013.
Auxiliar Docente de primera en las cátedras Inteligencia Artificial y Modelos y Simulación (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2013, 2014.
Auxiliar Docente de Segunda en las cátedras Inteligencia Artificial y Modelos y Simulación (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2011, 2012.
Auxiliar Docente de Segunda en la cátedra Matemática III (Calculo)(-Analista en Sistemas-Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2010-2016.
Auxiliar Docente de Segunda en la cátedra Paradigma del lenguaje (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2010-2012.
Auxiliar Docente de Segunda en la cátedra Matemática II (Algebra lineal)(Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M ) Año: 2011-2013.
Auxiliar Docente de Segunda en la cátedra Computación I (Arquitectura del computador)(Analista en Sistemas-Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M )
Año: 2010.
KORNUTA, Cristian Andres
Actividades En Gestión:
Coordinador Estudiantiles de la Carrera informática - (Licenciatura en sistemas, F.C.E.Q. y N. - U.Na.M), año 2011-2013.

Actividades En Investigación:
Ex becario del CEDIT En el proyecto del desarrollo de un Modelo de Gasificación a partir de Aserrín.
A trabajado conjuntamente con él Prof. Matiauda, Mario, en el desarrollo de software con MATLAB y Octave, relacionado con la Educción y el desarrollo de
aplicación que contribuyan a la enseñanza de la matemática. Años: 2017-2018.
https://sites.google.com/site/mariomatiauda/home/acerca-de-mario-matiauda

Becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “HIDRÓGENO Y EL CHAR COMO CATALIZADOR”; Años:
2022-2024.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “LOS RESIDUOS DEL ASERRADO Y EL HIDRÓGENO”;
Años: 2018-2021.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “HIDROGENO EN LA GASIFICACION DE ASERRRIN
CATALIZADA CON DOLOMITA”; Años: 2015-2017.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “Desarrollo E Implementación De Prototipos De
Robots Móviles Para La Navegación Autónoma Utilizando Técnicas De Inteligencia Artificial”; Años: 2013-2016.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones en el Proyecto “Diseño E Implementación De Una GUI Para Octave
Orientado Al Calculo” ; Años: 2013-2016.
Ex becario en el Trabajo independiente de investigación “Estrategias Didácticas en el uso de Herramientas Software para Favorecer la Comprensión de los Alumnos
en la Enseñanza sobre Compiladores” . Año: 2012-2013.
Ex becario de la Secretaría General de Ciencia y Técnica de la Universidad Nacional de Misiones , en el Proyecto “Aplicación De Inteligencia Artificial A La Navegación
De Robots Móviles Utilizando Player/Stage” perteneciente a la F.C.E.Q. y N. - U.Na.M. Años: 2011-2013.
Coautor del libro “Introducción al Algebra Lineal, Elementos de Algebra Lineal”, Autores Matiauda Mario, Kornuta Cristian - ISBN: 978-950-579-238-2.
Colaborador del libro “RESEÑA DE OPTIMIZACIÓN MATEMÁTICA no lineal” Autor Matiauda Mario año 2021 – Publicación independiente, Cuaderno de catedra –
Paginas 253-256 OptimGraf.

Posee Numerosas Publicaciones con Referato y Participación en Encuentros y Conferencias en condición de Disertante, Autor, Co-autor y Expositor, desde el 2010-
Actualidad.
http://sedici.unlp.edu.ar/discover?query=kornuta+cristian&submit=

Tesis: Director y codirector


Título: ANÁLISIS DE MODELOS DE PROCESO DE PRUEBAS DE SOFTWARE. OBTENCIÓN DE LAS MEJORAS PRÁCTICAS DEL MODELO TMMI PARA PYMES
DEDICADAS A LA INDUSTRIA DEL SOFTWARE.
Institución: Facultad de Ciencias Exactas Químicas y Naturales (sede Apóstoles), F.C.E.Q. y N. - Universidad Nacional de Misiones, U.Na.M.
Aut:or: Matías Ezequiel Piloni.
Título: PROPUESTA DE SOFTWARE CON TECNOLOGÍA DE REALIDAD AUMENTADA
Una aplicación móvil aplicada a la promoción de la yerba mate sobre los envases del producto
Institución: Facultad de Ciencias Exactas Químicas y Naturales (sede Apóstoles), F.C.E.Q. y N. - Universidad Nacional de Misiones, U.Na.M.
Autor: Diego Motta.
Título: DESARROLLO DE UN SISTEMA DE NAVEGACION Y TELEMETRIA EN TIEMPO REAL PARA UN ROBOT MOVIL DESDE UN SMART PHONE VIA WiFi (IEEE
802.11)
Institución: Facultad de Ciencias Exactas Químicas y Naturales (sede Apóstoles), F.C.E.Q. y N. - Universidad Nacional de Misiones, U.Na.M.
Autor: Miguel Cichajanowiski.

Ámbito publico:
Desarrollador de software orientado al ámbito hotelero.
PROGRAMACIÓN LINEAL
INTRODUCCIÓN A MATLAB
MÉTODO SIMPLEX
TEMAS MATLAB
OCTAVE
PYTHON
GAMS
PROGRAMACIÓN NO LINEAL
MATLAB
OCTAVE
PYTHON
TEMAS GAMS
I N T RO D U C C I Ó N A

MATLAB/Octave
Bard…Octave es la
alternativa libre y
gratuita al Matlab…
MATLAB está presente en:
✓Sistemas de seguridad activa de automóviles
✓Naves espaciales interplanetarias
✓Dispositivos de monitorización de la salud
✓Redes eléctricas inteligentes
✓Redes móviles LTE.
✓Se utiliza para aprendizaje automático
✓Procesamiento de señales
✓Procesamiento de imágenes
✓Visión artificial
✓Comunicaciones
✓Finanzas computacionales
✓Robótica
¿QUE ES MATLAB?
• MATLAB es un lenguaje de programación
funcional, específicamente diseñado para el Cálculo
Numérico, representando en la práctica por un conjunto
de herramientas.
¿QUE ES MATLAB?
• En ciencias de la computación, la
programación funcional es un paradigma de
programación declarativa basado en el uso de
funciones matemáticas.
¿QUE ES MATLAB?
Entrada • Parámetro

• Subrutina
Proceso o función

• Valor de
Salida retorno
¿QUE ES MATLAB?
Matlab = Matrix Laboratory.
Programa comercial de The Mathworks Inc
(Natick, MA). http://www.mathworks.com

Creado en California por Jack Little and Cleve Moler en 1984,


para realizar cálculo matricial en
ordenadores sin necesidad de
conocimientos de programación.
¿QUE ES MATLAB?
Sistemas operativos donde MATLAB corre
• Unix
• Linux
• Solaris
• MacOS
• Windows
¿QUE ES OCTAVE?
▪ GNU Octave es un lenguaje de alto nivel
especialmente creado para el computo
numérico, usado típicamente para la resolución de
problemas lineales y no lineales, algebra lineal,
análisis estadístico, y para otras experiencia de
experimentó de performance numérica.
▪ Posee un entorno grafico para su uso.
▪ GNU Octave es de libre distribución.
▪ Se encuentra licenciado bajo los términos de la licencia
GNU General Public License publicado por la Free
Software.
El entorno
EL ENTORNO DE MATLAB

Ventana de comandos
Directorio de trabajo
Ventana del área de trabajo

Historial de comandos
IMPORTANCIA DE LA VENTANA HISTORIAL DE COMANDOS
▪ Porque permite revisar sesiones
anteriores
▪ Para la transferencia de comandos a la ventana de
comandos.
VENTANA DEL ÁREA DE TRABAJO (WORKSPACE)
▪ La ventana del área de trabajo le
mantiene informado de las variables que
usted define conforme ejecuta
comandos en la ventana de comandos.
VENTANA DE DOCUMENTO (DOCUMENT WINDOW)
▪ Hacer doble clic sobre cualquier variable
mencionada en la ventana del área de
trabajo lanza automáticamente una
ventana de documento que contiene el
Array Editor (editor de arreglos).
▪ Los valores que se almacenan en la variable se
despliegan en un formato de hoja de cálculo.
▪ Puede cambiar los valores en el editor de arreglos o
puede agregar nuevos valores.
VENTANA DE DOCUMENTO (DOCUMENT WINDOW)
VENTANA DE DIRECTORIO ACTUAL (CURRENT DIRECTORY)
▪ La ventana de directorio actual lista
todos los archivos en una carpeta de la
computadora llamada directorio actual.
▪ El directorio actual se puede cambiar al seleccionar
otro directorio de la lista desplegable que se ubica
junto a la lista de directorio o al navegar entre los
archivos de su computadora.
EL EDITOR
EL EDITOR DE MATLAB
▪ El editor muestra con diferentes colores los
diferentes tipos o elementos de la sintaxis. (en
verde los comentarios, en azul las cadenas de
caracteres, etc.). El editor además indica que las comillas o
paréntesis que se abren se cierren correctamente.
EL EDITOR DE MATLAB
LA BARRA DE HERRAMIENTAS ESTANDAR
Abrir nuevo M-file archivo
Abrir nuevo M-file existente Paso, ejecuta la linea actual
Guardar M-file existente Paso a paso, ejecutar la línea actual del M-archivo
Cortar Pegar Paso salida, ejecuta las llamadas a funciones o
Copiar
subrutinas

Deshacer Sale del modo depuracion


Imprimir Ir a una funcion Continue, Reanuda la ejecución del M-archivo hasta la
Rehacer finalización o hasta un punto de interrupción.
Buscar
Depurar, Limpiar puntos de interrupción en todos los archivos

Asigna/Limpia un punto de interrrupcion


ARCHIVOS *.m DE MATLAB
▪ MATLAB permite que utilicemos cualquier editor (edit de
DOS, Word, Notepad, etc.), para la creación de estos
archivos *.m y su posterior ejecución en
MATLAB/Octave, ya que los archivos *.m son sólo archivos de
texto con extensión *.m como lo dijimos anteriormente.
ARCHIVOS *.m DE MATLAB
▪ Un archivo *.m de MATLAB, no es más que un archivos de
texto ASCII, con la extensión *.m, que contienen definiciones de
funciones o conjuntos de comandos que MATLAB puede interpretarlos y
ejecutarlos; similar a los archivos de código fuente de C o Pascal.

nro = input('Ingrese un número positivo: ');


if nro==1
disp('Ud. ingreso 1');
elseif nro==2
disp('Ud. ingreso 2');
else
disp('El número es mayor que 2');
end
TOOLBOX
TOOLBOX
Los Toolbox son librerías de funciones MATLAB
asociadas a diferentes áreas como ser:
✓ Inteligencia artificial
✓ Financieras
✓ Procesamiento de imágenes
✓ Procesamiento de señales
TOOLBOX
En MATLAB: Start->Toolboxes
ALGUNOS TOOLBOXES
✓ Nonlinear Control Design Toolbox
✓ Optimization Toolbox
✓ Quantitative Feedback Theory Toolbox
✓ Signal Processing Toolbox
✓ Spline Toolbox

✓ Statistics Toolbox
✓ Symbolic Math Toolbox
✓ System Identification Toolbox
ALGUNOS TOOLBOX
IMAGE PROCESSING TOOLBOX
• Es un amplio conjunto de algoritmos estándar
y herramientas gráficas para el procesamiento de
imágenes, análisis, visualización y desarrollo
de algoritmos.
• Se puede realizar la mejora de la imagen, reducción de ruido, la
segmentación de imágenes, transformaciones espaciales etc.
ALGUNOS TOOLBOX
IMAGE PROCESSING TOOLBOX
ALGUNOS TOOLBOX
NEURAL NETWORK TOOLBOX
• Proporciona herramientas para el diseño,
implementación, visualización y simulación
de redes neuronales.
• Las redes neuronales se utilizan para aplicaciones en el análisis
formal, como reconocimiento de patrones y la identificación de
sistemas no lineales y control.
• Ejemplo reconocimientos de rostros,
matriculas, controles de calidad etc.
ALGUNOS TOOLBOX
NEURAL NETWORK TOOLBOX
ALGUNOS TOOLBOX
STATISTICS TOOLBOX
• Proporciona un conjunto completo de herramientas para
evaluar y entender los datos. Incluye funciones y
herramientas interactivas para el modelado de
datos, análisis de tendencias históricas, la simulación de
sistemas, desarrollo de algoritmos estadísticos; el aprendizaje y
la enseñanza de la estadística.
ALGUNOS TOOLBOX
STATISTICS TOOLBOX
Comandos…
Cuestiones básicas
COM
AND
OS
Cuestiones básicas
Al momento de realizar un cálculo a este se le asigna a una
variable en concreto, el resultado queda guardado en ella.
Ejemplo.
>> x=8+7
x=
15
COM
AND
OS
¿Cómo cargar un vector?
Para definir un vector fila, es suficiente escribir sus
coordenadas entre corchetes.
Ejemplo:
>> v=[2 4 6] % Vector de 3 coordenadas
v=

246

>> w=[1 2 3];


COM
AND
OS
¿Cómo cargar un vector?
Hay una serie de ideas para destacar con este
comando… entre ellas es que se puede ingresar un vector separados
por comas.
Ejemplo:
>> c=[2 ,4, 6]
c=
246
COM
AND
OS
¿Cómo cargar un vector?
MATLAB contempla diferentes sintaxis para definir un vector
Ejemplo:
D=(1:2:15)

D=
1 3 5 7 9 11 13 15
COM
AND
OS
¿Cómo cargar un vector?
MATLAB contempla diferentes sintaxis para definir un vector
Ejemplo:
p=(15:-2:0)

p=
15 13 11 9 7 5 3 1
COM
AND
OS
¿Cómo cargar un vector?
Si lo que conocemos del vector es que la primera
coordenada vale 0, la última 10 y que tiene 6 en total,
escribiremos:
>> y=linspace(0,10,6)

y=
0 2 4 6 8 10
COM
AND
OS
¿Cómo hallar la traspuesta?
Para allá la traspuesta de un vector o matriz simplemente se
agrega la comilla simple al vector definido
Ejemplo
>>c=[2:1:6] '

c=
2
3
4
COM
AND
OS
¿Cómo hallar la norma?
Ejemplo
>>v3=1:3:13
v3 =
1 4 7 10 13
>>norm(v3,1)

ans =

35
Matrices y MATLAB
• Las matrices son, en esencia, los objetos matemáticos con los
que trabaja MATLAB, es decir que todas las variables
representan matrices, de modo que, los escalares quedan
caracterizados por matrices 1*1 y los vectores por matrices fila
o columna.

Para introducir matrices se siguen las siguientes reglas:


• Los elementos de la matriz van encerrados entre corchetes.
• Los elementos de una fila se separan con coma o espacio.
• Las filas se separan entre punto y coma.
COM
AND
OS
¿Cómo cargar un vector?
Para la carga de un vector columna lo definimos de la
siguiente forma.
Ejemplo:
>> t=[1;9;8]
t=
1
9
8
COM
AND
OS
¿Cómo cargar una matriz?
Ejemplo:

>>B=[1 2 3;4 5 6;7 8 9] % Asignamos a la variable B una matriz 3x3


B=
1 2 3
4 5 6
7 8 9
P=
10 11 12
¿Cómo cargar una matriz? 13 14 15
Ejemplo:
16 17 18
>>P=[10 11 12
13 14 15 0 0 0
16 17 18
0 0 0]
COM
P= AND
10 11 12 OS
13 14 15

16 17 18

0 0 0
P=
10 95 12
¿Cómo cargar una matriz? 13 14 15
Ejemplo:
16 17 18
>> P(1,2)=95
0 0 0
% Asignamos el valor 95 en la posicion fila 1 , columna 2
P=

95
10 12
COM
13 14 15 AND
16 17 18 OS
0 0 0
COM
AND P=
OS
10 11 12
Acceso a los elementos de una matriz 13 14 15
Cada elemento de una matriz (entrada) se identifica escribiendo el
nombre de la matriz y, entre paréntesis, sus respectivos índices: 16 17 18
Ejemplo.
0 0 0
%Elemento en la primera fila y tercera columna de P

>> P(1,3)

ans =
12
COM
AND P=
OS
10 11 12
Acceso a los elementos de una matriz
13 14 15
También se puede acceder a un fila o columna entera.
Ejemplo. 16 17 18
>> P(:,2) % Se accede a los valores de la segunda columna.
ans = 0 0 0
11
14
17
0
>> P(2,:) % Se accede a los valores de la segunda fila.
ans =
13 14 15
P=
10 11 12
Acceso a los elementos de una matriz 13 14 15
Se puede conocer siempre el tamaño de una matriz y la 4
16 17 18
longitud de un vector:
0 0 0

>> size(P) %Dimensiones de la matriz L (número de filas


y de columnas) 3
COM
ans = AND
4 3
OS
P=
10 11 12
Acceso a los elementos de una matriz 13 14 15
>>tril(P) % Retorna la parte triangular inferior de P 16 17 18
0 0 0
ans =
10 0 0
COM
13 14 0
AND
16 17 18 OS
0 0 0
P=
10 11 12
Acceso a los elementos de una matriz 13 14 15
>>triu(P) % Retorna la parte triangular superior de P 16 17 18
0 0 0
ans =
10 95 12
COM
0 14 15
AND
0 0 18 OS
0 0 0
P=
10 11 12
Acceso a los elementos de una matriz 13 14 15
>>diag(P) % Retorna la matriz diagonal de P 16 17 18
0 0 0
ans =
10
COM
14
AND
18 OS
COM
AND
Operaciones con matrices OS

+ adición o suma
– sustracción o resta
* multiplicación
' traspuesta
^ potenciación
COM
AND
Operaciones con matrices OS

\ división-izquierda
/ división-derecha
.* producto elemento a elemento
./ y .\ división elemento a elemento
.^ elevar a una potencia elemento a
elemento
Algunas funciones
Matrices especiales

▪ Matrices aleatorias
>>rand(2,3) %Número uniformemente distribuidos entre 0 y 1
▪ Matrices aleatorias
>>randn(2,3) %Números normalmente distribuidos
▪ Matrices mágica

>>magic(3)
FUNCIONES PARA EL MANEJO
DE VARIABLES
EN EL ESPACIO DE TRABAJO
FUNCIONES SIMBOLICAS Y OPERACIONES FUNCIONALES
disp(X)
• Muestra un array sin incluir su nombre

>> disp(P)
1 2 3
4 5 6
8 9 7

>> disp(g)
cos(x) + 2*x^2 - x^3
FUNCIONES SIMBOLICAS Y OPERACIONES FUNCIONALES
length(X)
• Muestra la longitud del vector X y, si X es una matriz o array,
muestra su mayor dimensión

>> length(B)
ans =
3
FUNCIONES SIMBOLICAS Y OPERACIONES FUNCIONALES
who
• Lista las variables del workspace

>> who
Your variables are:

A B a ans b c f f2 g h rho t x y z
Limite y Derivada
Función Limit
• Limit
• limit(F) usa a = 0 como el punto límite.
>>syms x
>>limit(sin(x)/x)
ans = 1
• limit(M, x, a, 'right') o limit (f, x, a, "izquierda")
>>limit(1/x,x,0,'right')
ans = Inf
>>limit(1/x,x,0,'left')
ans = -Inf
Función Limit
• Limit
• limit(f,x,a) tiende el límite de la expresión simbólica
como
𝐱 −> 𝐚.
>>limit((sin(x+h)-sin(x))/h,h,0)
ans=cos(x)
>>limit(F,a) % Omitiendo el valor de x;
limit(x^2/x)
ans= 0 ; x=0
Función Limit
• Limit
• limit(F) usa a = 0 como el punto límite.
limit(sin(x)/x)
ans = 1
• limit(M, x, a, 'right') o limit (f, x, a, "izquierda")
especificar la dirección de un límite, de un solo lado.
limit(1/x,x,0,'right')
ans = Inf
limit(1/x,x,0,'left')
ans = -Inf
Función Diff
• Diff
• diff(S) diferencia una expresión simbólica S con
respecto a su variable libre.
>>diff(sin(x^2))
ans =
2*x*cos(x^2)
• diff(S, 'v') diferencia S con respecto a la v.
>>diff(t/x^2,'x’)
ans =
-(2*t)/x^3
Integrales
Funciones De Integración
• int(f) Regresa la integral de la expresión f con
respecto a la variable independiente por defecto.

න 𝑥3 + 𝑧2

>>y=sym('x^3+z^2’)
>>int(y)
ans =
1/4*x^4+Z^2*X
Funciones De Integración
• int(f,' t') Regresa la integral de la expresión 𝑓 con
respeto a la variable 𝑡.

න 𝑥3 + 𝑧2

>>y=sym('x^3+z^2’)
>>int(y,'z’)
ans =
x^3*z+l/3*z^3
Problemas
lineales
MATLAB
Graficas
TOOLBOX GRAFICOS
TOOLBOX GRAFICOS
TOOLBOX GRAFICOS
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
ALGUNAS GRAFICAS EN MATLAB
TIPOS DE GRAFICOS EN 2D
• plot(x,y) • bar(x)
• polares(x,y) • barh(x)
• semilogx(x,y) • pie(x)
• semilogy(x,y) • hist(x)
• loglog(x,y)
GRAFICAS
• Pasos
• Cargar los datos Ej.: x = 0:.1:10;
• Procesar datos Ej.: y=10.^x
• Usar función de creación del grafico Ej.: plot
• Establecer las propiedades a la grafica
• Agregar los objetos a la grafica
• etc.
Control de ejes
axis ([ xmin xmax ymin ymax ]) % Fija los limites de
los %ejes x e y
axis equal % mismo ratio de aspecto x e y
axis normal o auto % valor por omisión
axis square % Ajusta los ejes para que el grafico
sea %cuadrado ( o cubico en 3D)
axis off | on % Oculta o muestra los ejes (lineas,
marcas y etiquetas asociadas)
90
0.5
120 60
0.4

0.3
150 30
0.2

Comando polares(x,y)
0.1

180 0

polar(angulos, radios)
% Dibuja las coordenadas polares 210 330

% en un plano, indicando los


% ángulos y el radio 240 300
% de cada punto 270

x=0:0.01:2*pi;
y=abs(sin(2*x).*cos(2*x))
polar(x,y);
Graficas logarítmicas
• loglog (x, y) : ambos ejes en escala
logarítmica
• semilogx(x, y): eje x logarítmico
• semilogy(x, y): eje y logarítmico
9
x 10
10

Comando semilogx(x,y) 6

x = 0:.1:10; 4

y=10.^x 2

semilogx(x,y) 0
10
-1 0
10
1
10
10
10

8
10

Comando semilogy(x,y)
6
10

x = 0:.1:10; 4
10

y=10.^x 2
10

semilogy(x,y) 0
10
0 1 2 3 4 5 6 7 8 9 10
50
10

40
10

Comando loglog(x,y)
30
10

x = logspace(-1,2); 20
10

y=exp(x) 10
10

loglog(x,y,'-s') 0
10
-1
10
0
10
1
10
2
10
1

0.9

0.8

0.7

Comando bar(x)
0.6

0.5

x = -2.9:0.2:2.9; 0.4

0.3

y=exp(-x.*x) 0.2

0.1

bar(x,y); 0
-3 -2 -1 0 1 2 3
3

Comando barh(x)
0

-1
x = -2.9:0.2:2.9;
-2

y=exp(-x.*x)
-3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

barh(x,y,'r')
Comando pie(x)
x = [1 3 0.5 2.5 2];
explode = [0 1 0 0 0];
pie(x,explode)
Comando hist(x)
• Muestran la distribución de una serie de datos,
representando cuantos puntos hay en cada
intervalo
450

400

350

300

Comando hist(x) 250

200
x = -4:0.1:4; 150

y = randn(10000,1); 100

50

hist(y,x) 0
-5 -4 -3 -2 -1 0 1 2 3 4 5
Objetos y mas para las…
Graficas
1

0.8

0.6

0.4

0.2

Coseno Seno
Comando plot(x,y,x1,y1)
0

-0.2

% Mas de una representación-0.4


% en una misma grafica -0.6

-0.8

x=0:0.05:5; -1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

x1=0:0.05:5;
y=sin(x.^2);
y1=cos(x.^2);
plot(x,y,x1,y1)
1

0.8

0.6

0.4

0.2

Comando plot(x,y,x1,y1) 0

-0.2
Color -0.4

plot(x,cos(x),‘--r‘) -0.6

-0.8
r (Red)
-1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
g (Green)
b (Blue)
c (Cyan)
m (Magenta)
y (Yellow)
k (blacK)
w (White)
1

0.8

0.6

0.4

0.2

Comando plot(x,y,x1,y1) -0.2

-0.4

Estilo de Líneas -0.6

-0.8

plot(x,cos(x),'--r‘) -1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

- (solida)
-- (trazas)
: puntos)
-. (líneas y puntos)
Comando plot(x,y,x1,y1)
Marcadores plot(x,cos(x),'-ro‘)
Marcadores:
+, o, *, ., x, s (square)
d (diamante),
^ v > o < (triângulos en distinto sentido)
p (estrella 5 de puntas, pentagrama)
h (estrella 6 puntas, hexagram)
OBJETOS PARA LOS GRÁFICOS
Podemos añadir objetos a los grafico
xlabel('etiqueta del eje x')
ylabel('etiqueta eje y')
title('titulo del grafico')
text (x, y, 'texto') % Si x e y son vectores, el %texto
se repite
gtext('texto') % la posición se indica con el %ratón.
Leyenda
Añade la leyenda del eje, por cada serie de datos
mostrada
legen('leyenda 1',leyenda 2','location', posición)
1
cos x
0.8
sinx
0.6

0.4

Leyenda
0.2

-0.2

x = -pi:pi/20:pi; -0.4

-0.6

plot(x,cos(x),'-ro',x,sin(x),'-b.'); -0.8

-1
-4 -3 -2 -1 0 1 2 3 4

legend('cos_x','sin_x',2);
1
cos x
0.8
sinx
0.6

0.4

Control de ejes
0.2

axis: controla el escalado y -0.2

-0.4
apariencia de los ejes -0.6

-0.8

-1

axis
-4 -3 -2 -1 0 1 2 3 4
Gráficos en
MATLAB
Segunda parte
Elementos Del Calculo En MATLAB
TIPOS DE GRAFICOS EN 3D
• Plot3(x,y,z)
• Comet3(x,y,z)
• Mesh(x,y,z)
• Surfc(x,y,z)
• Contour3(x,y,z)
• Pcolor(x,y,z)
40

30

Comando plot3(x,y,z) 20

z = 0:pi/50:10*pi; 10

x=sin(z) 0
1
y=cos(z) 0.5
0.5
1
0
0
-0.5
-0.5
-1 -1
plot3(x,y,z)
grid on
axis square
Comando comet3(x,y,z)
z = -10*pi:pi/250:10*pi;
x=(cos(2*z).^2).*sin(z)
y=(sin(2*z).^2).*cos(z)

grid on
comet3(x,y,z);
Comando mesh(x,y,z)

Mesh(x,y,z) o meshgrid (z,y,z)


Representan la altura de una serie de puntos en
una rejilla
Comando mesh(x,y,z)
[x,y] = meshgrid(-3:.125:3);
z = peaks(x,y);

mesh(x,y,z)
grid on
5

Comando surfc(x,y,z)
0

[x,y,z] = peaks(30); -5

surfc(x,y,z) -10

2
3

axis([-3 3 -3 3 -10 5]) 0


-1
0
1
2

-2 -2

grid on -3
10

Comando contour3(x,y,z) 0

[x,y,z] = peaks(30); -5

-10

2
3
2
0 1
contour3(x,y,z) -2 -2
-1
0

-3

grid on
Comando pcolor(x,y,z)
n = 6;
r = (0:n)'/n;
theta = pi*(-n:n)/n;

x = r*cos(theta);
y = r*sin(theta);
c = r*cos(2*theta);
pcolor(x,y,c)
Superficie de revolución
• Una superficie de revolución es aquella que se
genera mediante la rotación de una curva plana, o
generatriz, alrededor de una recta directriz, llamada
eje de rotación, la cual se halla en el mismo plano
que la curva.
Superficie de revolución de perfil 2+cost
t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(2+cos(t));
surf(X,Y,Z)
axis square
xlabel('x');ylabel('y');zlabel('z')
Superficie de revolución de perfil 2+cost

Superficie "Tobogán
u=(0:pi/8:4*pi)';
%vector columna de m=33 elementos
v=0:pi/16:2*pi;
%vector fila de n=33 elementos
X=cos(u)*(2+sin(v));
%X, Y y Z son matrices de orden mxn=33x33
Y=sin(u)*(2+sin(v));
Z=u*ones(size(v))+ones(size(u))*cos(v);
mesh(X,Y,Z)%surfl(X,Y,Z)
%surf(X,Y,Z)
axis([-4 4 -4 4 0 10])
% se multiplica por ones(size()) en Z para la
% consistencia del producto matricial
Problemas
lineales
MATLAB/OCTAVE
Método
Simplex/Matricial
Algebraico
Maximizar

Todas las restricciones son ≤ Salvo


Primal las no negatividad (≥)

Resolución de forma
Método Algorítmica - Vectorial
Simplex
Maximizar - Minimizar

Gran M - 2 Fases Restricciones ≤ y ≥, =

Resolución de forma
Algorítmica – Vectorial (DUAL)
MATLAB/OCTAVE
Ejemplo 2.1-1 (La compañía Reddy Mikks)
Reddy Mikks produce pinturas para interiores y
exteriores con dos materias primas, M1 y M2.
La tabla siguiente proporciona los datos
PROBLEMAS básicos del problema.
LINEALES Tn de MP/ton de producto Disponibilidad
Barniz exterior Barniz interior diaria max
toneladas
Materia 6 4 24
primaM1
Materia 1 2 6
Diapositiva de catedra
primaM2
2.1 Taha Investigación de Utilidad por 5 4
operaciones
ton($1000)
▪MATLAB/OCTAVE
Maximizar
Tn de MP/ton de Disponibilidad diaria
producto max toneladas
𝒁 = 𝟓𝒙𝟏 + 𝟒𝒙𝟐
Barniz Barniz
exterior interior
Materia 6 4 24 sujeta a
primaM1
Materia 1 2 6 𝟔𝒙𝟏 + 𝟒𝒙𝟐 ≤ 𝟐𝟒
primaM2 𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟔
Utilidad por 5 4
ton($1000) −𝒙𝟏 + 𝒙𝟐 ≤ 𝟏
𝒙𝟐 ≤ 𝟐
𝒙𝟏, 𝒙𝟐 ≥ 𝟎
Maximizar
▪MATLAB/OCTAVE
Paso 1: Despejar la F.O. e incluir las variables Holgura
𝑍 −5𝑥1 −4𝑥2 = 0
𝒁 = 𝟓𝒙𝟏 + 𝟒𝒙𝟐
6𝑥1 +4𝑥2 +𝑺𝟏 = 24
sujeta a 𝑥1 +2𝑥2 +𝑺𝟐 = 6
𝟔𝒙𝟏 + 𝟒𝒙𝟐 ≤ 𝟐𝟒 −𝑥1 + 𝑥2 +𝑺𝟑 = 1

𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟔 𝑥2 +𝑺𝟒 = 2

−𝒙𝟏 + 𝒙𝟐 ≤ 𝟏 Paso 2: Elaborar la tabla del Simplex


𝒙𝟐 ≤ 𝟐
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
𝒙𝟏, 𝒙𝟐 ≥ 𝟎 Z 1 −5 −4 0 0 0 0 0
𝑺𝟏 0 6 4 𝟏 0 0 0 24
Que pasa cuando… 𝒙𝟏 = 𝟎 𝒙𝟐 = 𝟎; 𝑺𝟐 0 1 2 0 𝟏 0 0 6
𝑺𝟏 pasaría a valer 24, 𝑺𝟐 pasaría a valer 6, 𝑺𝟑 𝑺𝟑 0 −1 1 0 0 𝟏 0 1
pasaría a valer 1, 𝑺𝟒 pasaría a valer 2 𝑺𝟒 0 0 1 0 0 0 𝟏 2
▪MATLAB/OCTAVE
Paso 3: Aplicamos el algoritmo de optimización Simplex (Maximización)
a. Identificación de la columna pivote
format bank
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 −5 −4 0 0 0 0 0 Identificar en el TI=[1 -5 -4 0 0 0 0 0;0 6 4
𝑺𝟏 0 6 4 𝟏 0 0 0 24 renglon 1 𝑹𝟏 el 1 0 0 0 24;0 1 2 0 1 0 0 6;0
𝑺𝟐
menor valor -1 1 0 0 1 0 1;0 0 1 0 0 0 1 2]
0 1 2 0 𝟏 0 0 6
𝑺𝟑 0 −1 1 0 0 𝟏 0 1
𝑺𝟒 0 0 1 0 0 0 𝟏 2
b. Identificación del reglón pivote [v,c]=min(TI(1,:))
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 −5 −4 0 0 0 0 0
𝑺𝟏 0 6 4 𝟏 0 0 0 24 𝟐𝟒/𝟔 = 𝟒
𝑺𝟐 0 1 2 0 𝟏 0 0 6 𝟔/𝟏 = 𝟔
𝑺𝟑 0 −1 1 0 0 𝟏 0 1 𝟏/−𝟏 = −𝟏
TI(:,8)./TI(:,c)
𝑺𝟒 0 0 1 0 0 0 𝟏 2 𝟐/𝟎 = ∞
c. Volver 1 el elemento pivote
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 −5 −4 0 0 0 0 0
𝑺𝟏 0 6 4 𝟏 0 0 0 24
𝟏
∗ 𝑹𝟐 TI
𝟔
𝑺𝟐 0 1 2 0 𝟏 0 0 6
𝑺𝟑 0 −1 1 0 0 𝟏 0 1
𝑺𝟒 0 0 1 0 0 0 𝟏 2

Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 −5 −4 0 0 0 0 0
𝑺𝟏 0 1 2 𝟏 0 0 0 4 𝟏
3 𝟔 𝟔
∗ 𝑹𝟐 TI(2,:) =1/6.*TI(2,:)
𝑺𝟐 0 1 2 0 𝟏 0 0 6
𝑺𝟑 0 −1 1 0 0 𝟏 0 1
𝑺𝟒 0 0 1 0 0 0 𝟏 2
d. Aplicar la operación de eliminación reglón
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 −5 −4 0 0 0 0 0 𝟓 ∗ 𝑹𝟐 + 𝑹𝟏 TI
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4
𝑺𝟐 0 1 2 0 𝟏 0 0 6 −𝑹𝟐 + 𝑹𝟑
𝑺𝟑 0 −1 1 0 0 𝟏 0 1 𝑹𝟐 + 𝑹𝟒
𝑺𝟒 0 0 1 0 0 0 𝟏 2

Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 −2/3 5/6 0 0 0 20 𝟓 ∗ 𝑹𝟐 + 𝑹𝟏 TI(1,:) =5.*TI(2,:)+TI(1,:)
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4
𝑺𝟐 0 0 4/3 −1/6 𝟏 0 0 2 −𝑹𝟐 + 𝑹𝟑 TI(3,:) =-TI(2,:)+TI(3,:)
𝑺𝟑
TI(4,:) = TI(2,:)+TI(4,:)
0 0 5/3 1/6 0 𝟏 0 5 𝑹𝟐 + 𝑹𝟒
𝑺𝟒 0 0 1 0 0 0 𝟏 2
a. Identificación de la columna pivote
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 −2/3 5/6 0 0 0 20 El renglon 1
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4 𝑹𝟏 con el menor [v,c]=min(TI(1,:))
𝑺𝟐
valor
0 0 4/3 −1/6 𝟏 0 0 2
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5
𝑺𝟒 0 0 1 0 0 0 𝟏 2

b. Identificación del reglón pivote


Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 −2/3 5/6 0 0 0 20
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4 𝟒/(𝟐/𝟑) = 𝟔
𝑺𝟐 0 0 4/3 −1/6 𝟏 0 0 2 𝟐/(𝟒/𝟑) = 𝟑/𝟐 TI(:,8)./TI(:,c)
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5 𝟓/(𝟓/𝟑) = 𝟑
𝑺𝟒 0 0 1 0 0 0 𝟏 2 𝟐/𝟏 = 𝟐
c. Volver 1 el elemento pivote
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
TI
Z 1 0 −2/3 5/6 0 0 0 20
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4
𝟑
𝑺𝟐 0 0 4/3 −1/6 𝟏 0 0 2 ∗ 𝑹𝟑
𝟒
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5
𝑺𝟒 0 0 1 0 0 0 𝟏 2

Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 −2/3 5/6 0 0 0 20
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4
𝟑
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝟒
∗ 𝑹𝟑 TI(3,:) =3/4.*TI(3,:)
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5
𝑺𝟒 0 0 1 0 0 0 𝟏 2
d. Aplicar la operación de eliminación reglón
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅 TI
Z 1 0 −2/3 5/6 0 0 0 20 𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟏
𝒙𝟏 0 1 2/3 𝟏/𝟔 0 0 0 4 −𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟐
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝑺𝟑 0 0 5/3 1/6 0 𝟏 0 5 −𝟓/𝟑 ∗ 𝑹𝟑 + 𝑹𝟒
𝑺𝟒 0 0 1 0 0 0 𝟏 2 −𝑹𝟑 + 𝑹𝟓

Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
Z 1 0 0 4/3 1/2 0 0 21 𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟏 TI(1,:) =2/3.*TI(3,:)+TI(1,:)
𝒙𝟏 0 1 0 𝟏/𝟒 −1/2 0 0 3 −𝟐/𝟑 ∗ 𝑹𝟑 + 𝑹𝟐 TI(2,:) =-2/3.*TI(3,:)+TI(2,:)
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝑺𝟑 0 0 0 3/8 −5/4 𝟏 0 5/2 −𝟓/𝟑 ∗ 𝑹𝟑 + 𝑹𝟒 TI(4,:) =-5/3.*TI(3,:)+TI(4,:)
𝑺𝟒 0 0 0 1/8 −3/4 0 𝟏 1/2 −𝑹𝟑 + 𝑹𝟓
TI(5,:) = -TI(3,:)+TI(5,:)
Resultado
▪MATLAB/OCTAVE
Básicas 𝒁 𝒙𝟏 𝒙𝟐 𝑺𝟏 𝑺𝟐 𝑺𝟑 𝑺𝟒 𝑅
e. El procedimiento se repite
Z 1 0 0 4/3 1/2 0 0 21
hasta que las variables no
𝒙𝟏 0 1 0 𝟏/𝟒 −1/2 0 0 3
básicas sean cero o positivas
𝒙𝟐 0 0 1 −1/8 𝟑/𝟒 0 0 3/2
𝑺𝟑 0 0 0 3/8 −5/4 𝟏 0 5/2
𝑺𝟒 0 0 0 1/8 −3/4 0 𝟏 1/2 𝒙𝟏 = 𝟑
Maximizar
𝒙𝟏 = 𝟑/𝟐
𝒁 = 𝟓𝒙𝟏 + 𝟒𝒙𝟐
𝑍 = 21
sujeta a
𝟔𝒙𝟏 + 𝟒𝒙𝟐 ≤ 𝟐𝟒
𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟔 21 = 𝟓 ∗ 𝟑 + 𝟒 ∗ 𝟑/𝟐
−𝒙𝟏 + 𝒙𝟐 ≤ 𝟏
𝒙𝟐 ≤ 𝟐
𝒙𝟏, 𝒙𝟐 ≥ 𝟎
Problemas
lineales
MATLAB/OCTAVE
Método Simplex/
Forma Matricial
▪MATLAB/OCTAVE
Maximizar
𝒁 = 𝟑𝒙𝟏 + 𝟐𝒙𝟐 + 𝟓𝒙𝟑 + 𝒙𝟒
Sujeta a
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 ≤ 𝟒𝟑𝟎
𝟑𝒙𝟏 + 𝟐𝒙𝟑 + 𝒙𝟒 ≤ 𝟒𝟔𝟎
𝒙𝟏 + 𝟒𝒙𝟐 + 𝟑𝒙𝟒 ≤ 𝟒𝟐𝟎
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 ≤ 𝟓𝟎𝟎
▪MATLAB/OCTAVE
Maximizar 𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃
1 −3 −2 −5 −1 0 0 0 0 0
𝒁 = 𝟑𝒙𝟏 + 𝟐𝒙𝟐 + 𝟓𝒙𝟑 + 𝒙𝟒 𝒙𝟓 0 1 2 1 2 1 0 0 0 430
Sujeta a 𝒙𝟔 0 3 0 2 1 0 1 0 0 460
𝒙𝟕 0 1 4 0 3 0 0 1 0 420
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 ≤ 𝟒𝟑𝟎
𝒙𝟖 0 1 2 1 2 0 0 0 1 500
𝟑𝒙𝟏 ≤ 𝟒𝟔𝟎
+ 𝟐𝒙𝟑 + 𝒙𝟒
𝒙𝟏 + 𝟒𝒙𝟐 + 𝟑𝒙𝟒 ≤ 𝟒𝟐𝟎
𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝟐𝒙𝟒 𝟓𝟎𝟎 1 −𝑐 0 0

0 𝐴 𝐼 𝑏
▪MATLAB/OCTAVE
A es la matriz de coeficientes tecnológicos conforme
las restricciones. Tabla Simplex Inicial
b es un vector columna de términos independientes
conforme a las restricciones. 𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃
C es un vector renglón de coeficientes, conforme a la
función objetivo 1 −3 −2 −5 −1 0 0 0 0 0
CB es un vector renglón de coeficientes de variables de 𝒙𝟓 0 1 2 1 2 1 0 0 0 430
función objetivo, conforme transpuesto, se ubiquen en
la columna de base (básicas) en tabla simplex. 𝒙𝟔 0 3 0 2 1 0 1 0 0 460
Y es un vector renglón de variables duales (precios 𝒙𝟕 0 1 4 0 3 0 0 1 0 420
sombra) los que se localizan como coeficientes en
variables de holgura y/o artificiales del renglón Z. 𝒙𝟖 0 1 2 1 2 0 0 0 1 500
XB es un vector columna con valores de variables Cualquier tabla del simplex se
básicas en la columna solución. puede obtener a partir de:
B es la inversa de una matriz B, formada de
-1

columnas aj de coeficientes aij de restricciones, 𝟏 −𝒄 𝟎 𝟎 1 −𝑐 0 0


conforme a variables básicas (columna de base) en 𝟎 𝑨 𝑰 𝒃
tabla simplex. Supongamos una tabla inicial
Diapositiva de catedra 0 𝐴 𝐼 𝑏
▪MATLAB/OCTAVE
Tabla Simplex Inicial 1 −𝑐 0 0 Tabla Simplex Óptima

0 𝐴 𝐼 𝑏
𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃 𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃
1 −3 −2 −5 −1 0 0 0 0 0 1 4 0 0 3 1 2 0 0 1350
𝒙𝟓 0 1 2 1 2 1 0 0 0 430 𝒙𝟐 0 −0.25 1 0 0.75 0.5 −0.25 0 0 100
𝒙𝟔 0 3 0 2 1 0 1 0 0 460 𝒙𝟑 0 1.5 0 1 0.5 0 0.5 0 0 230
𝒙𝟕 0 1 4 0 3 0 0 1 0 420 𝒙𝟕 0 2 0 0 0 −2 1 1 0 20
𝒙𝟖 0 1 2 1 2 0 0 0 1 500 𝒙𝟖 0 0 0 0 0 −1 0 0 1 70

Cualquier tabla del simplex se puede obtener a partir de:

𝟏 −𝒄 𝟎 𝟎 𝟏 −𝟏
𝑪𝑩 𝑩 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
∗ =
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
Tabla Simplex Inicial Tabla Simplex Óptima
Diapositiva de catedra
▪MATLAB/OCTAVE
Lo primero que tenemos hacer es obtener la base óptima 1 2 1 2 2 1 0 0
3 0 2 1
𝐴= 𝐵= 0 2 0 0 Tabla inicial
𝑩𝑨𝑺𝑬 Ó𝑷𝑻𝑰𝑴𝑨 = 𝑿𝟐 𝑿𝟑 𝑿𝟕 𝑿𝟖 1 4 0 3 4 0 1 0
1 2 1 2 2 1 0 1
𝐷𝑒 𝑎ℎ𝑖 𝑞𝑢𝑒 𝐶𝐵 = 𝟐 𝟓 𝟎 𝟎 coef var. bás. tabla inicial 0.5 −0.25 0 0
𝐶= 𝟑 𝟐 𝟓 𝟏 0= 𝟎 𝟎 𝟎 𝟎
0.5 −0.25 0 0 −1 0 0,5 0 0
𝐵 =
0 0 −2 1 1 0
0 0.5
𝐶𝐵 𝐵−1 = 𝟐 𝟓 𝟎 𝟎 −1 0 0 1
−2 1 1 0
−1 0 0 1 𝑩𝑨𝑺𝑬 Ó𝑷𝑻𝑰𝑴𝑨 = Columnas de x2, x3,x7,x8
430
𝐶𝐵 𝐵−1 = 1 2 0 0 (sombra) 460
𝐶𝐵 𝐵−1 𝑏 = 1 2 0 0 = 𝟏𝟑𝟓𝟎
1 2 1 2 420
3 0 2 1 500
𝐶𝐵 𝐵−1 𝐴 = 1 2 0 0 ∙
1 4 0 3
1 2 1 2 0.5 −0.25 0 0 430 100
𝐶𝐵 𝐵−1 𝐴 = 7 2 5 4 0 0.5 0 0 460 230
𝐵−1 𝑏 = ∙ =
−2 1 1 0 420 20
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 7 2 5 4 − 3 2 5 1 −1 0 0 1 500 70
Tabla Simplex Optima
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 4 0 0 3
𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
Diapositiva de catedra 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
▪MATLAB/OCTAVE 1 −𝑐 0 0
Lo primero que tenemos hacer es obtener la base óptima 0 𝐴 𝐼 𝑏
𝑩𝑨𝑺𝑬 Ó𝑷𝑻𝑰𝑴𝑨 = 𝑿𝟐 𝑿𝟑 𝑿𝟕 𝑿𝟖

𝐷𝑒 𝑎ℎ𝑖 𝑞𝑢𝑒 𝐶𝐵 = 𝟐 𝟓 𝟎 𝟎 coef var. bás. tabla inicial


c=[3 2 5 1]
1 2 1 2 1 0 0 0
VC=[0 0 0 0]
𝐴=
3
1
0
4
2
0
1
3
𝐼=
0
0
1
0
0
1
0
0
b=[430 460 420 500]
1 2 1 2
A=[1 2 1 2; 3 0 2 1;1 4 0 3;1 2 1 2]
0 0 0 1

2 1 0 0
𝐵= 0 2 0 0 Columnas de x2, x3,x3,x4 I=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]
4 0 1 0
2 1 0 1 B=[A(:,2) A(:,3) I(:,3) I(:,4)]
0.5
0
−0.25
0,5
0
0
0
0
Tabla Simplex Optima B1=inv(B)
𝐵−1 =
−2 1 1 0 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
−1 0 0 1 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
▪MATLAB/OCTAVE
0.5 −0.25 0 0 CB=[c(1,2) c(1,3) I(1,3) I(1,4)]
0 0.5 0 0
𝐶𝐵 𝐵−1 = 𝟐 𝟓 𝟎 𝟎
−2 1 1 0 CB_B1= CB*B1
−1 0 0 1
CB_B1_A= CB_B1 * A
𝐶𝐵 𝐵−1
= 1 2 0 0 (sombra)
1 2 1 2 CB_B1_A_C= CB_B1_A-c
3 0 2 1
𝐶𝐵 𝐵−1 𝐴 = 1 2 0 0 ∙
1 4 0 3
1 2 1 2
Tabla Simplex Optima
𝐶𝐵 𝐵−1 𝐴 = 7 2 5 4
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 7 2 5 4 − 3 2 5 1 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
𝐶𝐵 𝐵−1 𝐴 − 𝑐 = 4 0 0 3
▪MATLAB/OCTAVE
CB_B1_b= CB_B1*b'
430
𝐶𝐵 𝐵−1 𝑏 = 1 2 0 0
460
= 𝟏𝟑𝟓𝟎 B1_b= B1*b'
420
500 B1_A =B1*A
0.5 −0.25 ' 0 0 430 100
Tabla Simplex Optima
0 0.5 0 0 460 230
𝐵−1 𝑏 = ∙ =
−2 1 1 0 420 20 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
−1 0 0 1 500 70 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃

0.5 −0.25 0 0 1 2 1 2 −0,25 1 0 0,75


0 0,5 0 0 * 3 0 2 1 1,5 0 1 0,5
𝐵−1 𝐴 = =
−2 1 1 0 1 4 0 3 2 0 0 0
−1 0 0 1 1 2 1 2 0 0 0 0
▪MATLAB/OCTAVE
c=[3 2 5 1] COMANDOS: TABLA SIMPLEX A TABLA OPTIMA
VC=[0 0 0 0]
Tabla Simplex Óptima b=[430 460 420 500]
𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃 A=[1 2 1 2; 3 0 2 1;1 4 0 3;1 2 1 2]
1 4 0 0 3 1 2 0 0 𝟏𝟑𝟓𝟎 I=[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]
𝒙𝟐 0 −0.25 1 0 0.75 0.5 −0.25 0 0 100 B=[A(:,2) A(:,3) I(:,3) I(:,4)] 1 −𝑐 0 0
𝒙𝟑 0 1.5 0 1 0.5 0 0.5 0 0 230 CB=[c(1,2) c(1,3) I(1,3) I(1,4)]
𝒙𝟕 0 2 0 0 0 −2 1 1 0 20 B1=inv(B) 0 𝐴 𝐼 𝑏
𝒙𝟖 0 0 0 0 0 −1 0 0 1 70 CB_B1= CB*B1
CB_B1_A= CB_B1 * A
Tabla Simplex Optima
−𝟏 −𝟏 −𝟏
CB_B1_A_C= CB_B1_A-c
𝟏 𝑪𝑩 𝑩 𝑨 − 𝒄 𝑪𝑩 𝑩 𝑪𝑩 𝑩 𝒃
𝟎 CB_B1_b= CB_B1*b'
𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
B1_b= B1*b'
B1_A =B1*A
MO=[1, CB*B1*A-c, CB*B1, CB*B1*b'; VC', B1*A, B1, B1*b']
▪MATLAB/OCTAVE
Tabla Simplex Inicial 1 −𝑐 0 0 Tabla Simplex Óptima
0 𝐴 𝐼 𝑏
𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃 𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝒙𝟒 𝒙𝟓 𝒙𝟔 𝒙𝟕 𝒙𝟖 𝒃
1 −3 −2 −5 −1 0 0 0 0 0 1 4 0 0 3 1 2 0 0 1350
𝒙𝟓 0 1 2 1 2 1 0 0 0 430 𝒙𝟐 0 −0.25 1 0 0.75 0.5 −0.25 0 0 100
𝒙𝟔 0 3 0 2 1 0 1 0 0 460 𝒙𝟑 0 1.5 0 1 0.5 0 0.5 0 0 230
𝒙𝟕 0 1 4 0 3 0 0 1 0 420 𝒙𝟕 0 2 0 0 0 −2 1 1 0 20
𝒙𝟖 0 1 2 1 2 0 0 0 1 500 𝒙𝟖 0 0 0 0 0 −1 0 0 1 70
▪MATLAB/OCTAVE
Maximizar
𝟑
𝒁 = 𝟑𝒙𝟏 + 𝟒𝒙𝟐 + 𝒙𝟑
𝟐
Sujeta a
𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟏𝟎
𝟐𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 ≤ 𝟏𝟎
𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 ≥ 𝟎
Maximizar Maximizar
𝟑 𝟑
𝒁 = 𝟑𝒙𝟏 + 𝟒𝒙𝟐 + 𝒙𝟑 𝒁 = 𝟑𝒙𝟏 + 𝟒𝒙𝟐 + 𝒙𝟑 + 𝟎𝑺𝟏 + 𝟎𝑺𝟐
𝟐 𝟐
Sujeta a Sujeta a
𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟏𝟎 𝒙𝟏 + 𝟐𝒙𝟐 + 𝑺𝟏 = 𝟏𝟎
𝟐𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 ≤ 𝟏𝟎 𝟐𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝑺𝟐 = 𝟏𝟎

b
𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 ≥ 𝟎 𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 ≥ 𝟎

𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝑺𝟏 𝑺𝟐 𝒃𝒋
1 −𝑐 0 0 -c 𝒛 1 −3 −4 −3/2 0 0 0
0 𝐴 𝐼 𝑏 𝑺𝟏 0 1 2 0 1 0 10
A
𝑺𝟐 0 2 2 1 0 1 10
▪ MATLAB/OCTAVE
𝑽. 𝑩 𝒁 𝒙𝟏 𝒙𝟐 𝒙𝟑 𝑺𝟏 𝑺𝟐 𝒃𝒋
-c 𝒛 1 −3 −4 −3/2 0 0 0 b
𝑺𝟏 0 1 2 0 1 0 10
A 𝑺𝟐 0 2 2 1 0 1 10

𝐼𝑡𝑒𝑟𝑎𝑐𝑖ó𝑛 𝑉. 𝐵. 𝑍 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝐿. 𝐷.
≥1 𝑧 1 𝒄𝑩 𝑩−𝟏 𝑨 − 𝒄 𝒄𝑩 𝑩−𝟏 𝒃
𝒙𝑩 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃

▪ MATLAB/OCTAVE
Iteración 1
Maximizar 3 Mismos datos
𝒄= 3 4 0 0
𝟑 2 Prob. Init.
𝒁 = 𝟑𝒙𝟏 + 𝟒𝒙𝟐 + 𝒙𝟑 + 𝟎𝑺𝟏 + 𝟎𝑺𝟐
𝟐 1 2 0 1 0
𝑨= 10
2 2 1 0 1 𝒃=
Sujeta a 10
𝒙𝟏 + 𝟐𝒙𝟐 + 𝑺𝟏 = 𝟏𝟎 𝐼𝑡𝑒𝑟𝑎𝑐𝑖ó𝑛 𝑉. 𝐵. 𝑍 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝐿. 𝐷.
𝟐𝒙𝟏 + 𝟐𝒙𝟐 + 𝒙𝟑 + 𝑺𝟐 = 𝟏𝟎 ≥1 𝒛 1 𝒄𝑩 𝑩−𝟏 𝑨 − 𝒄 𝒄𝑩 𝑩−𝟏 𝒃
𝒙𝟏 , 𝒙𝟐 , 𝒙𝟑 ≥ 𝟎 𝒙𝑩 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃

𝑆1 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
1 0
𝒙𝑩 = ;𝑩= = 𝑩−𝟏 ; 𝒄𝑩 = 0 0 𝑺𝟏 2 10
𝑆2 0 1
𝑺𝟐 2 10
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = −3 −4 −3/2 0 0
𝑺𝒂𝒍𝒆 𝑺𝟏
𝑬𝒏𝒕𝒓𝒂 𝒙𝟐
▪ MATLAB/OCTAVE
3 format bank Mismos datos
𝒄= 3 4 0 0
2 Prob. Init.
1 2 0 1 0 c=[3 4 3/2 0 0]
𝑨=
2 2 1 0 1 A=[1 2 0 1 0; 2 2 1 0 1]
10 b=[10; 10]
𝒃=
10
𝑆1
B=[A(:,4) A(:,5)]
1 0
𝒙𝑩 = ;𝑩= = 𝑩−𝟏 ; 𝒄𝑩 = 0 0
𝑆2 0 1 cB=[c(1,4) c(1,5)]

𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = −3 −4 −3/2 0 0
B1=inv(B)
𝑩−𝟏 𝑨 𝑩−𝟏 𝒃 cB_B1_A_C= (cB*inv(B)*A)-c
𝑺𝟏 2 10 B1_A =B1*A
𝑺𝟐 2 10
B1_b= B1*b
▪ MATLAB/OCTAVE
Iteración 2 3 1 2 0 1 0 10
𝒄= 3 4 0 0 𝑨= 𝒃=
Mismos datos 2 2 1 0 1 10
Prob. Init.
2

𝑥2 −𝟏 1/2 1 0 1/2 0
−𝟏 1/2 0 𝑩 𝑨 =
𝒙𝑩 = 𝑆 𝑩 = 1 0 1 −1 1
2 −1 1
5
2 0 𝑩−𝟏 𝒃 =
𝑩= 𝒄𝑩 = 4 0 0
2 1
𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
𝒙𝟐 0 5
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = −1 0 −3/2 2 0 𝑺𝟐 1 0
𝑬𝒏𝒕𝒓𝒂 𝒙𝟑
𝑺𝒂𝒍𝒆 𝑺𝟐

▪ MATLAB/OCTAVE
3 Mismos datos format bank
𝒄= 3 4 0 0
2 Prob. Init. c=[3 4 3/2 0 0]
1 2 0 1 0 10
𝑨= 𝒃= A=[1 2 0 1 0; 2 2 1 0 1]
2 2 1 0 1 10
𝑥2
𝒙𝑩 = 𝑆 ; 𝑩 =
2 0 −𝟏
;𝑩 =
1/2 0
; 𝒄𝑩 = 4
b=[10; 10]
0
2 1 −1 1
B=[A(:,2) A(:,5)]
2

𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = −1 0 −3/2 2 0 cB=[c(1,2) c(1,5)]

1/2 1 0 1/2 0
𝑩−𝟏 𝑨 =
1 0 1 −1 1 B1=inv(B)
5
𝑩−𝟏 𝒃 = cB_B1_A_C= (cB*inv(B)*A)-c
0
𝑩−𝟏 𝑨 𝑩−𝟏 𝒃 B1_A =B1*A
𝒙𝟐 0 5
𝑺𝟐 1 0 B1_b= B1*b
▪ MATLAB/OCTAVE 𝑺𝒂𝒍𝒆 𝑺𝟐
Iteración 3 3 1 2 0 1 0 10
𝒄= 3 4 0 0 𝑨= 𝒃=
Mismos datos 2 2 2 1 0 1 10
Prob. Init.

𝑥2 𝐼𝑡𝑒𝑟. 𝑉. 𝐵. 𝑍 𝑉𝑎𝑟𝑖𝑎𝑏𝑙𝑒𝑠 𝐿. 𝐷.
−𝟏 1/2 0
𝒙𝑩 = 𝑥 𝑩 = ≥1 𝑧 1 𝒄𝑩 𝑩−𝟏 𝑨 − 𝒄 𝒄𝑩 𝑩−𝟏 𝒃
3 −1 1
𝒙𝑩 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝒃
2 0
𝑩= 𝒄𝑩 = 4 3/2
2 1
𝑧 = 𝑐𝐵 𝐵−1 𝑏 = 20

𝑥2 −1 5
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = 1/2 1 0 1/2 0 𝑥𝑏 = 𝑥 = 𝐵 𝑏 =
𝑬𝒏𝒕𝒓𝒂 𝒙𝟑 3 0

▪ MATLAB/OCTAVE
3 Mismos datos format bank
𝒄= 3 4 0 0
2 Prob. Init. c=[3 4 3/2 0 0]
1 2 0 1 0 10
𝑨= 𝒃= A=[1 2 0 1 0; 2 2 1 0 1]
2 2 1 0 1 10
𝑥2
𝒙𝑩 = 𝑥 ; 𝑩 =
2 0 −𝟏
;𝑩 =
1/2 0
; 𝒄𝑩 = 4 3/2
b=[10; 10]
3 2 1 −1 1
B=[A(:,2) A(:,3)]
𝒄𝑩 𝑩−𝟏 𝑨 − 𝑪 = 1/2 1 0 1/2 0 cB=[c(1,2) c(1,3)]

𝑧 = 𝑐𝐵 𝐵−1 𝑏 = 20 B1=inv(B)
cb_B1_A_C=
𝑥2 −1 5 (cB*inv(B)*A)-c
𝑥𝑏 = 𝑥 = 𝐵 𝑏 =
3 0 B1_A =B1*A
▪ MATLAB/OCTAVE B1_b= B1*b
DE UNA TABLA SIMPLE OPTIMA
A LA QUE LA GENERO
Supongamos que disponemos de la siguiente tabla
optima de un problema de PL.

V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
𝑍 1 0 0 0 3/2 1 36
ℎ1 0 0 0 1 1/3 −1/3 2
𝑥2 0 0 1 0 ½ 0 6
𝑥1 0 1 0 0 −1/3 1/3 2

¿Cómo haría para determinar el modelo de programación


lineal que origino la tabla del simplex optima, anterior?

▪ MATLAB/OCTAVE
V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
𝑍 1 0 0 0 3/2 1 36
ℎ1 0 0 0 1 1/3 −1/3 2
𝑥2 0 0 1 0 ½ 0 6
𝑥1 0 1 0 0 −1/3 1/3 2
En forma tabular, un problema de programación lineal se resuelve haciendo
Tabla Simplex Inicial Tabla Simplex Óptima

𝟏 −𝒄 𝟎 𝟎 𝟏 𝑪𝑩 𝑩−𝟏 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃


∗ =
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩 −𝟏 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃

Que corresponde a
[Tabla original] * [Matriz que pre multiplica a la tabla original] = [Tabla optima]
▪ MATLAB/OCTAVE
V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
𝑍 1 0 0 0 3/2 1 36
ℎ1 0 𝟎 𝟎 1 1/3 −1/3 𝟐
𝑥2 0 𝟎 𝟏 0 ½ 0 𝟔
𝑥1 0 𝟏 𝟎 0 −1/3 1/3𝐵 𝟐

Tabla Simplex Inicial

𝟏 −𝒄 𝟎 𝟎 1 −𝑐 0 0
𝟎 𝑨 𝑰 𝒃
0 𝐴 𝐼 𝑏

▪ MATLAB/OCTAVE
𝟏 −𝒄 𝟎 𝟎 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
1 −𝑐 0 0
0 𝐴 𝐼 𝑏
Para despejar 𝑏 usamos las siguientes propiedades de matrices:
Multiplicación de matrices: Si conoces otra matriz que al multiplicarse con 𝐴−1 da
como resultado la identidad, puedes usarla para recuperar 𝐴. Esto se puede
expresar como:
𝐴 = 𝐴−1 . 𝐵
Donde 𝐵 es una matriz tal que 𝐴−1 . 𝐵 = 𝐼. En este caso, 𝐵, seria igual a 𝐴.

▪ MATLAB/OCTAVE
𝟏 −𝒄 𝟎 𝟎 1 −𝑐 0 0
𝟎 𝑨 𝑰 𝒃 0 𝐴 𝐼 𝑏
Usaremos la siguiente propiedad
−𝟏 format bank
𝑩 −𝟏 ∗𝒃=𝒃
B_1=[1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
Conocemos 𝑩−𝟏 así que la invertimos b=[2;6;2]
B=inv(B_1)*b
1 0 1
𝑩− −𝟏
= 0 2 0
0 2 3

−𝟏
1 0 1 2 4
𝒃= 𝑩 −𝟏 ∗𝒃= 0 2 0 ∗ 6 = 12
▪ MATLAB/OCTAVE 0 2 3 2 18
𝟏 −𝒄 𝟎 𝟎 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃

1 −𝑐 0 0
0 𝐴 𝐼 𝑏
B_1=[1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
El mismo razonamiento se aplica para despejar A:
A=[0 0; 0 1; 1 0]
Entonces A=inv(B_1)*A
−𝟏
1 0 1 0 0 1 0
𝐀= 𝑩 −𝟏 ∗𝑨= 0 2 0 ∗ 0 1 = 0 2
0 2 3 1 0 3 2

▪ MATLAB/OCTAVE
𝟏 −𝒄 𝟎 𝟎 𝟏 𝑪𝑩 𝑩−𝟏 𝑨 − 𝒄 𝑪𝑩 𝑩−𝟏 𝑪𝑩 𝑩−𝟏 𝒃
𝟎 𝑨 𝑰 𝒃 𝟎 𝑩−𝟏 𝑨 𝑩−𝟏 𝑩−𝟏 𝒃
Por ultimo, para despejar – 𝑐 aprovechamos que
1 −𝑐 0 0
𝑪𝑩 𝑩−𝟏 𝑨 − 𝑪 = 0 0 0 𝐴 𝐼 𝑏
𝑪𝑩 𝑩−𝟏 𝑨 − 𝑪 = 0 0
B_1=[1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
−𝒄 = 0 0 − 𝑪𝑩 𝑩−𝟏 𝑨 A=[0 0; 0 1; 1 0]
CB=[0 3/2 1]
1 0
−𝒄 = 0 0 − 0 3/2 1 . 0 2 C=[0 0]-(CB*inv(B_1))*A
3 2

−𝒄 = 0 0 − 3 5 = −3 −5
▪ MATLAB/OCTAVE
Tabla Simplex Óptima
format bank
V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución
B_1 = [1 1/3 -1/3;0 1/2 0;0 -1/3 1/3]
𝑍 1 0 0 0 3/2 1 36
A=[0 0; 0 1; 1 0]
ℎ1 0 0 0 1 1/3 −1/3 2
𝑥2 0 0 1 0 ½ 0 6 b= [2;6;2]
𝑥1 0 1 0 0 −1/3 1/3 2 CB = [0 3/2 1]
Tabla Simplex Inicial b = inv(B_1) * b

V.B. Z 𝑥1 𝑥2 ℎ1 ℎ2 ℎ3 Solución A = inv(B_1) * A


𝑍 1 −3 −5 0 0 0 0 c = [0 0]-(CB * inv(B_1)) * A
ℎ1 0 1 0 1 0 0 4 𝟏 −𝒄 𝟎 𝟎
𝟎 𝑨 𝑰 𝒃
𝑥2 0 0 2 0 1 0 12
𝑥1 0 3 2 0 0 1 18 ▪ MATLAB/OCTAVE
Problemas
lineales

MATLAB
Problemas
lineales
MATLAB
linprog
MATLAB
TIPOS DE RESTRICCIONES:
RESTRICCIONES - ECUACIONES LINEALES
PROBLEMAS Restricción de desigualdad lineal (≤, ≥)
LINEALES Restricción de igualdad lineal (=)

Restricción de desigualdad e igualdad lineal (≤


, ≥),(=)
MATLAB
linprog
Resuelve problemas lineales
Busca el mínimo de una función
Sintaxis
x = linprog(f,A,b)
PROBLEMAS
LINEALES x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
[x,fval] = linprog(___)
[x,fval,exitflag,output] = linprog(___)
[x,fval,exitflag,output,lambda] = linprog(___)
MATLAB
Linprog
Resuelve problemas lineales
Busca el mínimo de un problema
especificado por
𝑨 ∗ 𝒙 ≤ 𝒃,
PROBLEMAS 𝑚𝑖𝑛 𝑇
LINEALES 𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)

𝒇, 𝒙𝟎, 𝒃, 𝒃𝒆𝒒, 𝒍𝒃, 𝒚 𝒖𝒃 𝒔𝒐𝒏 𝒗𝒆𝒄𝒕𝒐𝒓𝒆𝒔 𝑦 𝐴 𝑦 𝐴𝑒𝑞


𝑠𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑐𝑒𝑠
MATLAB 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
𝟑
Sujeto a las restricciones
𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
RESTRICCIONES 𝒙𝟏 +
𝒙𝟐
≤𝟏
ECUACIONES
𝟒
𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
LINEALES 𝒙𝟏
− − 𝒙𝟐 ≤ 𝟏
𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
−𝒙𝟏 + 𝒙𝟐 ≤ 𝟐 Debe cumplir el problema
que…
𝑨 ∗ 𝒙 ≤ 𝒃,
𝑚𝑖𝑛 𝑇
𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞,
𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
•MATLAB 𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
𝒙𝟐
𝟑
Sujeto a las restricciones
% Funcion objetivo 𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
f = [-1 -1/3]; 𝒙𝟐
𝒙𝟏 + ≤𝟏
𝟒
% Matriz de restricciones 𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
% de desigualdad
𝒙𝟏
A = [1 1;1 1/4;1 -1;-1/4 -1;-1 -1;-1 1]; − − 𝒙𝟐 ≤ 𝟏
𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
% Vector de restricciones
b = [2 1 2 1 -1 2]; −𝒙𝟏 + 𝒙𝟐 ≤ 𝟐

Sintaxis
x = linprog(f,A,b) x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
https://es.mathworks.com/help/opti x = linprog(f,A,b,Aeq,beq,lb,ub)
m/ug/linprog.html x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
MATLAB 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
𝟑
Sujeto a las restricciones
𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
𝒙𝟐
RESTRICCIONES 𝒙𝟏 +
𝟒
≤𝟏
ECUACIONES 𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
LINEALES 𝒙𝟏
− − 𝒙𝟐 ≤ 𝟏
𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
−𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
Debe cumplir el problema
𝒙𝟐 𝟏 que…
𝒙𝟏 + = 𝑨 ∗ 𝒙 ≤ 𝒃,
𝟒 𝟐 𝑚𝑖𝑛 𝑇
𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
•MATLAB https://es.mathworks.com/h 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
elp/optim/ug/linprog.html 𝟑
Sujeto a las restricciones
% Funcion objetivo 𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
f = [-1 -1/3]; 𝒙𝟐
𝒙𝟏 + ≤𝟏
𝟒
% Matriz de restricciones 𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
% de desigualdad 𝒙𝟏
− − 𝒙𝟐 ≤ 𝟏
A = [1 1;1 1/4;1 -1;-1/4 -1;-1 -1;-1 1]; 𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
% Vector de restricciones −𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
b = [2 1 2 1 -1 2]; 𝒙𝟐 𝟏
𝒙𝟏 + =
𝟒 𝟐
% Ecuacion
Aeq = [1 1/4]; Sintaxis
beq = 1/2; x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq) x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
MATLAB 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
𝟑
Sujeto a las restricciones
𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
𝒙𝟐
RESTRICCIONES
𝒙𝟏 + ≤𝟏
𝟒

ECUACIONES
𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
𝒙𝟏
LINEALES − − 𝒙𝟐 ≤ 𝟏
𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
−𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
𝒙𝟐 𝟏
𝒙𝟏 + =
𝟒 𝟐 Debe cumplir el problema
que…
−𝟏 ≤ 𝒙𝟏 ≤ −𝟏, 𝟓 𝑨 ∗ 𝒙 ≤ 𝒃,
𝑚𝑖𝑛 𝑇
−𝟎, 𝟓 ≤ 𝒙𝟐 ≤ 𝟏, 𝟐𝟓 𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
𝒍𝒃 ≤ 𝒙 ≤ 𝒖𝒃,
▪MATLAB
https://es.mathworks.com/h 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
elp/optim/ug/linprog.html 𝟑
Sujeto a las restricciones
% Funcion objetivo
𝒙𝟏 + 𝒙 𝟐 ≤ 𝟐
f = [-1 -1/3]; 𝒙𝟐
% Matriz de restricciones 𝒙𝟏 +
𝟒
≤𝟏

% de desigualdad 𝒙𝟏 − 𝒙 𝟐 ≤ 𝟐
𝒙𝟏
A = [1 1;1 1/4;1 -1;-1/4 -1;-1 -1;-1 1]; − − 𝒙𝟐 ≤ 𝟏
𝟒
% Vector de restricciones −𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
b = [2 1 2 1 -1 2]; −𝒙𝟏 + 𝒙𝟐 ≤ 𝟐

% Ecuacion 𝒙𝟐 𝟏
𝒙𝟏 + =
𝟒 𝟐
Aeq = [1 1/4];
−𝟏 ≤ 𝒙𝟏 ≤ −𝟏, 𝟓
beq = 1/2;
% Limites −𝟎, 𝟓 ≤ 𝒙𝟐 ≤ 𝟏, 𝟐𝟓
lb = [-1,-0.5]; Sintaxis
x = linprog(f,A,b)
ub = [1.5,1.25];
x = linprog(f,A,b,Aeq,beq)
x0 = []; x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0) x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
▪MATLAB
https://es.mathworks.com/h
elp/optim/ug/linprog.html

options = optimoptions('linprog','Algorithm','dual-simplex');x =
linprog(f,A,b,Aeq,beq,lb,ub,x0, options)

linprog
Busca el mínimo de una función
Sintaxis
x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
▪MATLAB x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
Optimización a media escala
Linprog: es el método del conjunto activo y es así una variación del método
simplex, bien conocido para programación lineal. El algoritmo encuentra una
solución factible inicial por la solución de otro problema de programación lineal:

options = optimset('LargeScale', 'off', 'Simplex', 'on')

Y pasando options como un argumento de entrada de linprog. El


algoritmo simplex retorna una solución óptima del vértice. Es importante tener
presente que no se podrá proveer un punto inicial x0 para
linprog, del método a gran escala o del método a media escala
usando el algoritmo del método simplex. En cualquier caso si se coloca
x0 como un argumento de entrada, el linprog no toma en cuenta x0 y calcula su
propio punto inicial para el algoritmo
MATLAB
TIPOS DE RESTRICCIONES:
RESTRICCIONES - ECUACIONES LINEALES
Restricción de desigualdad lineal (≤, ≥)
PROBLEMAS
Restricción de igualdad lineal (=)
LINEALES
Restricción de desigualdad e igualdad lineal (≤
, ≥),(=)
MATLAB
𝑨 ∗ 𝒙 ≤ 𝒃, ACLARACIÓN
𝑚𝑖𝑛 𝑇
𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒, 𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏, 𝒙𝟐
𝒙𝟏 + ≤𝟏
𝟒
RESTRICCIONES 𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
ECUACIONES 𝒙𝟏
LINEALES − − 𝒙𝟐 ≤ 𝟏
𝟒
𝒙𝟏 − 𝒙𝟐 ≥ 𝟐 −𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
−𝟏 ∗ 𝒙𝟏 − −𝟏 ∗ 𝒙𝟐 ≥ −𝟏 ∗ 𝟐 −𝒙𝟏 + 𝒙𝟐 ≤ −𝟐
−𝒙𝟏 + 𝒙𝟐 ≤ −𝟐
En el caso que algunas de las restricciones sean del tipo ≥ y se
requiera ≤
multiplicamos por (-1) a la restricción del lado derecho y izquierdo
En el caso que tengamos una restricción del tipo = y requerimos que
sea del tipo ≤ o ≥ lo que deberíamos de hacer es simplemente
cambiarla a lo que requerimos es decir cambiarla a ≤ o ≥

En el caso que necesitamos maximizar… y la función es de


minimización
multiplicamos por (-1) la función objetivo
Problemas
lineales

OCTAVE
OCTAVE
Optimización
Octave posee varias funciones para resolver problemas
lineales, no lineales y de programación cuadrática

PROBLEMAS • Programación lineal


NO LINEALES
• Programación cuadrática

• Programación no lineal

https://octave.org/doc/interpreter/Optimization.html#Optimization
OCTAVE
glpk
Busca el mínimo de un problema especificado
por
𝑨 ∗ 𝒙 = 𝒃,
𝑚𝑖𝑛 𝑇
PROBLEMAS 𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ 𝑋 ≥ 0,
LINEALES
Puede resolver problemas
[ min | max] 𝐶′ ∗ 𝑥
Sujeto a
𝐴∗𝑥[=| ≤ | ≥]𝑏
𝑥 ≥ 𝐿𝐵
𝑥 ≤ 𝑈𝐵
glpk (F, A, b, lb, ub, ctype, vartype, sense, param)
OCTAVE

glpk
PROBLEMAS Busca el mínimo de una función
LINEALES Sintaxis
[xopt, fmin, errnum, extra] = glpk (c, A, b, lb,
ub, ctype, vartype, sense, param)
OCTAVE
Sintaxis
glpk (c, A, b, lb, ub, ctype, vartype, sense, param)

PROBLEMAS
Parámetros de entrada
LINEALES c: Función para minimizar.
A: Matriz real de restricciones de desigualdad
lineales.
b: Vector real de restricciones de desigualdad
lineales.
OCTAVE
Sintaxis
glpk (c, A, b, lb, ub, ctype, vartype, sense, param)

Parámetros de entrada
PROBLEMAS
LINEALES lb: Vector real de límites inferiores.

ub: Vector real de límites superiores.

ctype: Un vector que contiene caracteres del tipo de


restricciones.

vartype: Un vector que contiene el tipo de variable.


OCTAVE

Sintaxis
glpk (c, A, b, lb, ub, ctype, vartype, sense, param)
PROBLEMAS
LINEALES Parámetros de entrada
sense: Tipo de problema de maximización -1 y
minimización 1; por defecto 1.

param: Parámetros de error.


OCTAVE
𝐦𝐢𝐧 𝒇 𝒙 = 𝟒𝒙𝟏 + 𝒙𝟐
Sujeto a las restricciones

𝟑𝒙𝟏 + 𝒙𝟐 = 𝟑
RESTRICCIONES 𝟒𝒙𝟏 + 𝟑𝒙𝟐 ≥ 𝟔
ECUACIONES
LINEALES 𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟒
𝑨 ∗ 𝒙 = 𝒃,
𝒙𝟏 , 𝒙𝟐 ≥ 𝟎 𝑚𝑖𝑛𝑓 𝑇 𝑥
𝒙 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ 𝑋 ≥ 0,

Puede resolver problemas


[ min | max] 𝐶′ ∗ 𝑥
Sujeto a
𝐴∗𝑥[= | ≤ | ≥]𝑏
𝑥 ≥ 𝐿𝐵
𝑥 ≤ 𝑈𝐵
▪OCTAVE 𝐦𝐢𝐧 𝒇 𝒙 = 𝟒𝒙𝟏 + 𝒙𝟐
Sujeto a las restricciones
c = [4, 1]’;
A = [ 3, 1;4, 3;1, 2]; 𝟑𝒙𝟏 + 𝒙𝟐 = 𝟑
b = [3, 6, 4]’;
lb = [0, 0]'; 𝟒𝒙𝟏 + 𝟑𝒙𝟐 ≥ 𝟔
ub = []; 𝒙𝟏 + 𝟐𝒙𝟐 ≤ 𝟒
ctype = "SLU";
vartype = "CC"; 𝒙𝟏 , 𝒙𝟐 ≥ 𝟎
s = -1;
param.msglev = 1;
param.itlim = 100; 𝒔=
[xmin, fmin, status, extra] =glpk (c, A, b, 𝑳≥
lb, ub, ctype, vartype, s, param) 𝑽𝒂𝒓𝒊𝒂𝒃𝒍𝒆𝒔
𝒄𝒐𝒏𝒕𝒊𝒏𝒖𝒂𝒔 𝒐 𝒏𝒐 𝑼≤
▪OCTAVE
c = [10, 6, 4]';
A = [ 1, 1, 1; 10, 4, 5; 2, 2, 6];
b = [100, 600, 300]';
lb = [0, 0, 0]';
ub = [];
ctype = "UUU";
vartype = "CCC";
s = -1;
param.msglev = 1;
param.itlim = 100;

[xmin, fmin, status, extra] = glpk (c, A, b, lb, ub, ctype,


vartype, s, param)
En el caso que algunas de las restricciones sean del tipo ≥ y se
requiera ≤
multiplicamos por (-1) a la restricción del lado derecho y izquierdo
En el caso que tengamos una restricción del tipo = y requerimos que
sea del tipo ≤ o ≥ lo que deberíamos de hacer es simplemente
cambiarla a lo que requerimos es decir cambiarla a ≤ o ≥

En el caso que necesitamos maximizar… y la función es de


minimización
multiplicamos por (-1) la función objetivo
Problemas
lineales

SCIPY
MATLAB
linprog
Busca el mínimo de un problema
especificado por
𝑨 ∗ 𝒙 ≤ 𝒃,
PROBLEMAS 𝑚𝑖𝑛 𝑇
𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
LINEALES 𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)

𝒇, 𝒙, 𝒃, 𝒃𝒆𝒒, 𝒍𝒃, 𝒚 𝒖𝒃 𝒔𝒐𝒏 𝒗𝒆𝒄𝒕𝒐𝒓𝒆𝒔 𝑦 𝐴 𝑦 𝐴𝑒𝑞


𝑠𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑐𝑒𝑠
▪MATLAB
https://es.mathworks.com/h 𝒙𝟐
𝐦𝐢𝐧 𝒇 𝒙 = −𝒙𝟏 −
elp/optim/ug/linprog.html 𝟑
Sujeto a las restricciones
% Funcion objetivo
𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
f = [-1 -1/3]; 𝒙𝟐
𝒙𝟏 + ≤𝟏
𝟒
% Matriz de restricciones 𝒙𝟏 − 𝒙𝟐 ≤ 𝟐
% de desigualdad 𝒙𝟏
− − 𝒙𝟐 ≤ 𝟏
A = [1 1;1 1/4;1 -1;-1/4 -1;-1 -1;-1 1]; 𝟒
−𝒙𝟏 − 𝒙𝟐 ≤ −𝟏
% Vector de restricciones −𝒙𝟏 + 𝒙𝟐 ≤ 𝟐
b = [2 1 2 1 -1 2]; 𝒙𝟐 𝟏
𝒙𝟏 + =
𝟒 𝟐
% Ecuacion
Aeq = [1 1/4]; Sintaxis
beq = 1/2; x = linprog(f,A,b)
x = linprog(f,A,b,Aeq,beq)
x = linprog(f,A,b,Aeq,beq,lb,ub)
x = linprog(f,A,b,Aeq,beq) x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
Scipy.optimize.linprog
linprog
Puede resolver problemas lineales de la
siguientes forma:
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶 𝑇 ∗ 𝑥,
PROBLEMAS 𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏 ,
LINEALES
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞 ,
𝑙 ≤ 𝑥 ≤ 𝑢,
Dimensión: https://docs.scipy.org/doc/scipy-
0.18.1/reference/generated/scipy.optimize.linpro
𝒄: 𝒏 ∗ 𝟏 g.html#scipy.optimize.linprog

https://docs.scipy.org/doc/scipy- 𝐴𝑢𝑏 : 𝑚 ∗ 𝑛 𝑏𝑢𝑏 : 𝑚 ∗ 1 𝐴𝑒𝑞 : 𝑘 ∗ 𝑛


0.18.1/reference/optimize.html#
module-scipy.optimize 𝑏𝑒𝑞 : 𝑘 ∗ 1 𝑙: 𝑛 ∗ 1 u: 𝑛 ∗ 1
Scipy.optimize.linprog linprog
Busca el mínimo de un problema especificado por

linprog 𝑨 ∗ 𝒙 ≤ 𝒃,
𝑚𝑖𝑛 𝑇
Puede resolver problemas 𝒙𝑓 𝑥 𝑡𝑎𝑙 𝑞𝑢𝑒 ቐ𝑨𝒆𝒒 ∗ 𝒙 = 𝒃𝒆𝒒,
lineales de la siguientes forma: 𝑙𝑏 ≤ 𝑥 ≤ 𝑢𝑏,
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑥
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏 x = linprog(f,A,b,Aeq,beq,lb,ub,x0)
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
𝒇,
𝑙≤𝑥≤𝑢
𝒙,
Dimensión: 𝒃,
𝑐: 𝑛 ∗ 1 𝒃𝒆𝒒,
𝑏𝑢𝑏 : 𝑚 ∗ 1 𝒍𝒃,
𝑏𝑒𝑞 : 𝑘 ∗ 1 𝑙: 𝑛 ∗ 1 𝒖𝒃,
𝑢: 𝑛 ∗ 1 𝒔𝒐𝒏 𝒗𝒆𝒄𝒕𝒐𝒓𝒆𝒔
𝐴𝑒𝑞 : 𝑘 ∗ 𝑛 𝑦
𝐴𝑢𝑏 : 𝑚 ∗ 𝑛 𝐴 𝑦 𝐴𝑒𝑞 𝑠𝑜𝑛 𝑚𝑎𝑡𝑟𝑖𝑐𝑒𝑠
https://docs.scipy.org/doc/scipy-

▪Scipy.optimize.linprog
0.18.1/reference/generated/scip
y.optimize.linprog.html#scipy.o
ptimize.linprog

Maximize
3𝑥1 + 2𝑥2
Sujeto a
2𝑥1 + 1𝑥2 ≤ 10
5𝑥1 + 6𝑥2 ≥ 4
−3𝑥1 + 7𝑥2 = 8
Minimize
−(𝟑𝒙𝟏 + 𝟐𝒙𝟐 )
𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
Sujeto a
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
2𝑥1 + 1𝑥2 ≤ 10
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
−𝟓𝒙𝟏 ± 𝟔𝒙𝟐 ≤ −𝟒
−3𝑥1 + 7𝑥2 = 8
▪Scipy.optimize.linprog𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏 Maximize
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞 3𝑥1 + 2𝑥2
Programacion_lineal_SCIPY_lingprog EJ 1.py Sujeto a
from scipy.optimize import linprog 2𝑥1 + 1𝑥2 ≤ 10
5𝑥1 + 6𝑥2 ≥ 4
c=[-3,-2] −3𝑥1 + 7𝑥2 = 8
A_ub=[[2,1],[-5,-6]] −𝟏 ∗ 5𝑥1 + −𝟏 ∗ 6𝑥2 ≥ −𝟏 ∗ 4
b_ub=[10,-4] Minimize
A_eq=[[-3,7]] −𝟑𝒙𝟏 ± 𝟐𝒙𝟐
b_eq=[8]
Sujeto a
res=linprog(c,A_ub,b_ub,A_eq,b_eq)
2𝑥1 + 1𝑥2 ≤ 10
−𝟓𝒙𝟏 ± 𝟔𝒙𝟐 ≤ −𝟒
print(res) −3𝑥1 + 7𝑥2 = 8
▪Scipy.optimize.linprog
Programacion_lineal_SCIPY_lingprog EJ 1.py
Maximize
from scipy.optimize import linprog 3𝑥1 + 2𝑥2
Sujeto a
c=[-3,-2]
−𝟏 ∗ 3𝑥1 + −𝟏 ∗ 2𝑥2
2𝑥1 + 1𝑥2 ≤ 10
A_ub=[[2,1],[-5,-6]] 5𝑥1 + 6𝑥2 ≥ 4
b_ub=[10,-4] 𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋 −3𝑥1 + 7𝑥2 = 8
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
Minimize
A_eq=[[-3,7]]
b_eq=[8] 𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
−𝟑𝒙𝟏 ± 𝟐𝒙𝟐
res=linprog(c,A_ub,b_ub,A_eq,b_eq) Sujeto a
print(res) 2𝑥1 + 1𝑥2 ≤ 10
−𝟓𝒙𝟏 ± 𝟔𝒙𝟐 ≤ −𝟒
−3𝑥1 + 7𝑥2 = 8
En el caso que algunas de las restricciones sean del tipo ≥ y se
requiera ≤
multiplicamos por (-1) a la restricción del lado derecho y izquierdo
En el caso que tengamos una restricción del tipo = y requerimos que
sea del tipo ≤ o ≥ lo que deberíamos de hacer es simplemente
cambiarla a lo que requerimos es decir cambiarla a ≤ o ≥

En el caso que necesitamos maximizar… y la función es de


minimización
multiplicamos por (-1) la función objetivo
▪Scipy.optimize.linprog
▪Scipy.optimize.linprog
Programacion_lineal_SCIPY_lingprog EJ 1 Numpy.py Programacion_lineal_SCIPY_lingprog EJ 1.py

import numpy as np
from scipy.optimize import linprog from scipy.optimize import linprog

c=[-3,-2]
c=np.array([-3,-2])
A_ub=[[2,1],[-5,-6]]
A_ub=np.array([[2,1],[-5,-6]])
b_ub=[10,-4]
b_ub=np.array([10,-4]) A_eq=[[-3,7]]
A_eq=np.array([[-3,7]]) b_eq=[8]
b_eq=np.array([8])
res=linprog(c,A_ub,b_ub,A_eq,b_eq)
res=linprog(c=c, A_ub=A_ub, b_ub=b_ub, print(res)
A_eq=A_eq, b_eq=b_eq)

print(res)
▪Scipy.optimize.linprog
TOYCO ensambla tres tipos de juguetes: trenes, camiones y autos, realizando tres operaciones. Los tipos
de ensamble disponibles para las tres operaciones son 430, 460 y 420 minutos por día, y los ingresos
por tren, camión y auto de juguetes son $3, $2 y $5, respectivamente. Los tiempos de ensamble por tres
para las tres operaciones son 1,3 y 1 minutos, respectivamente. Los tiempos correspondientes por camión
y por auto son (2,0,4) y (1,2,0) minutos (un tiempo cero indica que la operación no se utiliza).
Sean las cantidades diarias de unidades ensambladas de trenes, camiones y carros el modelo de
programación lineal asociado y su dual se dan como sigue:
Primal de TOYCO
Maximizar z = 3𝑥1 + 2𝑥2 + 5𝑥3
Sujeto a
𝑥1 + 2𝑥2 + 𝑥3 ≤ 430 (Operación 1)
3𝑥1 + 2𝑥3 ≤ 460 (Operación 2)
𝑥1 + 4𝑥2 ≤ 420 (Operación 3)
𝑥1 , 𝑥2 , 𝑥3 , ≥ 0
Solución optima:
𝑥1 = 0, 𝑥2 = 100, 𝑥3 = 230, 𝑧 = $1350
▪Scipy.optimize.linprog
Programacion_lineal_SCIPY_lingprog EJ 3.py
Primal de TOYCO
from scipy.optimize import linprog
Maximizar z = 3𝑥1 + 2𝑥2 + 5𝑥3
c= [-3,-2,-5] Sujeto a
A_ub=[[1,2,1],[3,0,2],[1,4,0]] 𝑥1 + 2𝑥2 + 𝑥3 ≤ 430 (Operación 1)
b_ub=[430,460,420] 3𝑥1 + 2𝑥3 ≤ 460 (Operación 2)
𝑥1 + 4𝑥2 ≤ 420 (Operación 3)
res=linprog(c,A_ub,b_ub) 𝑥1 , 𝑥2 , 𝑥3 , ≥ 0
Solución optima:
print(res) 𝑥1 = 0, 𝑥2 = 100, 𝑥3 = 230,
𝑧 = $1350

𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
Problemas
lineales
Python
Graficas
▪Scipy.optimize.linprog (METODO GRAFICO)
C&K Confecciona dos tipos de productos como ser; bolso de mano y mochilas. Los cuales
tienen un costo de venta de $ 2220 y $ 4500, respectivamente. Para la fabricación de
estos productos la empresa requiere cuero, tiempo de costura y tiempo de acabado.

La cantidad de cuero para la producción de los bolsos es de 1 Mts. cuadrado y de 3


Mts. cuadrados para la mochilas; por otra parte se requiere de 0,5 Hrs. de tiempo
de costura para los bolsos y de 2 Hrs. para las mochilas. Y por ultimo se requiere de
1 Hrs. de tiempo para los acabados para los bolsos como para las mochilas.

Hallar los valores óptimos para maximizar la producción de las bolsos y las
mochilas respectivamente.
▪Scipy.optimize.linprog (MÉTODO GRAFICO)
Bolso Mochila
Disponibilidad
recursos

Cuero 1 metros 2 3 metros 2 42 metros

Costura 0,5 hrs. 2 hrs. 40 horas

Acabado 1 hrs. 1 hrs. 15 horas

Precio de venta / $ Unidad $ 2220 $ 4500


▪Scipy.optimize.linprog (METODO GRAFICO)

Metodo grafico de C&K

Maximizar z = 2200𝑥1 + 4500𝑥2


Sujeto a
𝑥1 + 3𝑥2 ≤ 42
𝑥1 + 2𝑥2 ≤ 40
0,5 𝑥1 + 𝑥2 ≤ 15
▪Scipy.optimize.linprog
Programacion_lineal_SCIPY_lingprog EJ 3.py Metodo grafico de C&K
import numpy as np Maximizar z = 2200𝑥1 + 4500𝑥2
import matplotlib.pyplot as plt
Sujeto a
from scipy.optimize import linprog
𝑥1 + 3𝑥2 ≤ 42
#Definir restricciones 𝑥1 + 2𝑥2 ≤ 40
A = np.array([[1,3],[1,2],[0.5,1]]) 0,5 𝑥1 + 𝑥2 ≤ 15
b = np.array([42,40,15])
x1_bounds = (0, None)
x2_bounds = (0, None)

𝑀𝑖𝑛𝑖𝑚𝑖𝑧𝑒 𝐶𝑇 ∗ 𝑋
𝑆𝑢𝑗𝑒𝑡𝑜 𝑎: 𝐴𝑢𝑏 ∗ 𝑥 ≤ 𝑏𝑢𝑏
𝐴𝑒𝑞 ∗ 𝑥 = 𝑏𝑒𝑞
▪Scipy.optimize.linprog
#Graficar restricciones
x1 = np.linspace(0, 60, 10000)
plt.plot(x1, (42 - x1)/3, label='x1 + 3x2 <= 42')
plt.plot(x1, (40 - x1)/2, label='x1 + 2x2 <= 40')
plt.plot(x1, (15 - 0.5*x1)/1, label='0.5x1 + x2 <= 15')

Metodo grafico de C&K

Maximizar z = 2200𝑥1 + 4500𝑥2


Sujeto a
𝑥1 + 3𝑥2 ≤ 42
𝑥1 + 2𝑥2 ≤ 40
0,5 𝑥1 + 𝑥2 ≤ 15
▪Scipy.optimize.linprog
plt.fill_between(x1, 0, (42 - x1)/3, where=((42 - x1)/3 >= 0) & (x1 >= 0),
alpha=0.1)
plt.fill_between(x1, 0, (40 - x1)/2, where=((40 - x1)/2 >= 0) & (x1 >= 0),
alpha=0.1)
plt.fill_between(x1, 0, (15 - 0.5*x1)/1, where=((15 - 0.5*x1)/1 >= 0) & (x1 >= 0),
alpha=0.1)

# Configuraciones de la grafica
plt.xlim(x1_bounds)
plt.ylim(x2_bounds)
plt.xlabel('Cant bolsos de mano')
plt.ylabel('Cant mochilas')
plt.legend()
▪Scipy.optimize.linprog
#Encontrar el vértice óptimo
c = np.array([-2200, -4500])
res = linprog(c, A_ub=A, b_ub=b, bounds=(x1_bounds, x2_bounds), method='simplex')

#Agregar el punto de la solución óptima al gráfico


vertice_optimo = (res.x[0], res.x[1])
plt.plot(vertice_optimo[0], vertice_optimo[1], 'ro', markersize=10)
plt.show()

print('El máximo se alcanza en x1 = ', res.x[0], 'y x2 = ',res.x[1], 'con un valor


de ', -res.fun)
Metodo grafico de C&K

Maximizar z = 2200𝑥1 + 4500𝑥2


Sujeto a
𝑥1 + 3𝑥2 ≤ 42
𝑥1 + 2𝑥2 ≤ 40
0,5 𝑥1 + 𝑥2 ≤ 15

También podría gustarte