Matlab中持久变量的初始化

Posted

技术标签:

【中文标题】Matlab中持久变量的初始化【英文标题】:Initialization of persistent variable in Matlab 【发布时间】:2014-05-27 14:35:01 【问题描述】:

我想在 matlab 函数块中使用一个持久变量,但我无法初始化它。我想从 m.file 初始化它或在函数内部进行。

如果我使用 isempty,则变量的大小为 1x1,我不希望这样。基本上我不知道如何处理持久值,因为它被视为 1x1 或未定义。如何使用 isempty 但不给它 1x1 大小?或者如何从 m.file 初始化它?

function y1 = fcn(u)

persistent y;

if isempty(y)
y=0;
end

for i=1:1:length(u)
    if u(1,i) >=10
       y(1,i) = 1;
    elseif u(1,i) <= 5
       y(1,i) = 0;
    else 
        ;
    end
end

y1=y;

end

【问题讨论】:

@Jigg,我的持久变量的大小是固定的,比如说一个 1x10 的向量。由于系统是动态的,因此它随时间而变化。我只希望它只设置为零一次,而不是每次调用函数时。在函数中使用 isempty 时,我得到 1x1,但无法通过 workspace/m.file 完成。 @Jigg,当然,由于变量一开始是空的,所以它是一种初始化它的方法。出于这个原因,它也在 matlab 帮助中说明。我会用代码更新帖子。 我告诉过你它是一个动态系统,所以初始化并不重要。无论这些初始条件是什么,它都会在一段时间后正常运行。 【参考方案1】:

您正在将y 初始化为一个标量。如果您想将其初始化为一个空的零向量,请使用y=zeros(1,n),其中n 是您希望它拥有的元素数。

【讨论】:

如果我在函数中这样做,每次调用函数时 y 都将设置为 0。但我想保留这些值,这就是为什么我有一个持久变量。 仅当y 为空时。 isempty 返回真或假。如果为真,那么它初始化为一个空向量。如果为 false,则跳过该行并使用已存储在变量中的持久值。 还有一点需要注意。只要 MATLAB 正在运行,这些值就会一直存在。为了在第一次运行时清除y,您应该在第一次调用fcn 之前包含命令clear fcn 是的,终于成功了!我以为我必须遍历元素,但只检查 y 就足够了。这就是我无法运行它的原因,因为我试图检查单个单元格。就我而言,对整个向量执行此操作是相同的。非常感谢! 这里有一些额外的帮助。使用逻辑索引y(u&gt;=10) = 1; y(u&lt;=5) = 0;,只需两步即可对 for/end 块进行矢量化和完成。

以上是关于Matlab中持久变量的初始化的主要内容,如果未能解决你的问题,请参考以下文章

如何在用户定义的 MATLAB 函数中初始化变量(simulink)

gsoap - 定义一个对所有会话持久的变量

如何使用 matlab 编码器在运行时初始化变量?

Clear的matlab

在 Matlab 中列出/查看/清除持久变量

MATLAB - 持久变量