⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qitrelop.m

📁 机器人控制仿真程序一书的所有源代码
💻 M
字号:
function qitrelop(flag,flag2)
% QITRELOP Iterate operations. (Utility Function)
%          QITRELOP executes the iteration slider presses.

% Author: Craig Borghesani
% 9/6/93
% Copyright (c) 1995-98 by The MathWorks, Inc.
%       $Revision: 1.4 $

f2=gcf;
f=get(f2,'userdata');
bthan=get(f,'userdata');
infmat=get(bthan(16),'userdata');

lomat=get(bthan(20),'userdata');
T=get(bthan(13),'userdata');
cont=get(bthan(19),'userdata');
set(infmat(21,3),'enable','on');

flag4=infmat(9,1);
if any(flag4==[1 3]),
 q=1; s=0;
elseif flag4==2,
 q=[1;1]; s=1;
end

butn_sel = get(infmat(21,1),'userdata');
cur_str = get(butn_sel,'string');
brac = find(cur_str=='[');
new_str = cur_str(1:brac);

if flag==0, % Gain
 oldk=cont(flag2,1);
 gain_val = get(infmat(17,1),'value');
 cont(flag2,1)=sign(cont(flag2,1))*gain_val;
 rtnv=ones(1,length(lomat(1,:)))*cont(flag2,1);
 lomat(2:2+s,:)=lomat(2:2+s,:).*(cont(flag2,1)/oldk);
 slider_min=get(infmat(17,1),'min');
 slider_max=get(infmat(17,1),'max');
 if gain_val <= slider_min | gain_val >= slider_max,
  set(infmat(17,1),'min',10^((20*log10(gain_val)-5)/20),...
                   'max',10^((20*log10(gain_val)+5)/20));
 end
 v1=num2str(cont(flag2,1),4);
 set(butn_sel,'string',[new_str,v1,']']);
elseif any(flag==[1 2]), % First order
 oldp=cont(flag2,1);
 newp=get(infmat(17,1),'value');
 if imag(oldp)~=0,
  sign_imag = sign(imag(oldp));
  newp = newp + sign_imag*pi/T*i;
 end
 rt=rlroot(oldp,lomat(1,:),[(flag==2)-(flag==1) T]);
 rtnv=rlroot(newp,lomat(1,:),[(flag==2)-(flag==1) T]);
 lomat(2:2+s,:)=lomat(2:2+s,:).*(rtnv(q,:)./rt(q,:));

 slider_min=get(infmat(17,1),'min');
 slider_max=get(infmat(17,1),'max');
 if real(newp) <= slider_min | real(newp) >= slider_max,
  set(infmat(17,1),'min',real(newp)*0.5,...
                   'max',real(newp)*1.5);
 end
 cont(flag2,1) = newp;
 v1=num2str(cont(flag2,1),4);
 set(butn_sel,'string',[new_str,v1,']']);

elseif any(flag==[3 4]), % Second order
 oldz=cont(flag2,1); oldw=cont(flag2,2);
 cont(flag2,1)=get(infmat(17,2),'value');
 cont(flag2,2)=get(infmat(17,1),'value');
 rt=cproot(oldz,oldw,lomat(1,:),[(flag==4)-(flag==3) T]);
 rtnv=cproot(cont(flag2,1),cont(flag2,2),lomat(1,:),[(flag==4)-(flag==3) T]);
 lomat(2:2+s,:)=lomat(2:2+s,:).*(rtnv(q,:)./rt(q,:));
 rtnv=lomat(2,:)./rtnv;

 slider_min=get(infmat(17,2),'min');
 slider_max=get(infmat(17,2),'max');
 if cont(flag2,1) <= slider_min | cont(flag2,1) >= slider_max,
  set(infmat(17,2),'min',cont(flag2,1)*0.5,...
                   'max',cont(flag2,1)*1.5);
 end

 slider_min=get(infmat(17,1),'min');
 slider_max=get(infmat(17,1),'max');
 if cont(flag2,2) <= slider_min | cont(flag2,2) >= slider_max,
  if cont(flag2,2)*1.5 <= lomat(1,length(lomat(1,:))) & ...
     cont(flag2,2)*0.5 >= lomat(1,1),
   set(infmat(17,1),'min',cont(flag2,2)*0.5,...
                    'max',cont(flag2,2)*1.5);
  elseif cont(flag2,2)*1.5 > lomat(1,length(lomat(1,:))),
   set(infmat(17,1),'min',cont(flag2,2)*0.5,...
                    'max',lomat(1,length(lomat(1,:))));
  elseif cont(flag2,2)*0.5 < lomat(1,1),
   set(infmat(17,1),'min',lomat(1,1),...
                    'max',cont(flag2,2)*1.5);

  end
 end
 v1=num2str(cont(flag2,1),4);
 v2=num2str(cont(flag2,2),4);
 set(butn_sel,'string',[new_str,v1,', ',v2,']']);

elseif flag==5, % Lead/Lag
 oldp=cont(flag2,1); oldw=cont(flag2,2);
 rt=ldlgcplx(oldp,oldw,lomat(1,:),T);
 cont(flag2,1)=get(infmat(17,2),'value');
 cont(flag2,2)=get(infmat(17,1),'value');
 rtnv=ldlgcplx(cont(flag2,1),cont(flag2,2),lomat(1,:),T);
 lomat(2,:)=lomat(2,:).*(rtnv./rt);

 slider_min=get(infmat(17,1),'min');
 slider_max=get(infmat(17,1),'max');
 if cont(flag2,2) <= slider_min | cont(flag2,2) >= slider_max,
  if cont(flag2,2)*1.5 <= lomat(1,length(lomat(1,:))) & ...
     cont(flag2,2)*0.5 >= lomat(1,1),
   set(infmat(17,1),'min',cont(flag2,2)*0.5,...
                    'max',cont(flag2,2)*1.5);
  elseif cont(flag2,2)*1.5 > lomat(1,length(lomat(1,:))),
   set(infmat(17,1),'min',cont(flag2,2)*0.5,...
                    'max',lomat(1,length(lomat(1,:))));
  elseif cont(flag2,2)*0.5 < lomat(1,1),
   set(infmat(17,1),'min',lomat(1,1),...
                    'max',cont(flag2,2)*1.5);

  end
 end
 v1=num2str(cont(flag2,1),4);
 v2=num2str(cont(flag2,2),4);
 set(butn_sel,'string',[new_str,v1,', ',v2,']']);

elseif flag==6, % Notch
 zta1=cont(flag2,1); zta2=cont(flag2,2);
 rt=ntchcplx(zta1,zta2,cont(flag2,3),lomat(1,:),T);
 cont(flag2,1)=get(infmat(17,3),'value');
 cont(flag2,2)=get(infmat(17,2),'value');
 cont(flag2,3)=get(infmat(17,1),'value');
 rtnv=ntchcplx(cont(flag2,1),cont(flag2,2),cont(flag2,3),lomat(1,:),T);
 lomat(2:2+s,:)=lomat(2:2+s,:).*(rtnv(q,:)./rt(q,:));

 slider_min=get(infmat(17,3),'min');
 slider_max=get(infmat(17,3),'max');
 if cont(flag2,1) <= slider_min | cont(flag2,1) >= slider_max,
  set(infmat(17,3),'min',cont(flag2,1)*0.5,...
                   'max',cont(flag2,1)*1.5);
 end

 slider_min=get(infmat(17,2),'min');
 slider_max=get(infmat(17,2),'max');
 if cont(flag2,2) <= slider_min | cont(flag2,2) >= slider_max,
  set(infmat(17,2),'min',cont(flag2,2)*0.5,...
                   'max',cont(flag2,2)*1.5);
 end

 slider_min=get(infmat(17,1),'min');
 slider_max=get(infmat(17,1),'max');
 if cont(flag2,3) <= slider_min | cont(flag2,3) >= slider_max,
  if cont(flag2,3)*1.5 <= lomat(1,length(lomat(1,:))) & ...
     cont(flag2,3)*0.5 >= lomat(1,1),
   set(infmat(17,1),'min',cont(flag2,3)*0.5,...
                    'max',cont(flag2,3)*1.5);
  elseif cont(flag2,3)*1.5 > lomat(1,length(lomat(1,:))),
   set(infmat(17,1),'min',cont(flag2,3)*0.5,...
                    'max',lomat(1,length(lomat(1,:))));
  elseif cont(flag2,3)*0.5 < lomat(1,1),
   set(infmat(17,1),'min',lomat(1,1),...
                    'max',cont(flag2,3)*1.5);

  end
 end
 v1=num2str(cont(flag2,1),4);
 v2=num2str(cont(flag2,2),4);
 v3=num2str(cont(flag2,3),4);
 set(butn_sel,'string',[new_str,v1,', ',v2,', ',v3,']']);

end
set(bthan(19),'userdata',cont);
set(bthan(20),'userdata',lomat);

if flag4==1, qnicplt(f);
elseif flag4==2, qmagplt(f);
elseif flag4==3, mgphplot(f);
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -