【发布时间】:2020-04-30 09:50:45
【问题描述】:
我找不到如何强制 Matlab 编码器使参数大小可变而不是固定。
这是一个 MCVE:
功能代码:
function [sz] = my_varsize(x)
sz = length(x);
end
Matlab coder 中使用的示例主程序:
samp = 100;
x = zeros(1,samp);
sz = my_varsize(x);
display(sz);
然后,Matlab 编码器生成 x 大小为 (1x100) 的 C/C++ 代码。
我可以从 GUI 手动将变量大小从 1x100 更改为 1x:Inf,这很好用,但我更喜欢 Matlab 编码器自动执行此操作。我尝试在函数和主程序中添加coder.varsize('x',[1,inf]); 和coder.typeof(x,[1,inf]);,但没有一个具有预期的行为。
编辑:根据 Ryan 的评论,我尝试使用不同大小的不同对象调用 my_varsize,以查看 Matlab 是否意识到这应该使用可变大小:
samp = int64(round(rand()*100));
x = zeros(1,samp);
sz = my_varsize(x);
display(sz);
samp = int64(round(rand()*100));
x = zeros(1,samp);
sz = my_varsize(x);
display(sz);
然后,生成的代码使用 61 的可变大小(两个 rand() 调用的最大结果)[1,:61],而我需要 [1,:inf],以便我生成的 C/C++ 代码可以与任何输入一起使用!
【问题讨论】:
-
我认为 MATLAB 正在尝试变得聪明并优化您的代码。我想知道编码器参数中是否有一些东西可以避免这种情况
-
coder.varsize似乎是为此而生的,但我无法让它发挥作用! -
从您的示例代码中,
x的大小只有 100。所以 MATLAB Coder 只是丢弃了coder.varsize。如果您将该数组包含在一个更复杂的示例中,该示例实际上分配了一个非常量或变化的大小,它将坚持下去。否则,您能否扩展您的示例以显示您想要实现的目标? -
@RyanLivingston:查看我的编辑,即使有很多输入,它也不使用
:inf作为上限。
标签: c++ matlab matlab-coder