matlab 的图形界面设计中的一个小问题,大家能进来看一下吗?感谢万分!
[bo]如何将如下二个M文件产生回调,实现如下功能.......[/bo]【*例11.4.3.2-1】目标:制作演示“归一化二阶系统单位阶跃响应”的交互界面。在该界面中,阻尼比可在[0.02,2.02]中连续调节,标志当前阻尼比值;可标志峰值时间和大小;可标志(响应从0到0.95所需的)上升时间。本例涉及以下主要内容:(A)静态文本的创建和实时改写。(B)滑动键的创建;'Max' 和 'Min' 的设置;'Value' 的设置和获取。(C)检录框的创建;'Value' 的获取。(D)受多个控件影响的回调操作。[exm11432_1.m]
clf reset
set(gcf,'unit','normalized','position',[0.1,0.2,0.64,0.35]);
set(gcf,'defaultuicontrolunits','normalized');
set(gcf,'defaultuicontrolfontsize',12);
set(gcf,'defaultuicontrolfontname','隶书');
set(gcf,'defaultuicontrolhorizontal','left');
str='归一化二阶系统阶跃响应曲线';
set(gcf,'name',str,'numbertitle','off'); %书写图形窗名
h_axes=axes('position',[0.05,0.2,0.6,0.7]); %定义轴位框位置
set(h_axes,'xlim',[0,15]); %设置时间轴长度
str1='当前阻尼比=';
t=0:0.1:10;z=0.5;y=step(1,[1 2*z 1],t);
hline=plot(t,y);
htext=uicontrol(gcf,'style','text',... %制作静态说明文本框 <14>
'position',[0.67,0.8,0.33,0.1],...
'string',[str1,sprintf('%1.4g\',z)]);
hslider=uicontrol(gcf,'style','slider',... %创建滑动键 <17>
'position',[0.67,0.65,0.33,0.1],...
'max',2.02,'min',0.02,... %设最大阻尼比为2,最小阻尼比为0.02 <19>
'sliderstep',[0.01,0.05],...%箭头操纵滑动步长1%,游标滑动步长5% <20>
'Value',0.5); %缺省取阻尼比等于0.5 <21>
hcheck1=uicontrol(gcf,'style','checkbox',... %创建峰值检录框 <22>
'string','最大峰值' ,...
'position',[0.67,0.50,0.33,0.11]);
vchk1=get(hcheck1,'value'); %获得峰值检录框的状态值 <25>
hcheck2=uicontrol(gcf,'style','checkbox',... %创建上升时间检录框 <26>
'string','上升时间(0->0.95)',...
'position',[0.67,0.35,0.33,0.11]);
vchk2=get(hcheck2,'value'); %获得上升时间检录框的状态值 <29>
set(hslider,'callback',[... %操作滑动键,引起回调 <30>
'z=get(gcbo,''value'');',... %获得滑动键状态值 <31>
'callcheck(htext,str1,z,vchk1,vchk2)']); %被回调的函数文件 <32>
set(hcheck1,'callback',[... %操作峰值检录框,引起回调 <33>
'vchk1=get(gcbo,''value'');',... %获得峰值检录框状态值 <34>
'callcheck(htext,str1,z,vchk1,vchk2)']); %被回调的函数文件 <35>
set(hcheck2,'callback',[... %操作峰值检录框,引起回调 <36>
'vchk2=get(gcbo,''value'');',... %获得峰值检录框状态值 <37>
'callcheck(htext,str1,z,vchk1,vchk2)']); %被回调的函数文件 <38>
[callcheck.m]
function callcheck(htext,str1,z,vchk1,vchk2)
cla,set(htext,'string',[str1,sprintf('%1.4g\',z)]); %更新静态文本框内容 <2>
dt=0.1;t=0:dt:15;N=length(t);y=step(1,[1 2*z 1],t);plot(t,y);
if vchk1 %假如峰值框被选中 <4>
[ym,km]=max(y);
if km<(N-3) %假如在设定时间范围内能插值 <6>
k1=km-3;k2=km+3;k12=k1:k2;tt=t(k12);
yy=spline(t(k12),y(k12),tt); %局部样条插值 <8>
[yym,kkm]=max(yy); %求更精确的峰值位置
line(tt(kkm),yym,'marker','.',... %画峰值点 <10>
'markeredgecolor','r','markersize',20);
ystr=['ymax = ',sprintf('%1.4g\',yym)];
tstr=['tmax = ',sprintf('%1.4g\',tt(kkm))];
text(tt(kkm),1.05*yym,{ystr;tstr})
else %假如在设定时间范围内不能插值 <15>
text(10,0.4*y(end),{'ymax --> 1';'tmax --> inf'})
end
end
if vchk2 %假如上升时间框被选中 <19>
k95=min(find(y>0.95));k952=[(k95-1),k95];
t95=interp1(y(k952),t(k952),0.95); %线性插值 <21>
line(t95,0.95,'marker','o','markeredgecolor','k','markersize',6);
tstr95=['t95 = ',sprintf('%1.4g\',t95)];
text(t95,0.65,tstr95)
end
图11.4.3.2-1
[[it] 本帖最后由 jun616017330 于 2008-5-20 12:29 编辑 [/it]]
未命名.rar
(6.5 KB)