| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 802 人关注过本帖
标题:matlab 的图形界面设计中的一个小问题,大家能进来看一下吗?感谢万分!
取消只看楼主 加入收藏
jun616017330
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-5-20
收藏
 问题点数:0 回复次数:0 
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)
搜索更多相关主题的帖子: matlab 图形 界面 感谢 设计 
2008-05-20 07:26
快速回复:matlab 的图形界面设计中的一个小问题,大家能进来看一下吗?感谢万分 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021971 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved