我想使用 ode45 求解一个微分方程组,用于 MATLAB 中的(许多)参数,以研究具有方程系数的解的行为。我想找到解绝对值不大于某些参数的参数给定号码。该脚本有一个for循环,并为给定参数一个接一个地求解系统(在某个有限的时间跨度内(自变量是时间))。
现在,我的问题是“如何在 ode45 上设置条件以自动“检测”某些参数的解决方案是否大于该(给定)值”,因此我可以自动找到解决方案大于的那些参数给定的值,通过运行一次 for 循环?
我想使用 ode45 求解一个微分方程组,用于 MATLAB 中的(许多)参数,以研究具有方程系数的解的行为。我想找到解绝对值不大于某些参数的参数给定号码。该脚本有一个for循环,并为给定参数一个接一个地求解系统(在某个有限的时间跨度内(自变量是时间))。
现在,我的问题是“如何在 ode45 上设置条件以自动“检测”某些参数的解决方案是否大于该(给定)值”,因此我可以自动找到解决方案大于的那些参数给定的值,通过运行一次 for 循环?
如文档中所述,可以'Event'使用odeset. 以下(在名为 的 m 文件中ode45EventTest.m)提供了您的用例的准系统示例,其中包含琐碎的 ODE:
function ode45EventTest
for tMax = [2, 20]
[~,~,~,~,IE] = ode45(@(t,y) 1, [0 tMax],0,odeset('Event',@myEvent));
if(isempty(IE))
fprintf('Threshold not exceeded for tMax = %g\n',tMax);
else
fprintf('Threshold exceeded for tMax = %g\n',tMax);
end
end
end
function [value,isterminal,direction] = myEvent(~,y)
threshold = 10;
r = double(abs(y) > threshold);
value = r;
isterminal = r;
direction = 0;
end
我会在目标函数中放置一个开关,并允许它将感兴趣的参数写入文件,然后错误地切换输出,以便 ode45 截断运行,可能使用 NaN 或其他。
你需要一些伪代码吗?如果是这样,您能否提供具有您的一些信息结构和您认为有用的派生函数的伪代码?