2011-11-29 6 views
0

我有一系列繪製的值(X,Y)的。我在尋找一種方法來識別段{(十一,彝族),(十一+ 1,易建聯+ 1)}以最快的增長/漸漸收窄速度。 Plotted values 在示例圖像,這些段被標記並具有最快下降段以下的X- COORDS(516,550),用於增長最快的鏈段和(620,635)。我怎樣才能定義一個算法來做到這一點?計算增長最快的/在一系列繪製的值的漸漸收窄部分

回答

2

計算每個線段的斜率。跟蹤斜率的最大值和最小值。這些將分別對應於增幅最大和減幅最大的部分。

0

下面的示例代碼應爲您提供一個前進的道路解決您的問題:

%Create x and y values 
x = 1:0.5:20; 
y = real((x-15).^2.2.*sin(x)-0.5*x); 

%Plot 
f1 = figure(1);clf 
plot(x,y) 

%Calculate derivative 
dx = abs(conv(y,[1 -1],'same')); 

%Find maximum change 
[maxSlope idx] = find(dx==max(dx)); 

%Display derivative and maximum change points 
hold on 
plot(x+0.5,dx,'g') 
plot(x(idx+1),y(idx+1),'*r') 
grid on 

legend('Data series','abs(Derivative)','Point of maximum change'); 

我創建了一個玩具的數據集,並發現其中y最爲改變點。請注意,這裏假設等間距點(x線性增加)。你的數據是否均勻分佈?

所得的情節: enter image description here

+0

我沒有導出功能。我需要一種方法來計算斜率,而不需要導數方法。 –

+0

你要知道,我還沒有推導的功能本身。我對數據集的導數做了數值近似。我假設你有權訪問產生你在帖子中顯示的數字的數據......? – Vidar