init
This commit is contained in:
40
FOTF Toolbox/nlfep.m
Normal file
40
FOTF Toolbox/nlfep.m
Normal file
@ -0,0 +1,40 @@
|
||||
function [y,t]=nlfep(fun,alpha,y0,tn,h,p,err)
|
||||
% nlfec - O(h^p) predictor solution of nonlinear multi-term FODEs
|
||||
%
|
||||
% [y,t]=nlfep(fun,alpha,y0,tn,h,p,err)
|
||||
%
|
||||
% fun - function handles for the nonlinear explicit FODE
|
||||
% alpha - the maximum order
|
||||
% y0 - initial vector of the output and its integer-order derivatives
|
||||
% tn - terminate time in the solution
|
||||
% h - fixed step-size
|
||||
% p - the order for precision
|
||||
% err - error tolerance
|
||||
% y, t - the solution vector and time vector
|
||||
|
||||
% Copyright (c) Dingyu Xue, Northeastern University, China
|
||||
% Last modified 30 March, 2017
|
||||
% Last modified 18 May, 2022
|
||||
arguments
|
||||
fun, alpha(1,:), y0(1,:), tn(1,1), h(1,1){mustBePositive}
|
||||
p(1,1) {mustBePositiveInteger}, err(1,1) double=1e-10
|
||||
end
|
||||
m=ceil(tn/h)+1; t=(0:(m-1))'*h; ha=h.^alpha; z=0;
|
||||
[T,dT,w,d2]=aux_func(t,y0,alpha,p); y=z+T(1);
|
||||
for k=1:m-1
|
||||
zp=z(end); yp=zp+T(k+1); y=[y; yp]; z=[z; zp];
|
||||
[zc,yc]=repeat_funs(fun,t,y,d2,w,k,z,ha,dT,T);
|
||||
while abs(zc-zp)>err
|
||||
yp=yc; zp=zc; y(end)=yp; z(end)=zp;
|
||||
[zc,yc]=repeat_funs(fun,t,y,d2,w,k,z,ha,dT,T);
|
||||
end, end
|
||||
% repeatedly called subfunction
|
||||
function [zc,yc]=repeat_funs(fun,t,y,d2,w,k,z,ha,dT,T)
|
||||
dy=zeros(1,d2-1);
|
||||
for j=1:(d2-1)
|
||||
dy(j)=w(1:k+1,j+1)'*z((k+1):-1:1)/ha(j+1)+dT(k,j+1);
|
||||
end, f=fun(t(k+1),y(k+1),dy);
|
||||
zc=((f-dT(k+1,1))*ha(1)-w(2:k+1,1)'*z(k:-1:1))/w(1,1);
|
||||
yc=zc+T(k+1);
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user