FractionOrderSystem/FOTF Toolbox/caputo9.m

30 lines
925 B
Matlab

function dy=caputo9(y,t,gam,p)
% caputo9 - O(h^p) Caputo derivative computation function
%
% dy=caputo9(y,t,gam,p)
%
% y - the samples or function handle of the original function
% t - the time vector
% gam - the fractional order
% p - the order for precision
% dy - the Caputo derivative
% Copyright (c) Dingyu Xue, Northeastern University, China
% Last modified 28 March, 2017
% Last Modified 18 May, 2022
arguments, y(:,1), t(:,1) double, gam(1,1) double
p(1,1) {mustBePositiveInteger}=5
end
if strcmp(class(y),'function_handle'), y=y(t); end
if gam<0, dy=glfdiff9(y,t,gam,p); return; end
h=t(2)-t(1); q=ceil(gam);
r=max(p,q); R=fliplr(vander((sym(0):(r-1))'*h));
c=double(R\y(1:r)); u=0; du=0;
for i=1:r, u=u+c(i)*t.^(i-1); end
if q<r
for i=(q+1):p
du=du+c(i)*t.^(i-1-gam)*gamma(i)/gamma(i-gam);
end, end
v=y-u; dv=glfdiff9(v,t,gam,p); dy=dv+du;
end