欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > MATLAB|怎么存储Simulink运行过程中的变量呢?m语言persistent变量代替C语言Static变量

MATLAB|怎么存储Simulink运行过程中的变量呢?m语言persistent变量代替C语言Static变量

2025/9/22 23:03:32 来源:https://blog.csdn.net/qq_40678163/article/details/143270433  浏览:    关键词:MATLAB|怎么存储Simulink运行过程中的变量呢?m语言persistent变量代替C语言Static变量

做实验时,例如使用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!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词