matlab 极值查找程序
%n 迭代次数,data 是一维输入,peakval 是找到峰值,peakcoor 是峰值所
在位置
function [peakval,peakcoor] = peaknder(data,n)
premaxindexbox=nd(di(sign(di(data)))==-2)+1;
premaxvaluebox=data(premaxindexbox);%极大值
if n==1
%额外情况:为防止机制的漏点而设置
originpeakval=max(data);
originpeakcoor=nd(data==originpeakval);
%合并
peakcoor=[premaxindexbox;originpeakcoor];
peakval=[premaxvaluebox;originpeakval];
%绘图
plot(data);hold on
plot(peakcoor,peakval,'ro','LineWidth',1);
hold o
else
for i=2:n
nextmaxindex=nd(di(sign(di(premaxvaluebox)))==-
2)+1;%在最大值中再次找最大值,得到序列号
nextmaxindexbox=premaxindexbox(nextmaxindex);%依据序
列号找到第一列对应值,即二次极值的坐标
nextmaxvaluebox=premaxvaluebox(nextmaxindex);%依据序
列号找到第二列对应值,即二次极值的值
if i<n
premaxindexbox=nextmaxindexbox;
premaxvaluebox=nextmaxvaluebox;
end
end
if rem(i,2)==0
color='ko';size=i;
colorline='k';
elseif rem(i,2)~=0
color='go';size=i;
colorline='g';
end
%额外情况:为防止机制的漏点而设置
originpeakval=max(data);
originpeakcoor=nd(data==originpeakval);
%合并
peakcoor=[nextmaxindexbox;originpeakcoor];
peakval=[nextmaxvaluebox;originpeakval];