问题描述
我正在从 Simulink R2016a 中的 Stateflow 图生成一个信号,该信号将连接到实时机器和力传感器,但现在,我只是用正弦波进行调试。 Stateflow 中最终输出的信号大小是一个 6 x 5 的数组。但是,当我使用 To Workspace Simulink 模块将它发送到基础工作区时,一旦模拟完成,我就会得到一个更大的数组。具体来说,当我将它发送到一个二维数组时,它是一个 91056 x 5 的二维数组,大部分都是零。
出于好奇,我将其更改为将 2D 数组输出为 3D 数组,并且它是一个 6 x 5 x 15176 的数组,并且只有最后一个 2D 数组具有非零列。
这表明我在 Stateflow 图中做了一个疏忽,每一步都输出数组。我宁愿保留最后一个 2D 数组,因为在模拟期间我只需要它用于以后的计算(虽然我只对前半部分感兴趣)。
有没有一种简单的方法可以在模拟的前半部分结束后使用 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,3,4,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' 是根据非可调参数定义的,或选中 'Variable Size' 复选框并在 Size 框中指定上限。
我在调试代码时遇到了类似的错误,并且我已经设置了输出的大小。但是我在这里尝试这样做,代码仍然无法编译。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)