Change parameter value during ode15s solution

1 次查看(过去 30 天)
Hi,
I'm solving a set of differential equations and I'd like to change the value of a constant (Pin) at a specific time during the solution. Meaning that during the timespan, I'd like to change the value of Pin. So it time>10, Pin=70, else Pin=60.
This is how I formulated it but it's not working:
tspan=0:0.1:100;
cond= [...];
[t,y] = ode15s(@fun2,tspan, cond,[]);
function dydt= fun2(t,y)
for i=1:1:length(tspan)
if tspan(i)<10
Pin=60;
else
Pin=70;
end
end
...
end

采纳的回答

Torsten
Torsten 2018-8-23
function dydt= fun2(t,y)
...
if t<10
Pin=60;
else
Pin=70;
end
...
Better use the EVENT-facility of the ODE solvers than the if-construction.
Best wishes
Torsten.
  3 个评论
Steven Lord
Steven Lord 2018-8-23
In this case I wouldn't use the events functionality. I tend to recommend that when you don't know at write-time when the events you're looking for will occur. In this case, you know exactly when it will occur: at t = 10.
Therefore I'd solve this problem twice. The first call to ode15s would solve from t = 0 to t = 10. I'd use the final result of that call to generate the initial conditions for the second call to ode15s, running from t = 10 to t = 100. Doing so would be easier with a slightly different function signature:
function dydt= fun2(t,y,Pin)
and specifying an anonymous function as the ODE function.
@(t, y) fun2(t, y, desiredValueOfPinForThisOde15sCall)
Replace desiredValueOfPinForThisOde15sCall with 60 or 70 depending on whether you're passing this anonymous function into the first or second ode15s call.
gorilla3
gorilla3 2018-8-23
thanks for the suggestion but this gives me an "instantaneous" response. Meaning that the solutions for (Pin=60, t<10) and (Pin=70, t>10) are just joined together but there's no information on the transition / adaptation of the system to this change. (see fig instant.jpg)
If, instead, I solve it all in one go, using the if-else within the function I can see the transition yet it's a linear jump. What I meant with my initial question is: is there a way to get more data points so that the plot would be a curve rather than these coarse lines? Indeed, the ode15s solver provides me only with 44 solution points, despite the tspan being of 1001. (see fig 10sreponse.jpg)

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by