2013-03-21 35 views
1

有人可以幫助我。 我使用Matlab程序。在向量中查找當地最大值

想,我有向量A,

A = [0 0 1 2 3 5 0 0 0 0 0 2 3 6 7 0 0 0 0 1 1 2 3 4 1] 

我想從矢量A.因此,獲得極大值和位置,我想獲得是繼答案。

包括maxValue = 5,7和4;

maxLocation = 6,15和24;

感謝你們的盛情。

+1

呵呵?你如何得到5 7 4? – DarthVader 2013-03-21 13:08:50

+0

我還不知道如何從數組A得到5 7 4。 但maxValue和maxLocation是我會得到它的答案。 – 2013-03-21 13:10:51

+0

最大值是7?對?如果你是一個孩子,你有10個球,你會如何找到最大的? – DarthVader 2013-03-21 13:12:22

回答

7

如果有信號處理工具箱然後findpeaks應該是你想要什麼:

[pks,locs] = findpeaks(A) 

因爲你應該知道,你要查找的是局部最大值將來參考。說你想找到最大值,看起來好像你想要全局最大值(在這種情況下將是7)。

+0

您的回答對我很有幫助。謝謝 – 2013-03-21 13:23:43

-2

你想找到4,5和7的每一個發生? 嘗試:

Output = find(A>3) 

這將返回的任何位置的1×N個向量超過3 ... 不知道這是你想要的,雖然

+0

發現(A> 3)不是我想要的答案。感謝您的幫助 – 2013-03-21 13:25:11

2

你需要遠你的目標更清晰。它看起來像你想在向量中找到局部最大值。

請問你總是有載體(不是真的陣列,通常是表示與兩個非單元尺寸的東西一個字)有你希望找到一個當地最大?你會選擇找到所有本地最大值?如果是這樣,那麼這將工作...

A = [0 0 1 2 3 5 0 0 0 0 0 4 5 6 7 0 0 0 0 1 1 2 3 4 1]; 

n = numel(A); 
ind = 2:(n-1); 

maxLoc = ind(find((diff(ind-1) > 0) & (diff(ind) < 0))); 

% in case the max occurs at an end 
if A(2) < A(1) 
    maxLoc = [1,maxLoc]; 
end 
if A(n) < A(n-1) 
    maxLoc = [maxLoc,n]; 
end 

maxVal = A(maxLoc); 

A = [0 1 2 2 1 0]; 

那你現在想見到矢量

可是什麼?

同樣,你需要考慮你的要求。你有什麼需要。目標是什麼?

一旦你已經這樣做了,那麼你的問題就比較容易解決,更容易爲別人解答。

2

我假設你正在尋求局部最大值 - 也就是說,值大於他們周圍的值。

我的解決辦法是這樣的:

Loc = find(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0)+1; 
Val = A(Loc); 

祿將包含本地最大值的位置,和Val將包含在這些局部極大值。請注意,它不會像寫入那樣在邊緣找到最大值。如果你想檢測這些,你必須稍微修改它:

Loc = find([A(1)>A(2),(diff(A)(2:end)<0 & diff(A)(1:(end-1))>0),A(end)>A(end-1)]); 
Val = A(Loc);