Ode 45能解决分段函数的迭代?

11视图(30天)
可乐
可乐 2021年9月13日
编辑: 可乐2021年9月14日
数值迭代过程中,随时间变化的变量值。之间的关系变量值对应于不同的微分方程组。是否有可能继续选择相应的微分方程组的迭代计算根据变量值的关系。
例如:
初始值是(x0, y0)。在第一次,x0 > y0,所以数值选择系统(1)微分方程的迭代计算。那么变量x和y值随时间变化。当x < = y,系统(2)的微分方程选择继续迭代计算。等等。
代码:
t0 = 0;
tf = 10;
x10 = 8;
x20的= 5;
x0 = (x10, x20);
(t, x1) =数值(@fun t0: tf, x0);
x2 = (t, x1);
情节(x1 (: 1), x1 (:, 2));
函数f =乐趣(t, x)
f = 0 (2, 1);
f (1) = - (x (1) - x (2)) / x (1);%系统(1),x (1) > (2)
f (2) = (x (1) - x (2)) / x (1) + 1;%系统(1),x (1) > (2)
% f (1) = (x - x (1) (2)) / x (2);%系统(2),(1)< = x (2)
1 - (x % f (2) = (2) - x (1)) / x (2);%系统(2),(1)< = x (2)
结束
初始值是x0 = [x10, x20的]=[8 5],其中x10 > x20的,所以数值选择系统(1)微分方程的迭代计算。当t = 3 s, x (1) = 7.6491, (2) = 8.3509 x, x (1) < = x (2)。然后我希望系统的微分方程(2)选择继续迭代计算通过使用[7.6491,8.3509]作为新的初始值。
谢谢你!
3评论
可乐
可乐 2021年9月14日
编辑:可乐 2021年9月14日
我不知道这些代码是正确的。
Code1:
函数f =乐趣(t, x)
f = 0 (2, 1);
f (1) = (- (x (1) - x (2)) / x (1)) * (x - x (1) (2) > 0) + ((x - x (1) (2)) / x (2)) * (x - x (1) (2) < = 0);
f (2) = ((x (1) - x (2)) / x (1) + 1) * (x - x (1) (2) > 0) + (1 - (x - x (1) (2)) / x (2)) * (x - x (1) (2) < = 0);
结束
Code2:
函数f =乐趣(t, x)
f = 0 (2, 1);
如果x (1) > (2)
f (1) = - (x (1) - x (2)) / x (1);%系统(1),x (1) > (2)
f (2) = (x (1) - x (2)) / x (1) + 1;%系统(1),x (1) > (2)
其他的
f (1) = (x (2) - x (1)) / x (2);%系统(2),(1)< = x (2)
f (2) = 1 - (x - x (1) (2)) / x (2);%系统(2),(1)< = x (2)
结束
结束

登录置评。

答案(1)

Bjorn Gustavsson
Bjorn Gustavsson 2021年9月13日
最好的方法是使用 事件 处理程序能够打断并重新启动x和y ode-integration每当经过。请参阅帮助和文档 odeset 看看代码 ballode 例如如何处理事件。
在你的情况下,你可以进行直接的与集成提供所有f, f₂, g_1里面,g_2和他们所有的衍生品在某种程度上匹配,但是我甚至都不确定。
HTH

类别

找到更多的在常微分方程帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!