32 lines
1.1 KiB
Matlab
32 lines
1.1 KiB
Matlab
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
|