- 积分
- 26294
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-6-1
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
情况1:寻找序列极值的数值如果只需要寻找极值点的数值,而不需要确定极值点所在的位置。可以使用matlab自带的findpeaks函数。
例如:>> aa=randperm(20)
aa =
Columns 1 through 11
6 3 16 11 7 17 14 8 5 19 15
Columns 12 through 20
1 2 4 18 13 9 20 10 12
>> cc = findpeaks(aa)
cc =
16 17 19 18 20
情况二:寻找极值点的坐标
如果不仅需要寻找极值点的数值,并且需要确定极值点所在的位置。可以使用如下代码。
思想:如果一阶导数为零,二阶导数小于零,则为极大点
>> bb=intersect(find(diff(aa)>0)+1,find(diff(aa)<0))
bb =
3 6 10 15 18
bb:即为极值点所在的坐标的数组。使用如下代码可以得到跟findpeaks求出来的一样的极值
L_extre = length(bb);
for b1 = 1 : L_extre
dd(1,b1) = aa(1,bb(b1));
end
当然还有其他的方法得到极值点的坐标:可以查阅这篇博文。
http://hi.baidu.com/honinbou/item/4cd11473362cb428d7a89cb6
情况三:求一组长序列的20个较大的极大值。
假设一组序列有N个极大值(N > 20),要求得到20个较大的极大值。
以下是我自己尝试写的代码,如有纰漏请指教。aa为一个长度为num的序列。要求:保留20个极值点的值,其余值都置0。
bb = intersect(find(diff(aa)>0)+1,find(diff(aa)<0));
L_extre = length(bb);
for b1 = 1 : L_extre
aa_extre(1,b1) = aa(1,bb(b1));
end
[value1 ,index1 ] = sort(aa_extre,'descend'); %降序排列
index2 = index1(1 : 20); %得到前20个较大极大值的坐标
for i3 = 1 : num
for i4 = 1 : 20
if i3 == bb(index2(i4))
aa(1,i3) = aa(1,i3);
break;
else
aa(1,i3) = 0;
end
end
end
|
|