当一些以数值变化函数索引

4视图(30天)
我有一个问题,我的一个代码,我想改变指数函数当y y的值达到一个给定的值
我将给一个简单的例子:
= 1;
B = 2;
tspan = [0 5];
y0 = 0.01 [0];
[t、y] =数值(@ (t, y) odefcn (t, y, A、B), tspan, y0);
函数dydt =乐趣(t y, B)
如果y (1) > 0.6
% = 3(例子)永远改变
结束
dydt = 0 (2, 1);
dydt (1) = y (2);
dydt (2) = (A / B) * t。* y (1);
结束
%如果你这样做
函数dydt =乐趣(t y, B)
如果y (1) > 0.6
一个= 3
结束
dydt = 0 (2, 1);
dydt (1) = y (2);
dydt (2) = (A / B) * t。* y (1);
结束
% @命令窗口
一个=
1
一个=
3
一个=
1
一个=
3
我想要所有的3 s百分比。
1评论
埃米尔哈姆萨
埃米尔哈姆萨 2020年4月24日
看来你没有粘贴odefcn你试图解决,但是印刷在命令窗口中歌唱的是正确的行为。它不会增加变量单调。它需要采取前后步骤根据其内部的算法。从你写的代码,我要说的是你现在的逻辑是正确的。

登录置评。

接受的答案

darova
darova 2020年4月24日
试一试 持续的 变量
函数主要
clc%明确命令窗口
清晰的功能%明显持久变量
= 1;
B = 2;
tspan = [0 5];
y0 = 0.01 [0];
[t、y] =数值(@ (t, y)有趣的(t, y, A、B), tspan, y0);
函数dydt =乐趣(t y, B)
持续的国旗%声明“国旗”作为persisten变量
如果isempty(标志)%如果“国旗”是空的定义“假”
国旗= false;
结束
如果y (1) > 0.6
国旗= true;%如果y(1) > 0.6定义标记“真正的”
结束
如果标志= = true
= 3;
结束
sprintf (y (1) = % f;= % d 'y (1))
dydt = 0 (2, 1);
dydt (1) = y (2);
dydt (2) = (A / B) * t。* y (1);
看到更多 持续的
3评论
darova
darova 2020年4月24日
  • 我想改变指数函数当y y的值达到一个给定的值
他想要的 一个= 3 后第一次 y (1) > 0.3
所以 一个= 3 即使y条件后(1)< 0.3 y (1) > 0.3 首次实现了

登录置评。

答案(1)

史蒂文的主
史蒂文的主 2020年4月24日
而不是改变你的颂歌函数这样的“动态”,你可能想要使用一个restart-based方法。
  1. 解决常微分方程系统的开关,直到你的条件满足。如果交换机是基于时间的,使用一个适当的tspan输入数值。如果是使用一个基于解决方案的值事件函数
  2. 使用电话的最终结果数值生成一个新的初始条件向量。
  3. 你需要你的颂歌函数做任何修改。
  4. 调用数值的新功能,一个新的时间跨度(启动前调用结束),和新的初始条件向量。
看到 ballode 例子,这个函数使用一个事件来检测当弹力球到达地面。
1评论
Lazaros Christoforidis
Lazaros Christoforidis 2020年4月24日
谢谢你的回答!,我将考虑它在未来的问题。

登录置评。

类别

找到更多的在编程帮助中心文件交换

标签

社区寻宝

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

开始狩猎!