FractionOrderSystem/FOTF Toolbox/nlfode_vec1.m

20 lines
703 B
Matlab

function [x,t]=nlfode_vec1(f,alpha,x0,h,tn,L0)
% nlfode_vec - another version of nlfode_vec, not recommended
% 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), tn(1,1), L0(1,1)=1e20;
end
n=length(x0); m=round(tn/h)+1; t=0; g=double(genfunc(1));
x1=x0; ha=h.^alpha(:); z=zeros(n,m); tk=0;
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, F0(i,1)=W(i,2:L+1)*z(i,k-1:-1:k-L).'-x0(i); end
F=@(x)x-f(tk,x).*ha+F0;
x1=fsolve(F,x1); t=[t; tk]; z(:,k)=x1-x0;
end
x=(z+repmat(x0,[1,m])).';
end