Conditionally Defining a Variable using ODE45
1 回表示 (過去 30 日間)
古いコメントを表示
How could I take this code I'm using and conditionally define my variable 'p'? For example, I want p=0 everywhere except when 3<t<4, then I want p=1.2. Here is my code:
tspan=[1 7];A0=1;P0=1;g=1;p=0;B=0.15;
[t,x] = ode45(@(t,x) [-g*x(1) + p*x(1); -x(1)*x(2)+ B*x(2)], tspan, [A0 P0]);
0 件のコメント
採用された回答
Walter Roberson
2019 年 2 月 16 日
you need to use three ode45 calls , once for the three cases (before 3, during the range, after 4)
4 件のコメント
Walter Roberson
2019 年 2 月 19 日
3 < t & t < 4 gives a logical result, false or true, but in most contexts those are treated as 0 and 1. So outside of 3 to 4, the test has a definite numeric value, of 0, and 0 * 1.2 is 0, so it has a well defined value of 0 outside of (3, 4) .
However, in general when you use this kind of construct, Something Times a Logical, you need to be careful in case the Something could be infinite, since infinity times 0 is nan rather than 0. Consider for example x(1) * (3 < t & t < 4) then if x(1) went to infinity there would be calculation problems outside of (3,4) . In your particular case of Something being the constant 1.2, that is not a problem, so just something to keep in mind when you start to use this construct for other purposes.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Ordinary Differential Equations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!