找函数极大值点的再讨论
在发这个帖之前先搜了下,有找极值点的代码如下:y是一个数据
yf=y(2:end-1)-y(1:end-2); %前向差分
yb=y(2:end-1)-y(3:end); %后向差分
I=find(yf.*yb>=0); %寻找极值点(不考虑首尾两点)
I=I+1;
则I是极值点的下标了。
还有
% data是你的数据
find(diff(sign(diff(data)))==-2)+1;
% 找到极大值的位置
find(diff(sign(diff(data)))==2)+1;
% 找到极小值的位置
但这么做不能解决在极值点连续重复几次出现的情况,比如:
y=[ 3 1 4 4 6 6 2];
若用第一种方法找极大值点,
yf=y(2:end-1)-y(1:end-2); %前向差分
yb=y(2:end-1)-y(3:end); %后向差分
I=I=find(yf>=0&yf.*yb>=0&yb>=0);%寻找极值点(不考虑首尾两点)
I=I+1;
则找到的极值点的下标是3 5 6,错y(3)当成极大值点了
若用第二种方法,则I为空阵。
请问在这种情况下如何找到极大值点呢?要求或极值点连续出现,则以最开始出现的那一个极值点为准。
还是以y=[ 3 1 4 4 6 6 2];为例,要求最后求出的极大值点下标就是5