1

次のようにベクトルのピークを決定するとします。x(1)> x( 2)次に、最初のポイントのピーク(1)= x(1)について明確に示します。それ以外の場合は、x(3)をx(2)と比較します(x(3)の場合)。

[ indexes,peaks]=function(x,m);
c=[];
b=[];
if  x(1)>x(2) 
    peaks(1)=x(1);
else

 for i=2:m-1
     if x(i+1)< x(i) & x(i)>x(i-1)
         peak(i)=x(i);
     end;
 end
end
end

ピークは、次の図も使用して決定されます。 ここに画像の説明を入力してください

2番目の画像で申し訳ありませんが、三角形ではなく、AとCが直線上にあるだけですが、ここではピークがBであるため、ベクトル内のピーク値を見つけるためのアルゴリズムを記述するためのコードを続行できません。続ける

与えられたupdated.numercialの例

x = [2 1 3 5 4 7 6 8 9]ここでは、最初のポイントが2番目よりも大きいため、peak(1)= 2を意味します。次に、1と3を比較します。これは、3が1よりも大きいためです。 5と3を比較したい場合も、5と4を比較します。5は4より大きいため、peak(2)= 5を意味します。したがって、次のピークを続けると7になり、最終的なピークは次のようになります。 9最初の要素が2番目未満の場合、2番目の要素を3番目の要素と比較し、2番目が3番目以上で、同時に最初の要素である場合、ピークは2番目、というように続きます。

4

3 に答える 3

2

次のようなことを試すことができます:

function [peaks,peak_indices] = find_peaks(row_vector)
    A = [min(row_vector)-1 row_vector min(row_vector)-1];
    j = 1;
    for i=1:length(A)-2
        temp=A(i:i+2);
        if(max(temp)==temp(2))
            peaks(j) = row_vector(i);
            peak_indices(j) = i;
            j = j+1;
        end
    end
end

find_peaks.m として保存します。

これで、次のように使用できます。

>> A = [2 1 3 5 4 7 6 8 9];
>> [peaks, peak_indices] = find_peaks(A)

peaks =

     2     5     7     9


peak_indices =

     1     4     6     9

ただし、これにより「プラトー」も得られます(隣接する等しい「ピーク」)。

于 2013-03-19T10:32:04.030 に答える
1

を使用diffして比較を行い、境界ケースをカバーするために最初と最後に 2 つのポイントを追加できます。

B=[1 diff(A) -1]; 
peak_indices = find(B(1:end-1)>=0 & B(2:end)<=0); 
peaks = A(peak_indices);

戻る

peak_indices =
     1     4     6     9
peaks =
     2     5     7     9

あなたの例のために。

于 2013-08-03T12:21:33.810 に答える