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

📄 ctsysplt.m

📁 trabajos en matlab para verificar son muy buenos
💻 M
字号:
function ctsysplt
% CTSYSPLT Support file for CTSYSGUI


% ADSP Toolbox: Version 2.0 
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu
% Copyright (c) 1998


f = gcf;
ui = get(f,'userdata');
num_edt = ui(43);
den_edt = ui(45);
resp_type = ui(48);
top_axs=ui(29);
ic_edt = ui(47);
bot_axs = ui(32);
   action_pop  = ui(50);
   cust_edt = ui(63);
   stat_bar = ui(61);
line_han = get(bot_axs,'children');
input_data = get(ui(8),'userdata');
p_range = input_data(1,:);
y_input = input_data(2,:);
t_vec=p_range(:);
tmn=min(t_vec);tmx=max(t_vec);
ymax=max(y_input);ymin=min(y_input);
%if ymax==ymin,
%ymax=ymax+0.5;ymin=ymin-0.5;
%end


%%%%%%%%%%
if get(ui(15),'userdata')==1
set(f,'currentaxes',ui(29));
zoom out,zoom reset
set(f,'currentaxes',ui(32));
zoom out,zoom reset
end
%%%%%%%%%%

set(top_axs,'xlim',[tmn,tmx]);
if ymax>ymin,set(top_axs,'ylim',[ymin,ymax]);end



ele_mat = get(ui(1),'userdata');
[r,c] = size(ele_mat);
symb=0;sum_vec=0;x_str=[];input_vec=[];
   for k = 1:r,
      ele_vec = ele_mat(k,:);
      ele_str1 = num2str(ele_vec(1),2);
      ele_str2 = num2str(ele_vec(2),2);
      ele_str3 = num2str(ele_vec(3),2);
      ele_str4 = num2str(ele_vec(4),2);
      ele_str5 = num2str(ele_vec(5),2);
      ele_str7 = num2str(ele_vec(7),2);
      ele_str9 = num2str(ele_vec(9),2);
     
      sum_vec=sum_vec+ele_vec(6);

      if ele_vec(6) == 1, % general form
         txt_str = genasig2(ele_vec(1:5),'t');
         input_vec=[input_vec;ele_vec(1:5)];
      elseif ele_vec(6) == 2, % Matlab array
             txt_str = get(ele_vec(1),'userdata');
           if txt_str(1)=='W',
              txt_str(1)=[];txt_str=evalin('base',txt_str);
           end
      end
      if ~isempty(x_str)
        x_str = [x_str,'+(',txt_str,')'];
      else
        x_str = ['(',txt_str,')'];
      end
    end
if sum_vec==r,symb=1;end


% Verify Transfer Function 
hn_st = get(num_edt,'string');
if isempty(hn_st)
   errordlg('Nothing entered.','Input Error');
   return
end
problem=0;if hn_st(1)=='W',
hn_st(1)=[];evalin('base',[hn_st ';'],'problem=1;')
if problem==0, B=evalin('base',hn_st);
if isstr(B), B=eval(['[',B,']'],'[]');end
else
   errordlg('MATLAB Syntax error.','Input Error');
   return
end
else
B = eval(['[',hn_st,']'],'[]');
end

if isempty(B)
   errordlg('MATLAB Syntax error.','Input Error');
   return
end

% Verify Transfer Function 
hd_st = get(den_edt,'string');
if isempty(hd_st)
   errordlg('Nothing entered.','Input Error');
   return
end
problem=0;if hd_st(1)=='W',
hd_st(1)=[];evalin('base',[hd_st ';'],'problem=1;')
if problem==0, A=evalin('base',hd_st);
if isstr(A), A=eval(['[',A,']'],'[]');end
else
   errordlg('MATLAB Syntax error.','Input Error');
   return
end
else
A = eval(['[',hd_st,']'],'[]');
end

if isempty(A)
   errordlg('MATLAB Syntax error.','Input Error');
   return
end

if ~any(A) | ~any(B)  % String of zeros
   errordlg('Num and Den must have nonzero elements.','Input Error');
   return;
end

   while A(1) == 0
      A(1) = [];
   end
   while B(1) == 0
      B(1) = [];
   end

ic_st = get(ic_edt,'string');
if isempty(ic_st)
   ic = zeros(1,length(A)-1);
else
problem=0;if ic_st(1)=='W',
ic_st(1)=[];evalin('base',[ic_st ';'],'problem=1;')
if problem==0, ic=evalin('base',ic_st);
if isstr(ic), ic=eval(['[',ic,']'],'[]');end
else
   errordlg('MATLAB Syntax error.','Input Error');
   return
end
else
ic = eval(['[',ic_st,']'],'[]');
end
end

 if length(ic) ~= length(A)-1,
   errordlg(['Initial condition length must be length(Den)-1'],'Input Error');
   return;
 end
  

ty=get(action_pop,'value');
if ty==1 
meth='rk1';
elseif ty==2, %cyx
meth='rk2';
elseif ty==3, %rxy
meth='rk4';
elseif ty==4, %ryx
meth='sim';
end


ty2 = get(resp_type,'value');
if ty2 == 1
res_tit='Total Response';
elseif ty2 == 2  % Zero-Input
res_tit='Zero-Input Response';
elseif ty2 == 3  % Zero-State
res_tit='Zero-State Response';
end
res_tit=[res_tit ' (numerical results shown dashed)'];
flag=0;

%NUMERICAL
ymin1=0;ymax1=100*eps;
if length(A)<=length(B)
set(ui(34),'xdata',0,'ydata',0); %for rk
else
flag=1;
if isempty(x_str), x_str='0*t';end

if ty2 == 1
y_output = ctsim(B,A,x_str,t_vec,ic,meth);
elseif ty2 == 2  % Zero-Input
y_output = ctsim(B,A,'0*t',t_vec,ic,meth);
elseif ty2 == 3  % Zero-State
y_output = ctsim(B,A,x_str,t_vec,0*ic,meth);
end
set(ui(34),'xdata',t_vec,'ydata',y_output); %for rk
%set(ui(65),'userdata',t_vec(:)');
set(ui(65),'userdata',y_output');

ymax1=max([ymax1;y_output]);ymin1=min([ymin1;y_output]);
set(bot_axs,'xlim',[tmn,tmx],'ylim',[ymin1,ymax1]);
end

%SYMBOLIC 
if symb==0
set(ui(33),'xdata',0,'ydata',0); %for symb
set(stat_bar,'string',' ');
else
[ytot,yzs,yzi]=sysresp1('s',B,A,input_vec,ic);
if ty2==1
y_symb=ytot;
elseif ty2==2
y_symb=yzi;
elseif ty2==3
y_symb=yzs;
end
flag=1;
t=t_vec;
if ~isempty(y_symb)
set(ui(66),'userdata',y_symb);
y_vec=eval(y_symb);
set(ui(33),'xdata',t_vec,'ydata',y_vec); %for symb
ymax1=max([ymax1;y_vec]);ymin1=min([ymin1;y_vec]);
set(bot_axs,'xlim',[tmn,tmx],'ylim',[ymin1,ymax1]);
set(stat_bar,'string',[res_tit ' = ' y_symb]);
else
set(ui(33),'xdata',0,'ydata',0); %for symb
set(stat_bar,'string',[res_tit ' = 0']);
end
end


tt=get(bot_axs,'title');
set(tt,'string',res_tit);
if flag==0
   set(stat_bar,'string',' ');
   errordlg('Cannot simulate given system','Input Error');
set(ui(65),'userdata',[]);
set(ui(66),'userdata',[]);
   return;
end
  
%SAVE??
%set(ui(4),'userdata',[t_vec y_output]);

⌨️ 快捷键说明

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