我想解决一个带有时间依赖参数的颂歌。
如果cA
为t
,则>=10
应为10000;如果值为<=11
,则cA
应为cB
。function dcB = myode(t,y)
cB=y(1,:);
if t>=10 && t<=11
cA=10000
else
cA=0
end
dcB=(cA-cB)*100/1750;
[t,y]=ode45(@myode,[tdown tup],0);
然后在微分方程中用于计算cA
{1}}。
见代码:
tup
出现了陷阱问题:
cB
它在指定时间没有正确的值。tup
是例如20 cB
有值,如果{{1}}是例如100 {{1}}为零。答案 0 :(得分:0)
正如霍克勒所说,我根据这个答案解决了问题:link
function dcB = myode(t,y,cA)
cB=y(1,:);
dcB=(cA-cB)*100/1750;
并用
解决yO=0;
% t=0 till t=10
cA=0;
tspan=[0 10];
[T,Y]=ode45(@(t,y)myode(t,y,cA),tspan,yO,cA);
% t=10 till t=11
cA=10000;
tspan=[0 1];
[t,y]=ode45(@(t,y)myode(t,y,cA),tspan+T(end),Y(end,:));
T = [T;t(2:end)];
Y = [Y;y(2:end,:)];
% t=11 till t=100
cA=0;
tspan=[0 89];
[t,y]=ode45(@(t,y)myode(t,y,cA),tspan+T(end),Y(end,:));
T = [T;t(2:end)];
Y = [Y;y(2:end,:)];
plot(T,Y);