📄 findcriticalpoints.m
字号:
function [allx, ally] = findcriticalpoints(datay)
%
% [allx, ally] = findcriticalpoints(datay):
%
% Function to return the set of max, min and zero crossing values
% and their coordinates in the order found in datay(n),
% where n specifies the dimension of array datay.
% The value datay(i) is considered to have a local minimum in i,
% if datay(i-1) > datay(i) < datay(i+1);
% The value datay(i) is considered to have a local maximum in i,
% if datay(i-1) < datay(i) > datay(i+1);
% The value datay(i) is considered to have a zero crossing, if
% datay(i) and datay(i+1) have different signs. The coordinate
% of datay(i) is linearly interpolated.
%
% Input-
% datay - input vector of values
% Output-
% allx - vector that specifies the coordinates of max, min
% and zero crossing values in the order found
% ally - corresponding max, min and zero values
%
% Karin Blank (NASA GSFC) March 26, 2003 Initial
% Jelena Marshak (NASA GSFC) July 16, 2004 Modified
% (Replaced '&&' by '&' in zero-crossing calculation section.)
% (Corrected zero-crossing calculation.)
%
% Notes-
% Used by 'zfapanls.m'.
%----- Initialize values
allx = [];
ally = [];
Ymax = 0;
Ymin = 0;
Xmax = 0;
Xmin = 0;
flagmax = 0;
flagmin = 0;
for i=2:length(datay)-1;
%----- Find local maximum
if ((datay(i) > datay(i-1)) & (flagmax == 0))
flagmax = 1;
Xmax = i;
Ymax = datay(i);
end
if((datay(i) < datay(i+1)) & (flagmax == 1))
flagmax = 0;
end
if((datay(i) > datay(i+1)) & (flagmax == 1))
flagmax = 0;
ally = [ally, Ymax];
allx = [allx, Xmax];
end
%----- Find local minimum
if((datay(i) < datay(i-1)) & (flagmin == 0))
flagmin = 1;
Xmin = i;
Ymin = datay(i);
end
if((datay(i) > datay(i+1)) & (flagmin == 1))
flagmin = 0;
end
if((datay(i) < datay(i+1)) & (flagmin == 1))
flagmin = 0;
allx = [allx, Xmin];
ally = [ally, Ymin];
end
%----- Find zero crossings
if(((datay(i) > 0) & (datay(i+1) < 0)) | ((datay(i) < 0) & (datay(i+1) > 0)))
%----- Estimate where zero crossing actually occurs
slope = (datay(i+1) - datay(i)); %(delta x = 1)
b = datay(i+1) - (slope * (i+1));
x = -b/slope;
allx = [allx, x];
ally = [ally, 0];
elseif(datay(i) == 0.)
x=i;
allx = [allx, x];
ally = [ally, 0];
% zero_cross = [zero_cross2, i];
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -