4
% ******** function varargout = IOSimplex(varargin) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @IOSimplex_OpeningFcn, ... 'gui_OutputFcn', @IOSimplex_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % ******** function IOSimplex_OpeningFcn(hObject, eventdata, handles, varargin) handles.output=hObject; handles.numVar=2; %numero de variables handles.numRest=2; %numero de restricciones handles.tipo=1; % 1=maximizar 2=minimizar guidata(hObject, handles); % ******** function varargout = IOSimplex_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % ******** function pmTipo_Callback(hObject, eventdata, handles) handles.tipo=get(hObject,'Value'); guidata(hObject,handles); % ******** function pmTipo_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String',{'Maximizar','Minimizar'}); % ******** function botResolver_Callback(hObject, eventdata, handles) simplex=get(handles.tablaDatos,'Data'); %se inserta las variables de holgura-exceso entre las columnas base y la de las variables de solucion: simplex=[[simplex(:,1:handles.numVar),[eye(handles.numRest);zeros(1,ha ndles.numRest)]],simplex(:,handles.numVar+1)]; orden=size(simplex);

Codigo en Matlab

Embed Size (px)

DESCRIPTION

matlab asdsdasdj asdaso sadiqwe qesimplex code sdada iqwpqwiqwe wqe qw eqwu ewqehqouwehwqqwipeuhwqp uieqhwiuqweqwe uiqwpe uiqhwep uqwepiuqhweuiqwwqe qwe wqe wqe

Citation preview

% ******** function varargout = IOSimplex(varargin) gui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', @IOSimplex_OpeningFcn, ...'gui_OutputFcn', @IOSimplex_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []);if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});else gui_mainfcn(gui_State, varargin{:}); end

% ******** function IOSimplex_OpeningFcn(hObject, eventdata, handles, varargin)handles.output=hObject;handles.numVar=2; %numero de variables handles.numRest=2; %numero de restricciones handles.tipo=1; % 1=maximizar 2=minimizar guidata(hObject, handles);

% ******** function varargout = IOSimplex_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

% ******** function pmTipo_Callback(hObject, eventdata, handles)handles.tipo=get(hObject,'Value'); guidata(hObject,handles);

% ******** function pmTipo_CreateFcn(hObject, eventdata, handles)if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end set(hObject,'String',{'Maximizar','Minimizar'});

% ********function botResolver_Callback(hObject, eventdata, handles) simplex=get(handles.tablaDatos,'Data');%se inserta las variables de holgura-exceso entre las columnas base y la de las variables de solucion: simplex=[[simplex(:,1:handles.numVar),[eye(handles.numRest);zeros(1,ha ndles.numRest)]],simplex(:,handles.numVar+1)]; orden=size(simplex); base=(zeros(1,handles.numVar)); %se guardan los indices de las variables que entran en la base signo=1; %cambia los signos de la funcion objetivo para usar una sola condicinif handles.tipo==2 signo=-1; end

%se toma la ultima fila de simplex, se multiplica por el signo, se pregunta%si sus elementos son es mayores a cero, se promedian los resultados y se comparan con 1while mean((simplex(orden(1),:)*signo)>=0)~=1disp(simplex);if handles.tipo==1[~,y]=min(simplex(orden(1),1:orden(2)-1)); %se obtiene el indice del ms negativo de la f. objetivo en 'y'else[~,y]=max(simplex(orden(1),1:orden(2)-1)); %se obtiene el indice del ms positivo de la f. objetivo en 'y'endx=1; %guarda el indice de la fila pivote;pivote=simplex(1,orden(2))/simplex(1,y); %se busca la fila pivote, se divide var. sol. para columna 'y'for i=2:(orden(1)-1)if simplex(i,y)>0aux=simplex(i,orden(2))/simplex(i,y); %se divide var. sol. para columna pivote 'y'if pivote