做实验时,例如使用ARM或者DSP实现控制,时常会定义全局变量,来存储需要的值,以保存某一状态。
做MATLAB/Simulink仿真时,想要实现上述功能则不容易实现(可以,但不容易)。往往这样的需求只需要通过局部静态变量即可实现。
下图为C语言中Staic变量的介绍
matlab中也提供了类似的变量,但是用法有些不同。
举个例子,在simulink仿真中,需要仿真持续运行,并记录0.5s时刻的状态用于后续的仿真。利用模块则不容易实现,下面用matlab function并定义persistent变量实现。代码如下
function y = fcn(u,clock)persistent nif isempty(n)n = 0;endif (clock<0.5)n = u;end
y = n;
下图所示为搭建的仿真,实现的功能是积分系数为5(即1秒钟积分至5),在0.5s时刻以后,matlab function输出0.5s时刻的值。从下面的结果可以看出,0.5s时刻后输出的值为2.5,验证了persistent的使用
补充说明:
① C语言中,Static变量是在首次调用时初始化。不需要额外的操作,而在matlab中,需要使用isempty函数判断persistent变量是否为空,不为空之后才能将persistent变量当作static变量使用。否则将报错“持久变量n在某些执行路径中未定义”
②matlab function中使用persistent变量时,其输入不适用于连续仿真。
例如,将积分环节换成连续积分,matlab则会因为“写入初始化的持久变量”而认为使用了无效的工造,解决办法是(1) 改为离散积分;(2) 修改matlab function的采样时间
(1) 改为离散积分
(2) 通过右键,选择“模块参数”,修改采样时间
以上就是MATLAB/Simulink matlab function中使用persistent变量代替C语言Static变量存储特定值的用法啦,希望对比有所帮助,我是ManTou!