分数阶微分⽅程求解--预估校正法
带有时延的分数阶微分⽅程求解---预估校正法
阴天的英文由于分数阶⼯具箱不会⽤,⾃⼰写了个分数阶微分⽅程求解的代码。数值求解常⽤的预估-校正法,对于带有时延的分数阶微分⽅程,《A Predictor-Corrector Scheme For Solving Nonlinear Delay Differential Equations Of Fractional Order》这篇⽂章给出了带时延的预估校正算法,下⾯的求解函数也是根据这篇⽂章写的,但仅能求解常数时延的⽅程, 话不多说,先放matlab代码:接待语
function[t,y]=fo_solution(h,tfinal,ini_val,alpha,delay)
%%%%%%%%%%%
%%%%%%%%%%%
% fo_solution.m:分数阶微分⽅程求解函数,这个⼀般不需要改,
贱人就是矫情 英文
%参数:
perfumes
%h(步长),
%tfinal(终⽌时间),
%ini_val(系统初始值),
%%alpha(阶数),
%delay(时延),
%要求解带有时延的系统,时延只能是离散时延。
%若求解不带有时延的系统,时延默认为0。
%返回值:
% t是时间向量,
% y是系统的值,第i⾏是变量i的数值解。
%
%⾃⼰创建equation_func.m:写系统的微分⽅程。
哪家外教一对一好%参数:
%t(当前时刻),
%x(当前时刻系统的值), x为列向量
%xd(时延项的系统值), xd为列向量
%返回值:为列向量。
if nargin<5
delay=0;
end
len =length(ini_val);
N= tfinal/h;
t =linspace(0,N,N+1)*h;
k = delay/h;
y0 = ini_val;
y =zeros(len,N);
f0 =equation_func(0,y0,y0);
x1=zeros(1,N);
x2=zeros(1,N);
x3=zeros(1,N);基本瑜伽动作
for n =0:N-1
口语强化
disp(['运⾏次数: ',num2str(n),' t = ',num2str(n*h)]);
b=@(j) h^alpha/alpha*((n+1-j)^alpha-(n-j)^alpha );
s=zeros(len,1);
for j =0:n
if j-k<=0
x_j_k=y0;
爱词霸在线翻译el
x_j_k=y(:,j-k);
end
if j==0
x_j=y0;
el
x_j=y(:,j);
end
s = s+b(j)*equation_func(j*h,x_j,x_j_k);
6级算分器end
yp = y0+s/gamma(alpha);
yp = y0+s/gamma(alpha);
a=@(j)(n-j+2)^(alpha+1)+(n-j)^(alpha+1)-2*(n-j+1)^(alpha+1);
S0=(n^(alpha+1)-(n-alpha)*(n+1)^alpha)*f0;
S1=zeros(len,1);
for j =1:n
if j-k<=0
x_j_k=y0;
el
x_j_k=y(:,j-k);
end
x_j=y(:,j);
S1=S1+a(j)*equation_func(j*h,x_j,x_j_k);
end
S=S0+S1;
if n+1-k<=0
x_n_k=y0;
el
x_n_k=y(:,n+1-k);
end
addition
y(:,n+1)= y0+h^alpha/gamma(alpha+2)*equation_func(n*h,yp,x_n_k)+S*h^alpha/gamma(alpha+2); end
y =[y0,y];
end
有错误之处,请留⾔。带有时变时延的分数阶微分⽅程有没有⼤佬会的,跪求!!! !!!