我正在从 Simulink R2016a 中的 Stateflow 图生成一个信号,该信号将连接到实时机器和力传感器,但现在,我只是用正弦波进行调试。Stateflow 中最终输出的信号大小为 6 x 5 数组。但是,当我使用 To Workspace Simulink 模块将其发送到基本工作区时,一旦仿真完成,我会得到一个更大的数组。具体来说,当我将它发送到二维数组时,它是一个 91056 x 5 二维数组,大部分都是零。
出于好奇,我将其更改为将 2D 数组输出为 3D 数组,它是一个 6 x 5 x 15176 数组,并且只有最后一个 2D 数组具有非零列。
这表明我在我的 Stateflow 图中进行了疏忽,并且在每一步都输出了数组。我宁愿保留最后一个二维数组,因为在模拟过程中我只需要它用于以后的计算(尽管我只对前半部分感兴趣)。
有没有一种简单的方法可以在前半部分仿真结束后使用 Simulink 块只保留最后一个数组,以便在后半部分使用它,还是我需要开发一个聪明的 Matlab 用户定义功能块?
我已经尝试创建一个我认为可以工作的函数,但我没有任何运气来减小大小。事实上,x_in
和x_out
在模拟结束时的大小是一样的。
function x_out = fcn(x_in)
K = size(x_in,3);
x_out = zeros(6,5);
for k=1:K
if all(x_in(:,1,k)==0) ||...
all(x_in(:,2,k)==0) ||...
all(x_in(:,3,k)==0) ||...
all(x_in(:,4,k)==0) ||...
all(x_in(:,5,k)==0)
x_out = x_in(:,:,k);
else
x_out = x_in(:,:,k);
end
end
附录 我只是尝试使用运行的更简单的 Matlab 功能块
x_out = x_in(x_in~=0);
它没有给出预期的结果,这是错误消息。
'x_out' 被推断为可变大小矩阵,但其大小被指定为继承或固定。验证“x_out”是根据非可调参数定义的,或选中“可变大小”复选框并在“大小”框中指定上限。
我在尝试调试代码时遇到了类似的错误,并且我已经设置了输出的大小。但是我在这里尝试这样做,但代码仍然无法编译。