зависящий от времени параметр в ode-function matlab

Вопрос:

Я хочу решить оду с параметром, зависящим от времени. cA должно быть 10000, если t >=10 и <=11 иначе оно должно иметь значение 0. 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 у него не будут правильные значения в указанное время.
  • если tup, например, 20 cB имеет значения, если tup, например, 100 cB равно нулю.
Лучший ответ:

Как предложил horchler, я решил проблему в соответствии с этим ответом: 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);

Оцените статью
TechArks.Ru
Добавить комментарий