我正在努力做到这里所解释的: How solve a system of ordinary differntial equation with time-dependent parameters(第2部分)。
这是我的代码。我不知道我哪里出错了。
function shi = shitry(t,y,b,bt)
b = interp1(bt, b, t)
a = 0.25; %loss of immunity rate
% b = 0.0002; %infectivity rate
q = 10; %population renewal
m = 0.012; %death rate
r = 0.14; %recovery rate
shi(1) = q - m*y(1)-b*y(1)*y(2)+a*y(3);
shi(2) = (b*y(1))- (m + r)*y(2);
shi(3) = (r*y(2))-((m+a)*y(3));
shi = shi(:);
end
这是上面定义的功能。
bt = [5 9 12 17 19 24 28 27 22 17 10 7];
b = 0.00002*bt;
tspan = linspace(0, 12, 50);
yo = [200000 150 0];
[tv,Yv] = ode45(@(t,y) shitry(t, y, bt, b), tspan, yo);
plot(tv,Yv(:,1),'+',tv,Yv(:,2),'x',tv,Yv(:,3),'o');
当我运行代码时,出现以下错误:
使用griddedInterpolant时出错网格向量不严格 单调增加。
interp1错误(第191行) F = griddedInterpolant(X,V,方法);
shitry错误(第2行)b = interp1(bt,b,t)
@(t,y)shitry(t,y,bt,b)
出错odearguments中的错误(第88行)f0 = feval(ode,t0,y0,args {:}); % ODE15I将args {1}设置为yp0。
ode45错误(第114行)[neq,tspan,ntspan,next,t0,tfinal,tdir, y0,f0,odeArgs,odeFcn,...
shigella的错误(第23行)[tv,Yv] = ode45(@(t,y)shitry(t,y,bt, b),tspan,yo);