Matlab编码器-需要一个标量。IF或WHILE中不支持非标量
我有下面的matlab代码 v是一维数组Matlab编码器-需要一个标量。IF或WHILE中不支持非标量,matlab,matlab-coder,Matlab,Matlab Coder,我有下面的matlab代码 v是一维数组 v = getV(x,y,z); if isempty(v) fail_code = 1; elseif max(v) <= vmax % <============== error is here fail_code = 0; vplus = max(v); else vplus = vmax; end v=getV(x,y,z); 如果是空的(v) 故障代码=1; elseif max(v)您可能希望测试
v = getV(x,y,z);
if isempty(v)
fail_code = 1;
elseif max(v) <= vmax % <============== error is here
fail_code = 0;
vplus = max(v);
else
vplus = vmax;
end
v=getV(x,y,z);
如果是空的(v)
故障代码=1;
elseif max(v)您可能希望测试v
是否是具有isvector
的向量
if isvector(v)
%true case
vplus = max(v); % returns a scalar
vplus(vplus>= vmax) = vmax;
else
%false case (matrix)
error('something wrong - v dimension');
end
您可能想测试v
是否是带有isvector
的向量
if isvector(v)
%true case
vplus = max(v); % returns a scalar
vplus(vplus>= vmax) = vmax;
else
%false case (matrix)
error('something wrong - v dimension');
end
为什么不遵循错误消息中的建议并尝试:
elseif all(max(v)为什么不遵循错误消息中的建议并尝试:
elseif all(max(v)维度混淆了,编译器告诉我使用all
函数
我做了下面的事情,这就是修复
v = v(:);
在将其传递给max之前,所有已解决的维度都被弄混了,但是编译器告诉我使用all
函数
我做了下面的事情,这就是修复
v = v(:);
在将其传递给max之前,所有问题都已解决我会:
elseif all(max(v) <= vmax)
elseif all(max(v)我会说:
elseif all(max(v) <= vmax)
elseif all(max(v)我遇到了这个问题,因为我有一个可变大小的变量
if a==b
c = 1;
else
c = [1,1]
end
为了解决这个问题,我必须将c
预先定义为[0,0]
似乎在Matlab Coder
中不支持灵活大小。我遇到了这个问题,因为我有一个变量,其灵活大小为
if a==b
c = 1;
else
c = [1,1]
end
为了解决这个问题,我必须将c
预先定义为[0,0]
似乎在Matlab编码器中
不支持灵活的大小。大小(v)
给你什么?大小(最大(v))
?显然,第二个表达式不是一个定标器。在我看来,v
可能是一个单元格数组或具有前导的单态维数。这一行也有语法错误。Matlab使用的是elif
而不是elseif。因此,这也可能是在循环中抛出mlint。然后你就有了一个潜在的逻辑错误。vplu根据v
的内容,s
将是一个定标器或数组。您可能是指vplus=max(v)
@KitsuneYMG:不,MATLAB确实使用elseif
(请参阅中的文档),因此该行没有语法错误。不过,最好检查大小(v)
和大小(max(v))
正如建议的那样。是的,我做了一些更改,因为这是一个与工作相关的项目,条件程序中的内容发生了更改。是的,它应该是max(v)。但是,这个编码器没有转换它,因为它不知道max返回的维度,我想!vmax是一个单一的值,max dimension是“1 x:?”v的大小是1X1到1X3,在getV内部初始化为v=[]size(v)=1x2,size(max(v))也是1x2。您可以测试elseif max(v)size(v)
给了您什么?size(max(v))
?显然,第二个表达式不是一个定标器。在我看来,v
可能是一个单元格数组或具有前导的单态维数。这一行也有语法错误。Matlab使用的是elif
而不是elseif。因此,这也可能是在循环中抛出mlint。然后你就有了一个潜在的逻辑错误。vplu根据v
的内容,s
将是一个定标器或数组。您可能是指vplus=max(v)
@KitsuneYMG:不,MATLAB确实使用elseif
(请参阅中的文档),因此该行没有语法错误。不过,最好检查大小(v)
和大小(max(v))
正如建议的那样。是的,我做了一些更改,因为这是一个与工作相关的项目,条件程序中的内容发生了更改。是的,它应该是max(v)。但是,这个编码器没有转换它,因为它不知道max返回的维度,我想!vmax是一个单一的值,max dimension是“1 x:?”v的大小是1X1到1X3,在getV内部初始化为v=[]大小(v)=1x2,大小(max(v))也是1x2。您可以测试elseif max(v)这是一个混合维的问题,所以有点像不同维的向量,这是一个混合维的问题,所以有点像不同维的向量。所有函数都被建议,但它只返回零或一。所有函数都被建议,但它只返回零或一