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>=10) = 1; y(u<=5) = 0;
,只需两步即可对 for/end 块进行矢量化和完成。以上是关于Matlab中持久变量的初始化的主要内容,如果未能解决你的问题,请参考以下文章