function [x,t]=nlfode_vec(f,alpha,x0,h,tn,L0)
% nlfode_vec - O(h^p) predictor solution of nonlinear single-term FODEs
%
%    [x,t]=nlfode_vec(f,alpha,x0,h,tn,L0)
%
%   f - function handles for the nonlinear explicit FODE
%   alpha - the maximum order
%   x0 - initial state vector
%   h - fixed step-size
%   tn - terminate time in the solution
%   L0 - the memory length for short-memory principle
%   x, t - the solution matrix for the states and time vector

% Copyright (c) Dingyu Xue, Northeastern University, China
% Last modified 28 March, 2017 
% Last modified 18 May, 2022 
   arguments
      f, alpha(1,:), x0(:,1), h(1,1){mustBePositive}
      tn(1,1){mustBePositive}, L0(1,1){mustBePositive}=1e20;
   end
   n=length(x0); m=round(tn/h)+1; t=0; g=double(genfunc(1));
   ha=h.^alpha; z=zeros(n,m); x1=x0;
   for i=1:n, W(i,:)=get_vecw(alpha(i),min(m,L0+1),g); end
   for k=2:m, tk=(k-1)*h; L=min(k-1,L0);
      for i=1:n
         x1(i)=f(tk,x1,i)*ha(i)-W(i,2:L+1)*z(i,k-1:-1:k-L).'+x0(i);
      end
      t=[t,tk]; z(:,k)=x1-x0;
   end
   x=(z+repmat(x0,[1,m])).'; t=t(:);
end
