我的功能开头有问题。该功能是组合来自某些对象的多个数据列。错误发生在函数的开头。它说如下:
find_by_coor出错(第2行) 对于i = 1:长度(obj_ac)
这里只是变量和循环的声明,但是Matlab以某种方式返回了错误。我不知道所以希望有人帮助我。我附上我的代码如下。非常感谢。
function arr = find_by_coor(obj_ac,obj_gps,obj_sen_dir,lat1,long1,lat2,long2)
for i = 1:length(obj_ac)
if eq(obj_sen_dir(i).sensor,4) && strcmp(obj_sen_dir(i).direction,'outbound')
ind = obj_gps(i).save_var_gps(:,1)>lat1;
if isempty(find(ind)) == 1
continue
end
temp = obj_gps(i).save_var_gps(ind,:);
ind = temp(:,1)<lat2;
if isempty(find(ind)) == 1
continue
end
temp2 = temp(ind,:);
ind = temp2(:,2)<long1;
if isempty(find(ind)) == 1
continue
end
temp3 = temp2(ind,:);
ind = temp3(:,2)>long2;
if isempty(find(ind)) == 1
continue
end
temp4 = temp3(ind,:);
mint = min(temp4(:,5))-min(obj_gps(i).save_var_gps(:,5));
maxt = max(temp4(:,5))-min(obj_gps(i).save_var_gps(:,5));
if isempty(mint) == 1 || isempty(maxt) == 1
continue
end
if floor(mint*(1.6516e+03)) == 0 || floor(maxt*(1.6516e+03)) == 0
continue
end
temp5 = obj_ac(i).save_var(floor(mint*(1.6516e+03)):floor(maxt*(1.6516e+03)));
temp6 = abs(fft(temp5));
arr(i,:) = [i objs(i).daten var(temp5) max(temp5) min(temp5) mean(temp5) std(temp5) mode(temp5) var(temp6) max(temp6) min(temp6) mean(temp6) std(temp6) mode(temp6)];
disp(i);
end
end
end
答案 0 :(得分:1)
问题是当您运行该函数时,永远不会分配输出变量arr
。在Matlab中,如果您选择在定义中使用它,则必须始终指定一个函数输出。例如
function [a,b] = setAB()
err = 0; % Gives an error if err is true
a = 1;
if ~err
b = 1;
end
原因很明显,对于某些输入,所有值都属于if语句之一,并且您永远不会达到arr
的分配点。一个很好的解决方案是在开头为arr
分配一个默认值。例如,可能是nan
或-1
,或者在您的情况下可能是数组arr = nan(wanted size)
或arr = -1*ones(wanted size)
。如果你没有预先分配arr
,你可能会得到一个超出界限的矩阵&#34;如果错误,你应该解决第一个问题。
这并不意味着你总是需要输出。
function [] = noOutput()
disp('Hi, I am a void!');
您也可以选择返回与输出数量一样多的值。
function varargout = variableArgs()
a = 1;
b = 2;
c = 3;
if (nargout == 1)
varargout{1} = a;
elseif (nargout == 2)
varargout{1} = b;
varargout{2} = c;
else
error('Wrong number of output arguments!');
end
我不是说你应该使用哪种方法或者哪种方法都是好的。通常我会使用varargout
以防我编写绘图函数。然后我可能想要什么都不返回,以防我没有输出参数。然后我想返回句柄或任何额外的信息。此外,您可能已经了解,还有一个varargin
可能更有用。