Simulink:如何在Matlab函数中使用全局数组

o7jaxewo  于 2022-11-24  发布在  Matlab
关注(0)|答案(1)|浏览(377)

我正在尝试为温度传感器数据创建一个移动平均窗口。
我也跟着道:How to declare global variables for simulink containing matlab functions?https://www.mathworks.com/help/simulink/ug/using-global-data-with-the-matlab-function-block.html的函数
它解释了如何对单个变量执行此操作,即(A=5,我可以使用A)
如何使用可以编辑其值的全局数组/向量来执行此操作?
简单地做

function y = fcn(u)
global A
A = [];

A(end+1)=u;

y = sum(A)/length(A)+10;

不起作用。

vzgqcmou

vzgqcmou1#

每次调用函数时,都要重新初始化全局变量A。请执行以下操作:

function y = fcn(u)
global A

A(end+1)=u;
y = sum(A)/length(A)+10;

(Of当然,如果您将其用作Simulink操作的一部分,则需要添加逻辑以防止数组增长过快。我假设您针对问题生成了一个最小示例。)
在许多情况下,一种改进是使用persistent而不是global。持久变量在多次调用函数之间保留,但对任何其他函数都不可用。这可以防止对变量的意外更改。(特别是当操作代码使用名为“A”的变量时。)

function y = fcn(u)
persistent A

A(end+1)=u;
y = sum(A)/length(A)+10;

使用globalpersistent变量的一个更通用的方法是进行isempty检查,看看它是否需要初始化。如下所示:

function y = fcn(u)
persistent A

if isempty(A)
    A = 0;  %Or whatever the appropriate initial value is. An empty array is the default.
end

A(end+1)=u;
y = sum(A)/length(A)+10;

相关问题