📄 bnbguicb.m
字号:
if ~isempty(data.nonlcon), eval(['edit ',data.nonlcon]); else edit; end;
case('numx')
numx=strtonum(get(gcbo,'String'));
if numx>=0 & numx==round(numx)
data.numx=numx;
if numx==0
data.x0=[];
data.xstatus=[];
data.xlb=[];
data.xub=[];
onoffx('off');
else
lx=size(data.x0,1);
if numx>lx
data.x0=[data.x0;zeros(numx-lx,1)];
data.xstatus=[data.xstatus;zeros(numx-lx,1)];
data.xlb=[data.xlb;zeros(numx-lx,1)];
data.xub=[data.xub;ones(numx-lx,1)];
else
data.x0=data.x0(1:numx);
data.xstatus=data.xstatus(1:numx);
data.xlb=data.xlb(1:numx);
data.xub=data.xub(1:numx);
end;
data.selx=selectx;
handle=findobj('Tag','xlist');
if numx<data.selx, set(handle,'Value',numx); data.selx=selectx; end;
set(handle,'String',num2str([1:numx]'));
updatex(data);
onoffx('on');
end;
end;
case('numpar')
numpar=strtonum(get(gcbo,'String'));
if numpar>=0 & numpar==round(numpar)
data.numpar=numpar;
if numpar==0
data.par=[];
onoffpar('off');
else
lpar=size(data.par,1);
if numpar>lpar
data.par=[data.par;zeros(numpar-lpar,1)];
else
data.par=data.par(1:numpar);
end;
data.selpar=selectpar;
handle=findobj('Tag','parlist');
if numpar<data.selpar, set(handle,'Value',numpar); data.selpar=selectpar; end;
set(handle,'String',num2str([1:numpar]'));
updatepar(data);
onoffpar('on');
end;
end;
case('to workspace')
assignin('base','fun',data.fun);
assignin('base','A',data.A);
assignin('base','B',data.B);
assignin('base','Aeq',data.Aeq);
assignin('base','Beq',data.Beq);
assignin('base','nonlcon',data.nonlcon);
disp('The variables fun, A, B, Aeq, Beq and nonlcon are loaded in the workspace for editing.');
case('from workspace')
data.fun=evalin('base','fun','disp(''fun not found in workspace.'');');
data.A=evalin('base','A','data.A');
data.B=evalin('base','B','data.B');
data.Aeq=evalin('base','Aeq','data.Aeq');
data.Beq=evalin('base','Beq','data.Beq');
data.nonlcon=evalin('base','nonlcon','data.nonlcon');
disp('The variables fun, A, B, Aeq, Beq and nonlcon are loaded from the workspace.');
set(findobj('Tag','fun'),'String',data.fun);
set(findobj('Tag','nonlcon'),'String',data.nonlcon);
case('set1')
data.settings(1)=get(gcbo,'Value');
case('set2')
data.settings(2)=get(gcbo,'Value');
case('set3')
data.settings(3)=get(gcbo,'Value');
case('maxSQPiter')
data.maxSQPiter=strtonum(get(gcbo,'String'));
case('opt1')
set(findobj('Tag','opt2'),'Value',0);
data.selopt=1;
updateopt(data);
case('opt2')
set(findobj('Tag','opt1'),'Value',0);
data.selopt=2;
updateopt(data);
case('optlist')
[data.selopt data.seloptpar]=selectopt;
updateopt(data);
case('optedit')
optparval=get(gcbo,'String');
number=strtonum(optparval);
if number~=0 | optparval=='0', optparval=number; end;
eval(['data.options',num2str(data.selopt),'.',data.optliststring{data.seloptpar},'=optparval;']);
case('errorslider')
handle=findobj('Tag','error BNB GUI');
errmsg=get(handle,'UserData');
handle=findobj('Tag','errorslider');
errorslider=get(handle,'Value');
handle=findobj('Tag','errormessage');
errmsg=textwrap(handle,errmsg);
errmsg=scrolltext(errmsg,errorslider,4);
set(handle,'String',errmsg);
end;
function selx=selectx;
handle=findobj('Tag','xlist');
selx=get(handle,'Value');
function updatex(data);
handle=findobj('Tag','xub');
set(handle,'String',num2str(data.xub(data.selx)));
handle=findobj('Tag','x0');
set(handle,'String',num2str(data.x0(data.selx)));
handle=findobj('Tag','xlb');
set(handle,'String',num2str(data.xlb(data.selx)));
handle=findobj('Tag','continuous');
set(handle,'Value',data.xstatus(data.selx)==0);
handle=findobj('Tag','integer');
set(handle,'Value',data.xstatus(data.selx)==1);
handle=findobj('Tag','fixed');
set(handle,'Value',data.xstatus(data.selx)==2);
function onoffx(onoff);
handle=findobj('Tag','xlist');
set(handle,'Enable',onoff);
handle=findobj('Tag','xub');
set(handle,'Enable',onoff);
handle=findobj('Tag','x0');
set(handle,'Enable',onoff);
handle=findobj('Tag','xlb');
set(handle,'Enable',onoff);
handle=findobj('Tag','continuous');
set(handle,'Enable',onoff);
handle=findobj('Tag','integer');
set(handle,'Enable',onoff);
handle=findobj('Tag','fixed');
set(handle,'Enable',onoff);
function selpar=selectpar;
handle=findobj('Tag','parlist');
selpar=get(handle,'Value');
function updatepar(data);
handle=findobj('Tag','par');
set(handle,'String',num2str(data.par(data.selpar)));
function onoffpar(onoff);
handle=findobj('Tag','parlist');
set(handle,'Enable',onoff);
handle=findobj('Tag','par');
set(handle,'Enable',onoff);
function [selopt,seloptpar]=selectopt;
handle=findobj('Tag','opt1');
tmp=get(handle,'Value');
if tmp==1, selopt=1; else selopt=2; end;
handle=findobj('Tag','optlist');
seloptpar=get(handle,'Value');
function updateopt(data);
handle=findobj('Tag','opt1');
set(handle,'Value',data.selopt==1);
handle=findobj('Tag','opt2');
set(handle,'Value',data.selopt==2);
eval(['optparval=optimget(data.options',num2str(data.selopt),',''',data.optliststring{data.seloptpar},''');']);
handle=findobj('Tag','optedit');
set(handle,'String',optparval);
function num=strtonum(string)
tmp=str2num(string);
if isempty(tmp), num=0; else num=tmp; end;
if any(size(num)>1), num=0; end;
function uierror(errmsg)
handle=guierr;
if ischar(errmsg), errmsg=cellstr(errmsg); end;
set(handle,'UserData',errmsg);
bnbguicb('errorslider');
function resultsmsg=updateresults(results)
if isempty(results.errmsg)
line1='Results BNB18:';
line2=sprintf('Z is %12.4g',results.Z);
line3='X is ';
line4=sprintf('%12.4g',results.X);
line5=sprintf('t is %12.1f seconds',results.t);
line6=sprintf('c is %12d cycles',results.c);
line7=sprintf('fail is %12d cycles',results.fail);
resultsmsg={line1 line2 line3 line4 line5 line6 line7};
else
line1='Results BNB18:';
line2='Error.';
line3=results.errmsg;
resultsmsg={line1 line2 line3};
end;
function showresults(resultsmsg);
if ischar(resultsmsg), resultsmsg=cellstr(resultsmsg); end;
handle=findobj('Tag','resultsslider');
resultsslider=get(handle,'Value');
handle=findobj('Tag','results');
resultsmsg=textwrap(handle,resultsmsg);
resultsmsg=scrolltext(resultsmsg,resultsslider,8);
set(handle,'String',resultsmsg);
function disptext=scrolltext(text,slidervalue,visiblelines);
if ischar(text), text=cellstr(text); end;
if visiblelines<1, disptext={''}; return; end;
textlines=size(text,1);
if textlines<1, disptext={''}; return; end;
hiddenlines=max(0,textlines-visiblelines);
hiddenlinesabove=round((1-slidervalue)*hiddenlines);
disptext=text(hiddenlinesabove+1:hiddenlinesabove+min(visiblelines,textlines));
function [succes,matrix]=loadmatrix(matrixname);
succes=0; matrix=[];
file=uigetfile('*.mat',['Select mat-file for matrix ',matrixname,'.']);
if file~=0
if all(file(size(file,2)-3:size(file,2))=='.mat')
foundfile=1;
eval(['load ',file,' ',matrixname,';'],'foundfile=0; uierror(''File not found.'');');
if foundfile==1
if exist(matrixname), matrix=matrixname; succes=1;
else uierror([matrixname,' has not been updated']); end;
end;
else uierror({'No mat-file.' [matrixname,' has not been updated.']}); end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -