📄 findmax.m
字号:
function [gt,d]=findmax(data, flag)
%FINDMAX Interpolates the maxima in a vector of data.
%
% Function used for returning all the maxima in a set of
% data (vector or matrices). The maxima are calculated by
% cubic or quadratic interpolation.
[m,n]=size(data);
if nargin < 2, flag = 1; end
% 1-D
d = [2, 2];
if m==1 | n==1
data=data(:);
n=max([n,m]);
ind=find( (data>[data(1)-1;data(1:n-1)]) & (data>=[data(2:n);data(n)-1]) );
s=length(ind);
gt=zeros(s,1);
for i=1:s
ix=ind(i);
factor = 1;
err = 0; % Smoothness factor
if (ix==1 | ix==n);
gt(i)=data(ix);
elseif ix>n-3 | ix<4
if data(ix-1)==data(ix)&data(ix+1)==data(ix)
gt(i)=data(ix);
else
gt(i)=quad2(data(ix-1:ix+1));
end
elseif data(ix+2)<data(ix+1)
[gt(i), err] = cubic(data(ix-1:ix+2), data(ix-2), 0);
elseif data(ix-2)<data(ix-1)
gt(i)=cubic(data(ix-2:ix+1));
elseif data(ix)>data(ind(i+1))
gt(i)=quad2(data(ix-1:ix+1));
factor = 0.75;
else
gt(i)=data(ix);
factor = 0.5;
end
% Discretization interval estimation
% Aim: keep error less than 1/10 of abs(constraint) greater than 0
% or 1/50 of smoothness factor.
% error = data(ix) - gt(i)
if flag
if ~err
err = data(ix) - gt(i);
end
f = abs((gt(i) + 1.1e-5) /(10 * err + 1e-5));
d(1,1) = min(d(1,1), factor * ((f>=0.3) + (0.7 + f)*(f< 0.3) +(f>1)*(log(f)/100)) );
end
end
else
% 2D
[gt, d] = findmax2(data, flag);
end
if (m*n)<4, d=[0.5,0.5]; end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -