2017-03-07 30 views
-2

我的代碼找到它們的拐點和位置,但有些點丟失。有什麼方法可以在MATLAB上找到正確的點嗎?如何找到數據集的拐點?

+0

_尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。你的情節上的紅點不是折點。 – dasdingonesin

+0

謝謝dasdingonesin。 – voo

回答

0

有一個解決方案here

findinflections.m

% function [datapeaks datavalleys] = findinflections(plotswitch,datain) 
% This program finds peaks 
% Arguments: 
% ploswitch: 0 or 1 : disable or enable plots (for debugging) 
% datain: 1D variable 
% Dependencies: 
% 
% Copyright (c) 2011, Arun Ramakrishnan 
% All rights reserved. 
% 
% Redistribution and use in source and binary forms, with or without 
% modification, are permitted provided that the following conditions are met: 
%  * Redistributions of source code must retain the above copyright 
%  notice, this list of conditions and the following disclaimer. 
%  * Redistributions in binary form must reproduce the above copyright 
%  notice, this list of conditions and the following disclaimer in the 
%  documentation and/or other materials provided with the distribution. 
%  * Neither the name of the <organization> nor the 
%  names of its contributors may be used to endorse or promote products 
%  derived from this software without specific prior written permission. 
% 
% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
% ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
% WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
% DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY 
% DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
% (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
% ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
% (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
% SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 

function [datapeaks datavalleys] = findinflections(plotswitch,datain) 
% datain = gconv; 
datad1=[diff(datain)]; 
mp = find(datad1>0); 
mn = find(datad1<=0); 

datapeaks = []; 
for pindex = 1:length(mp) 
    [maxvalue, maxindex] = max(datain(mp(pindex):mn(min(find(mn>mp(pindex)))))); 
    if ~isempty(maxindex) 
     datapeaks = cat(1,datapeaks, floor(mean(maxindex))+mp(pindex)-1); 
    end 
end 
datapeaks= unique(datapeaks); 

datavalleys = []; 
for pindex = 1:length(mn) 
    [minvalue, minindex] = min(datain(mn(pindex):mp(min(find(mp>mn(pindex)))))); 
    if ~isempty(minindex) 
     datavalleys = cat(1,datavalleys, floor(mean(minindex))+mn(pindex)-1); 
    end 
end 
datavalleys= unique(datavalleys); 

if (plotswitch) 
    plot(1:length(datain),datain,'k-',mp,datain(mp),'b.',mn,datain(mn),'r.',datapeaks,datain(datapeaks),'g.',datavalleys,datain(datavalleys),'c.'); 
end 

調用它(陣列一個是你分):

[datapeaks, datavalleys]=findinflections(1,A); 

輸出:

enter image description here