function Y=step(G,t,key)
% step - simulation of an FOTF object driven by step inputs
%
%   step(G,t)
% 
%   G - an FOTF object
%   t- the time vector

% Copyright (c) Dingyu Xue, Northeastern University, China
% Last modified 28 March, 2017 
% Last modified 18 May, 2022 
   [n,m]=size(G); M=tf(zeros(n,m)); 
   if nargin==1, t=(0:0.2:10)'; elseif length(t)==1, t=0:t/100:t; end
   if nargout==0, t0=t(1); t1=t(end); 
      if nargin<=2, step(M,'w'); else, impulse(M,'w'); 
   end, end
   for i=1:n, for j=1:m
      g=G(i,j); y1=g_step(g,t); y(i,j,:)=y1';
   end, end
   if nargout==0, khold=ishold; hold on 
      h=get(gcf,'child'); h0=h(end:-1:2); 
      for i=1:n, for j=1:m, axes(h0((i-1)*n+j)); 
         yy=y(i,j,:); plot(t,yy(:)), xlim([t0,t1])
      end, end
      if khold==0, hold off, end
   elseif n*m==1, Y=y1; else, Y=y; end
end
%subfunction to evaluate step response of SISO model
function y=g_step(g,t,key)
   u=ones(size(t));
   [a,na,b,nb,T]=fotfdata(g); y1=fode_sol(a,na,b,nb,u,t);
   ii=find(t>=T); lz=zeros(1,ii(1)-1); y=[lz, y1(1:end-length(lz))];
end