如何求时间序列的所有波峰和波谷
对一序列,如何在matlab中求得多个波峰波谷?并希望能够显示波峰波谷所在的索引号。而且这些波峰波谷的值在不断的变化。如图我知道有一种比较死板的方法,就是循环使用max和min,不知道大家有没有什么更好的方法?
[ 本帖最后由 eight 于 2008-5-7 16:05 编辑 ] 试试diff,置顶帖里有类似的技巧可供参考。 原帖由 3QMM 于 2008-5-7 15:49 发表 http://www.chinavib.com/forum/images/common/back.gif
对一序列,如何在matlab中求得多个波峰波谷?并希望能够显示波峰波谷所在的索引号。而且这些波峰波谷的值在不断的变化。如图
我知道有一种比较死板的方法,就是循环使用max和min,不知道大家有没有什么更好的方法? 这个问题讨论过无数次,请版面搜索局部极小值,或者 extr 谢谢提醒,前两天刚刚用diff求了极小值和极大值。:loveliness: :loveliness: 回复 4 # 3QMM 的帖子
能否指导一下,急用这个方法来处理工作中的事,再不解决,明天下岗了 回复 5 # lcgs005 的帖子
论坛或者网络上好多,求极值的程序,多搜一下! 回复 5 # lcgs005 的帖子
仅供参考:
离散序列求极值问题小结
--------------------------------------ilxy的方法-------------------------------------------------------------------
aa=randperm(20)
bb=intersect(find(diff(aa)>0)+1,find(diff(aa)<0))
----------------------------------hyperelastic 的方法----------------------------------------------------------
N = 100; aa=randperm(N);
index = find(((aa(2:N-1)>aa(1:N-2))+(aa(2:N-1)>aa(3:N)))==2)+1;
bb = aa(index);
-------------------bainhome 的方法-----------------------------------------------------------------------------
a=rand(1,100);find(diff(sign(diff(a)))>0)+1
------------------------------------------------------------------------------------------------------------------------
以上代码都是求极大值,略微变换后可以得到极小值。出自:中华钢结构论坛
------------------------------------eight版主给的方法------------------------------------------------------------
d=diff(x); n=length(d);
d1=d(1:n-1); d2=d(2:n);
indmin=find(d1.*d2<0 & d1<0)+1;
indmax=find(d1.*d2<0 & d1>0)+1;
------------------------------------------------------------------------------------------------------------------------
寻找极大值:
function index = localmax(x)
index = find( diff( sign( diff() ) ) < 0 );
------------------------------------------------------------------------------------------------------------------------
极值:
data是你的数据,
find(diff(sign(diff(data)))==-2)+1
找到极大值的位置
find(diff(sign(diff(data)))==2)+1
找到极小值的位置
data(find(diff(sign(diff(data)))==-2)+1)和
data(find(diff(sign(diff(data)))==2)+1)
返回的是极大值和极小值
------------------------------------------------------------------------------------------------------------------------
>> c=rand(1,10)
c =
0.9575 0.9649 0.1576 0.9706 0.9572 0.4854 0.8003
0.1419 0.4218 0.9157
>> p1=c(imregionalmax(c)) % 区间极大值
p1 =
0.9649 0.9706 0.8003 0.9157
>> p2=c(imregionalmin(c)) % 区间极小值
p2 =
0.9575 0.1576 0.4854 0.1419
回复 7 # zhouyang664 的帖子
谢谢,不过,这个要先学习哪个基础的软件? MATLAB啊!
谢谢,我加班学软件先 回复 10 # lcgs005 的帖子
好奇问下LS会那些软件!? 回复 11 # ChaChing 的帖子
新手,连门还没入,主要想学学曲线拟合与线性回归方面的东西,有时间了,多指教下哦,在下先感谢了 回复 12 # lcgs005 的帖子
ok, 互相加油!
页:
[1]