- 积分
- 83
- 注册时间
- 2003-11-14
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2006-3-28 16:21:43
|
显示全部楼层
来自 新疆乌鲁木齐
Re:做线性优化时能否单独输出一个自变量x的值?
my way show as below:- function LinprogGUI
- clc
- close all
- global handles1
- hMainFig=figure('numbertitle','off','menubar','none','units','normalized','name','线性规划GUI例子');
- set(hMainFig,'units','normalized','position',[.05,.15,.85,.5]);
- set(hMainFig,'defaultuicontrolfontname','隶书');
- set(hMainFig,'defaultuicontrolfontsize',13);
- set(hMainFig,'defaultuicontrolunits','normalized');
- hPush1=uicontrol(hMainFig,'style','push','string','线性规划问题计算',...
- 'tag','hPush1','position',[.03,.04,.28,.08]);
- hPush2=uicontrol(hMainFig,'style','push','string','显示计算结果',...
- 'tag','hPush2','position',[.36,.04,.28,.08],'enable','off');
- hPush3=uicontrol(hMainFig,'style','push','string','退出程序',...
- 'tag','hPush3','position',[.69,.04,.2,.08]);
- hTextFTarget=uicontrol(gcf,...
- 'style','text',...
- 'position',[.02,.93,.16,.05],...
- 'horizontal','center',...
- 'string','目标函数系数f:',...
- 'fontsize',13);
- hEditFTarget=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.02,.63,.16,.29],'tag','hEditFTarget','string','[-5;-4;-6]','max',2);
- delta=str2num(get(hEditFTarget,'string'));
- set(hEditFTarget,'string',sprintf(FormatOutput(delta),delta));
- hTextRestraint=uicontrol(gcf,...
- 'style','text',...
- 'position',[.21,.93,.53,.05],...
- 'horizontal','center',...
- 'string','约束条件矩阵A:',...
- 'fontsize',13);
- hEditRestraint=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.21,.63,.53,.29],'tag','hEditRestraint','string','[1 -1 1;3 2 4;3 2 0]','max',2);
- delta=str2num(get(hEditRestraint,'string'));
- set(hEditRestraint,'string',sprintf(FormatOutput(delta),delta));
- hTextLimit=uicontrol(gcf,...
- 'style','text',...
- 'position',[.77,.93,.2,.05],...
- 'horizontal','center',...
- 'string','约束条件上界b:',...
- 'fontsize',13);
- hEditLimit=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.77,.63,.2,.29],'tag','hEditLimit','string','[20;42;30]','max',2);
- delta=str2num(get(hEditLimit,'string'));
- set(hEditLimit,'string',sprintf(FormatOutput(delta),delta));
- set(hPush3,'callback','close all');
- hTextResult1=uicontrol(gcf,...
- 'style','text',...
- 'position',[.21,.55,.17,.05],...
- 'horizontal','center',...
- 'string','设计变量结果:',...
- 'fontsize',13);
- hEditResult1=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.21,.15,.17,.39],'tag','hEditResult1','max',2);
- hTextResult2=uicontrol(gcf,...
- 'style','text',...
- 'position',[.39,.55,.17,.05],...
- 'horizontal','center',...
- 'string','目标函数结果:',...
- 'fontsize',13);
- hEditResult2=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.39,.15,.17,.39],'tag','hEditResult2','max',2);
- hTextX0=uicontrol(gcf,...
- 'style','text',...
- 'position',[.57,.55,.17,.05],...
- 'horizontal','center',...
- 'string','初值x0:',...
- 'fontsize',13);
- hEditX0=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.57,.15,.17,.39],'tag','hEditX0','string','[0;0;0]','max',2);
- delta=str2num(get(hEditX0,'string'));
- set(hEditX0,'string',sprintf(FormatOutput(delta),delta));
- hTextLb=uicontrol(gcf,...
- 'style','text',...
- 'position',[.02,.55,.16,.05],...
- 'horizontal','center',...
- 'string','设计变量下界lb:',...
- 'fontsize',13);
- hEditLb=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.02,.15,.16,.39],'tag','hEditLb','string','[0;0;0]','max',2);
- delta=str2num(get(hEditLb,'string'));
- set(hEditLb,'string',sprintf(FormatOutput(delta),delta));
- hTextUb=uicontrol(gcf,...
- 'style','text',...
- 'position',[.77,.55,.2,.05],...
- 'horizontal','center',...
- 'string','设计变量上界ub:',...
- 'fontsize',13);
- hEditUb=uicontrol(hMainFig,'style','edit','unit','normalized','fontsize',9,...
- 'position',[.77,.15,.2,.39],'tag','hEditUb','max',2);
- delta=str2num(get(hEditUb,'string'));
- set(hEditUb,'string',sprintf(FormatOutput(delta),delta));
- set(hPush3,'callback','close all');
- handles1=guihandles(hMainFig);
- guidata(hMainFig,handles1);
- set(hPush1,'callback','MainCompute');
- set(hPush2,'callback','DisplayResult')
- % 矩阵输出显示格式函数
- function str=FormatOutput(InputMatrix)
- str=[];
- for i=1:size(InputMatrix,2)-1
- str=[str,'%3.2e',' '];
- end
- str=[str,' ','%3.2e',' \n'];
复制代码- function MainCompute
- global handles1
- f=str2num(get(handles1.hEditFTarget,'string'));
- A=str2num(get(handles1.hEditRestraint,'string'));
- b=str2num(get(handles1.hEditLimit,'string'));
- lb=str2num(get(handles1.hEditLb,'string'));
- ub=str2num(get(handles1.hEditUb,'string'));
- [x,fval,exitflag,output] = linprog(f,A,b,[],[],lb,ub);
- if exitflag<0
- errordlg('优化失败,请检查!')
- else
- set(handles1.hPush2,'enable','on')
- set(handles1.hEditResult2,'userdata',fval)
- set(handles1.hEditResult1,'userdata',x)
- end
复制代码- function DisplayResult
- global handles1
- x=get(handles1.hEditResult2,'userdata');
- set(handles1.hEditResult2,'string',sprintf(FormatOutput(x),x));
- fval=get(handles1.hEditResult1,'userdata');
- set(handles1.hEditResult1,'string',sprintf(FormatOutput(fval),fval));
- % 矩阵输出显示格式函数
- function str=FormatOutput(InputMatrix)
- str=[];
- for i=1:size(InputMatrix,2)-1
- str=[str,'%3.6e',' '];
- end
- str=[str,' ','%3.6e',' \n'];
复制代码 存成三个M文件,运行第一个
资料不用看很多,把各种常用属性了解了基本就可以做,看上两个比较经典的代码段(比如cwit同学^_^写过不少好东东,找找)就够用了
===========================================
补一段儿:
公认难的非线性有限元分析软件abaqus你都能做好,GUI应当相对容易...^_^
http://www.simwe.com/forum/post/view?bid=19&id=504196&tpg=1&ppg=1&sty=1&age=0#504196
http://bbs.matwav.com/post/view?bid=12&id=46358&sty=3&keywords=GUI
http://www.simwe.com/forum/post/view?bid=19&id=557545&tpg=1&ppg=1&sty=1&age=0#557545
http://www.simwe.com/forum/post/view?bid=19&id=540190&sty=1&tpg=1&age=100
其中最上面两个是我最初学习GUI看的资料,当时打印出来挨个作了一遍,看完之后照做照改,把它不完善的地方自己写成包含自己风格的代码,基本就ok,最后一个是cwit的一篇经验性的总结,是他的得意之作,水平再深些看看绝对有收获,因为GUI从根本上讲就两点难——外部控件的使用和参数的传递,其他的东西,看看set/get中的figure->axes->object 所有的property,了解常用的那些property,自己跟着作几个,应当可以满足实际工程的需要。原来还写过一个不同界面传递参数的代码,初学时对于比较难掌握的参数传递或许有帮助,附如下:- function MainFunctionFigure
- clc
- close all
- global handles1 handles2
- hMainFig=figure('numbertitle','off','menubar','none','units','normalized','tag','hMainFig');
- set(hMainFig,'units','normalized','position',[.2,.2,.6,.6]);
- set(hMainFig,'defaultuicontrolfontname','隶书');
- set(hMainFig,'defaultuicontrolfontsize',13);
- set(hMainFig,'defaultuicontrolunits','normalized');
- hPush1=uicontrol(hMainFig,'style','push','string','参数设定',...
- 'tag','hPush1','position',[.1,.1,.2,.1]);
- hPush2=uicontrol(hMainFig,'style','push','string','退出程序',...
- 'tag','hPush2','position',[.6,.1,.2,.1]);
- hEditShow=uicontrol(hMainFig,'style','edit','unit','normalized',...
- 'position',[.4,.4,.2,.1],'tag','hEditShow','string','0');
- set(hPush2,'callback','close all');
- set(hPush1,'callback','SubFunctionFigure');
- handles1=guihandles(hMainFig);
- guidata(hMainFig,handles1);
复制代码- function SubFunctionFigure(handles)
- global handles1 handles2
- hParFig=figure('numbertitle','off','menubar','none');
- hParEdit=uicontrol(hParFig,'style','edit','units','normalized','position',...
- [.4,.4,.2,.1],'tag','hParEdit','string','12');
- hParPush3=uicontrol(hParFig,'style','push','string','参数传递','tag',...
- 'hParPush3','units','normalized','position',[.1,.1,.2,.1]);
- set(hParPush3,'callback',[...
- 'global handles1 handles2,',...
- 'set(handles1.hEditShow,''userdata'',get(handles2.hParEdit,''string''));',...
- 'strPar=get(handles2.hParEdit,''string'');',...
- 'set(handles1.hEditShow,''string'',strPar);',...
- 'close gcf,',...
- ]);
- handles2=guihandles(hParFig);
- guidata(hParFig,handles2);
复制代码 [code][/code]
优化例子的抓图(与参数传递代码无关): |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|