Simulink返回无效输入

时间:2014-05-23 09:13:42

标签: matlab simulink

我有一个模型,它在matlab功能块中获取输入的根。输入应始终为正;但是,有时simulink会给出一个负数。原因是我使用隐式求解器(由于系统的其他部分是僵硬的ode15s)而且simulink具有无效估计。我的问题是:如何告诉simulink输入无效,这使得求解器采取较小的步骤(不停止)?我可以返回特殊值(例如,NaN)或抛出错误(不停止模拟)吗?

3 个答案:

答案 0 :(得分:0)

如果输入为负,您可以在MATLAB功能块中返回0

if u<=0
   y = 0;
else
   y = sqrt(u);
end

其中u是输入,y是函数的输出。

答案 1 :(得分:0)

当信号接近零时,使用Hit Crossing Block强制求解器采取较小的时间步长。假设你的模型被正确设置为强制信号不低于零(即它的工作方式类似于Abs块,它将达到零,然后继续为正值),这将起作用。

答案 2 :(得分:0)

我的解决方案是添加另一个输出isInputValid。如果输入无效,则为0;如果输入有效,则为1。然后通过新的集成块集成此输出。看起来布尔变量产生的不连续性确保积分器采取较小的步骤。

示例:

if ( u<0)
   y = -realmax;
   isInputValid = 0;
else
   y = sqrt(u);
   isInputValid = 1;
end

然后将积分器附加到isInputValid的输出。