Matlab编码器-需要一个标量。IF或WHILE中不支持非标量

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)您可能希望测试

我有下面的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
是否是具有
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)这是一个混合维的问题,所以有点像不同维的向量,这是一个混合维的问题,所以有点像不同维的向量。所有函数都被建议,但它只返回零或一。所有函数都被建议,但它只返回零或一