代码生成不支持 cell() 构造函数
Posted
技术标签:
【中文标题】代码生成不支持 cell() 构造函数【英文标题】:cell() constructor is not supported for code generation 【发布时间】:2014-11-28 04:57:33 【问题描述】:当我在 Simulink 中使用 matlab 功能块时。我使用另一个包含单元格类型的 matlab 函数。但是simulink因为cell报错了。如何避免这种情况?我有点不想修改函数,因为我所有的函数都有单元格,要全部修改它们需要做很多工作。 错误信息: 模拟 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
Coi=[0;0;0];
end
Co1=[sqrt(3)*l/4;0;0];
Co2(1)=-sqrt(3)*l/4;
Co2(2)=l/2;
Co2(3)=0;
Co3(1)=Co2(1);
Co3(2)=-l/2;
Co3(3)=0;
Co4=[sqrt(3)*l/4;-l/2;sqrt(3)*l/2];
Co5=Co4;
Co5(2)=-Co5(2);
Co6=Co4;
Co6(1)=-Co6(1);
Co6(2)=0;
for i=7:9
Coi=Coi-6;
Coi(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)=Coj(1);
guess(i+1)=Coj(2);
guess(i+2)=Coj(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;
Coj=[result(i);result(i+1);result(i+2)];
end
【问题讨论】:
【参考方案1】:请通读 MATLAB Code Generation Manual。在一般限制部分,它明确指出
您不能在代码中使用元胞数组。
MATLAB Central 中介绍了此问题的解决方案:您必须将元胞数组替换为例如结构。正如我从您的代码中看到的,您的变量 Co
的每个条目都是 1x3 或 3x1 数组。因此,应该可以轻松地将Co
替换为 9x3 矩阵。
当然这是相当多的工作,但这些只是 MATLAB 编码器的限制。
【讨论】:
以上是关于代码生成不支持 cell() 构造函数的主要内容,如果未能解决你的问题,请参考以下文章
SWIG TCL:将类构造函数名称从 new_* 重命名为 create_*