0

我已经为我的程序调整了一些现有代码,但我遇到了一个我不知道原因的错误。我有具有 N 个观察值的数据,我的目标是将数据分解为越来越小的子样本,并对每个子样本进行计算。为了确定子样本大小将如何变化,程序找到 N 的除数并将其存储到数组 OptN 中。

dmin = 2;
% Find  OptN such that it has the largest number of 
% divisors among all natural numbers in the interval [0.99*N,N] 
N = length(x); 
N0 = floor(0.99*N);
dv = zeros(N-N0+1,1);
for i = N0:N,
    dv(i-N0+1) = length(divisors(i,dmin));
end
OptN = N0 + find(max(dv)==dv) - 1;
% Use the first OptN values of x for further analysis
x = x(1:OptN);
% Find the divisors >= dmin for OptN
d = divisors(OptN,dmin);  

function d = divisors(n,n0)
% Find all divisors of the natural number N greater or equal to N0
i = n0:floor(n/2);
d = find((n./i)==floor(n./i))' + n0 - 1; % Problem line

在函数除数中是问题发生的地方。我有“使用错误。/矩阵尺寸必须一致。” 但是,这适用于长度为 60 的输入数据,但是当我尝试长度为 1058 的数据时,它给了我上述错误。

4

1 回答 1

0

我认为对于大型数据集,可能find(max(dv)==dv)会返回多个数字。所以OptN将成为一个向量,而不是一个标量。

那么i(BTW 不是 MATLAB 中变量的好名称,它也是一个复数 i) 的长度将是不可预测的,并且可能与n在下一条语句中导致尺寸错误不同。

您可以尝试find(max(dv)==dv,1)只获得第一个匹配项。或者添加一个循环。

于 2013-02-28T04:41:28.077 回答