function y=fode_sol(a,na,b,nb,u,t)
% fode_sol - closed-form solution of FODE with zero initial conditions
%
%   y=fode_sol(a,na,b,nb,u,t)
%   
%   a,na,b,nb - coefficients/order vectors of numerator and denominator
%   u - the samples of the input signal
%   t - the time vector, corresponding to u
%   y - the solutions of the FODE, with O(h)

% Copyright (c) Dingyu Xue, Northeastern University, China
% Last modified 28 March, 2017 
% Last modified 18 May, 2022 
   arguments
      a(1,:), na(1,:), b(1,:), nb(1,:), u(:,1), t(:,1)
   end
   h=t(2)-t(1); D=sum(a./h.^na); nT=length(t);
   D1=b(:)./h.^nb(:); nA=length(a); vec=[na nb];
   y1=zeros(nT,1); W=ones(nT,length(vec));
   for j=2:nT, W(j,:)=W(j-1,:).*(1-(vec+1)/(j-1)); end
   for i=2:nT
      A=[y1(i-1:-1:1)]'*W(2:i,1:nA);
      y1(i,1)=(u(i)-sum(A.*a./h.^na))/D;
   end
   for i=2:nT, y(i,1)=(W(1:i,nA+1:end)*D1)'*y1(i:-1:1); end
end

