我的matlab函数中有一些这样的代码:
for i = init:end
a= [a, char(zeros(size(a))]
a= func(a)
a = a(a~=0)
end
因此,在循环的每个步骤中,首先将a的大小加倍,对其应用一些随机函数,然后删除零的所有内容。
现在,我想在此运行编码器,最终将其转换为c代码。当然,它给了我分配错误。
允许动态分配的数组没有帮助。我不能简单地为我的变量使用不同的名称,因为它在for循环中。
答案 0 :(得分: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
的情况下解决这个问题,因此最好先不使用它然后在遇到错误时添加它。