代码生成不支持cell()构造函数

时间:2014-11-28 04:57:33

标签: matlab cell simulink cell-array matlab-coder

当我在Simulink中使用matlab功能块时。我使用另一个包含单元格类型的matlab函数。但是simulink因为细胞而报告了错误信息。怎么避免这个?我有点不想修改这个功能,因为我的所有功能都有细胞,所以修改它们需要做很多工作。 错误信息:  模拟28清除保存 2014年11月27日11:26:28经过:7秒

代码生成不支持

cell()构造函数

功能' RealCo.m' (#56.102.111),第5行,第4栏: "细胞(9,1)" 启动诊断报告。 组件:MATLAB函数|类别:编码器错误

我的功能:

function Co=RealCo(q)
l=60;
%%%Coordinate Calculation
%Guess value adopt the unique position below
Co=cell(9,1);
for i=1
    Co{i}=[0;0;0];
end

Co{1}=[sqrt(3)*l/4;0;0];
Co{2}(1)=-sqrt(3)*l/4;
Co{2}(2)=l/2;
Co{2}(3)=0;
Co{3}(1)=Co{2}(1);
Co{3}(2)=-l/2;
Co{3}(3)=0;

Co{4}=[sqrt(3)*l/4;-l/2;sqrt(3)*l/2];
Co{5}=Co{4};
Co{5}(2)=-Co{5}(2);
Co{6}=Co{4};
Co{6}(1)=-Co{6}(1);
Co{6}(2)=0;

for i=7:9
    Co{i}=Co{i-6};
    Co{i}(3)=sqrt(3)*l;
end

guess=zeros(27,1);
for i=1:3:27
    %When i=1,j=1 i=4,j=2 i=7,j=3 ...
    j=(i-rem(i,3))/3+1;
    guess(i)=Co{j}(1);
    guess(i+1)=Co{j}(2);
    guess(i+2)=Co{j}(3);
end

%Use fsolve to solve the system based on current value of q
fC=@(R)Coor(R,q);
[result, fval, exit, output]=fsolve(fC,guess);
% result
% fval
% eqns(guess)
% output
for i=1:3:27
    %When i=1,j=1 i=4,j=2 i=7,j=3 ...
    j=(i-rem(i,3))/3+1;
    Co{j}=[result(i);result(i+1);result(i+2)];
end

1 个答案:

答案 0 :(得分:1)

请仔细阅读MATLAB Code Generation Manual。在一般限制部分中,它明确指出

  

您不能在代码中使用单元格数组。

对此的解决方案显示在MATLAB Central中:您必须通过以下方式替换单元阵列:结构。从我的代码中可以看出,变量Co的每个条目都是1x3或3x1数组。因此,应该可以很容易地用9x3矩阵替换Co

当然这是一些工作,但这些只是MATLAB编码器的限制。