0

プログラムにいくつかの既存のコードを適用しましたが、原因がわからないエラーに遭遇しました。私の目標は、データをより小さなサブサンプルに分割し、各サブサンプルで計算を行うことです。サブサンプル サイズがどのように変化するかを判断するために、プログラムは 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(ところで、MATLAB の変数の適切な名前ではありません。これは複素数 i でもあります) の長さは予測できずn、次のステートメントで次元エラーが発生するのとはおそらく異なります。

find(max(dv)==dv,1)代わりに、最初の一致のみを取得することを試みることができます。またはループを追加します。

于 2013-02-28T04:41:28.077 に答える