【Matlab仿真】Matlab Function中如何使用静态变量?
背景
根据Simulink的运行机制,每个采样点会调用一次MATLAB Function的函数,两次调用之间,同一个变量的前次计算的终值如何传递到当前计算周期来?其实可以使用persistent变量实现函数退出和进入时内部变量值的保持。
persistent变量
1、persistent变量是定义在某个函数内的变量类型,可在函数调用的不同次数间保持上一次退出该函数的值。它同global全局变量的类似之处在于MATLAB为它们创建永久数据区域,不同之处在于它只能被声明在它的函数内部识别,目的是免除此变量被其他函数或命令行修改值而造成用户无法确保其值的困扰。
2、声明persistent变量时它刚刚被创建,还不具有初始值,其内容为空值[],调用声明persistent变量的函数时先判断persistent变量是否为空,如果是空则初始化为0,非空则直接使用,他们会记得上次被调用的值。
persistent变量使用注意事项
- persistent变量不能作为函数的输出输出函数,否则会报错。如果需要观察,可以借助中间变量观测。
- persistent变量不能同当前工作空间中已经存在的变量同名,否则会报错。
- persistent变量不能声明在Command Window里,必须在函数内声明。
仿真验证
在Matlab Function函数中声明cnt变量,如果需要观察cnt的变化,通过中间变量g_cnt观测。
persistent cnt
if isempty(cnt)
cnt = 0; % 显式初始化
end
cnt = cnt + 1;
g_cnt = cnt;
结果如下: