У меня есть следующий код 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
это работает нормально, однако, когда я пытаюсь преобразовать его в код c в кодере Matlab, я получаю следующую ошибку: Expected a scalar. Non-scalars are not supported in IF or WHILE statements, or with logical operators. Instead, use ALL to convert matrix logicals to their scalar equivalents.
Я не совсем знаком с типами данных Matlab, может быть, поэтому я что-то упускаю.
size(v)
?size(max(v))
? Очевидно, что второе выражение не является скейлером. На мой взгляд, возможно, чтоv
является массивом ячеек или имеет ведущие одноэлементные измерения. У вас также есть синтаксическая ошибка в этой строке. Matlab используетelif
, а не elseif. Так что это тоже может быть зацикливание на млинте. ТОГДА у вас есть потенциальная логическая ошибка.vplus
будет либо скалером, либо массивом в зависимости от содержимогоv
. Вы, вероятно, имели в видуvplus=max(v)
- person KitsuneYMG   schedule 09.09.2013elseif
(см. документ на mathworks. co.uk/help/matlab/ref/if.html), поэтому в этой строке нет синтаксической ошибки. Однако было бы неплохо проверитьsize(v)
иsize(max(v))
, как было предложено. - person am304   schedule 09.09.2013elseif max(v) <= 1
? работает - таким образом вы можете убедиться, что vmax из max(v) является проблемой. - person sebastian   schedule 09.09.2013