如何在用户定义的 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)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Real();复杂的();在 Matlab 中定义复数的函数?

matlab global定义全局变量的问题

如何在matlab定义函数中定义参数的数据类型

在MATLAB中有没有结构体啊?如何定义?

matlab中如何定义变量矩阵?

Matlab如何在定义函数过程中使用外部的变量?