function y=lsim(G,u,t)
% lsim - simulation of an FOTFS object driven by given inputs
%
%   lsim(G,u,t)
% 
%   G - an FOTF object
%   u, t- input samples and time vector

% Copyright (c) Dingyu Xue, Northeastern University, China
% Last modified 28 March, 2017 
% Last modified 18 May, 2022 
   [n,m]=size(G); t0=t(1); t1=t(end); [nu,mu]=size(u); 
   if nu==m && mu==length(t), u=u.'; end
   if nargout==0, lsim(tf(zeros(n,m)),'w',zeros(size(u)),t); end
   for i=1:n, y1=0;
      for j=1:m, g=G(i,j); uu=u(:,j); 
         y2=fode_sol9(g.den.a,g.den.na,g.num.a,g.num.na,uu,t,3);
         ii=find(t>=g.ioDelay); lz=zeros(1,ii(1)-1);
         y2=[lz, y2(1:end-length(lz))]; y(:,i)=y1+y2;
   end, end
   if nargout==0, khold=ishold; hold on
      h=get(gcf,'child'); h0=h(end:-1:2);
      for i=1:n, axes(h0(i)); 
         plot(t,y(:,i),t,u,'--'), xlim([t0,t1])
   end, if khold==0, hold off, end, end
end
