1

我的 matlab 函数中有一些这样的代码:

for i = init:end
    a= [a, char(zeros(size(a))]
    a= func(a)
    a = a(a~=0)
end

因此,在循环的每一步中,首先将 a 的大小加倍,对其应用一些随机函数,然后删除所有为零的内容。

现在,我想对此运行 coder 以最终将其转换为 c 代码。当然,它给了我分配错误。

允许动态分配的数组没有帮助。我也不能简单地为我的变量使用不同的名称,因为它位于 for 循环中。

4

1 回答 1

1

这可能会晚一年,但类似:

function a = foobar(init,ub)
coder.varsize('a',[1,Inf]);
a = 1;
for i = init:ub
    a = [a, ones(size(a))];
    a = sin(a);
    a = a(a~=0);
end

>> codegen foobar -args {1,1} -report

在 R2014a 中为我工作。

当您尝试增大数组时,可能需要使用coder.varsize来告诉 MATLAB Coder 该数组将改变大小。在许多情况下,MATLAB Coder 可以在不使用的情况下解决此问题,coder.varsize因此最好先尝试不使用它,然后在遇到错误时添加它。

于 2014-05-28T16:53:28.137 回答