如何在用户定义的 MATLAB 函数中初始化变量(simulink)
Posted
技术标签:
【中文标题】如何在用户定义的 MATLAB 函数中初始化变量(simulink)【英文标题】:How to initialize a variable in a user defined MATLAB function(simulink) 【发布时间】:2016-09-06 08:46:12 【问题描述】:我正在尝试使用户定义的函数是 simulink,它看起来像这样
function [minTR,maxTR,out] = Temperature(u)
[minTR] = min(u);
[maxTR] = max(u);
if((maxTR - minTR > 1.5))
out = 1;
else
out = 0;
end
end
u
是每个采样时间的 1200x1 数组,现在我想要的问题是,如果这个条件 if((maxTR - minTR > 1.5))
成立,我希望 out
保持 1,直到最大值和最小值之间的差小于假设 0.7 ,我的计划是设置一个 flag
,我将其设置为 1 ,所以我的 else 代码看起来像
else if((maxTR - minTR < 1.5) && flag == 0)
out = 0;
end
但问题是初始化,我必须初始化这个标志一次,但是 simulink 为每个采样时间运行整个函数,并且标志会一次又一次地重新初始化,有谁知道我能做些什么来实现这一点?
【问题讨论】:
您所做的是串联比较和滞后。使用现成的积木。 【参考方案1】:正如 cmets 中提到的 percusse,您应该查看 Simulink 库中已经存在的模块(比较 + 滞后)。
一般来说,Matlab/Simulink 中的变量初始化可以用persistent 变量来解决。
persistent flag
% If first run. Initialize flag.
if isempty(flag)
flag = false;
end
另一种方法是使用delay block 接收前一个采样周期的输出信号,该delay block 可以用一个值进行初始化。
【讨论】:
以上是关于如何在用户定义的 MATLAB 函数中初始化变量(simulink)的主要内容,如果未能解决你的问题,请参考以下文章