声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 6106|回复: 15

[综合讨论] 如何求时间序列的所有波峰和波谷

[复制链接]
发表于 2008-5-7 15:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
对一序列,如何在matlab中求得多个波峰波谷?并希望能够显示波峰波谷所在的索引号。而且这些波峰波谷的值在不断的变化。如图
我知道有一种比较死板的方法,就是循环使用max和min,不知道大家有没有什么更好的方法?

[ 本帖最后由 eight 于 2008-5-7 16:05 编辑 ]
未命名.JPG
回复
分享到:

使用道具 举报

发表于 2008-5-7 16:04 | 显示全部楼层
试试diff,置顶帖里有类似的技巧可供参考。
发表于 2008-5-7 16:05 | 显示全部楼层
原帖由 3QMM 于 2008-5-7 15:49 发表
对一序列,如何在matlab中求得多个波峰波谷?并希望能够显示波峰波谷所在的索引号。而且这些波峰波谷的值在不断的变化。如图
我知道有一种比较死板的方法,就是循环使用max和min,不知道大家有没有什么更好的方法?
这个问题讨论过无数次,请版面搜索局部极小值,或者 extr
 楼主| 发表于 2008-5-7 16:07 | 显示全部楼层
谢谢提醒,前两天刚刚用diff求了极小值和极大值。:loveliness: :loveliness:
发表于 2011-3-4 10:28 | 显示全部楼层
回复 4 # 3QMM 的帖子

能否指导一下,急用这个方法来处理工作中的事,再不解决,明天下岗了
发表于 2011-3-4 12:24 | 显示全部楼层
回复 5 # lcgs005 的帖子

论坛或者网络上好多,求极值的程序,多搜一下!
发表于 2011-3-4 12:25 | 显示全部楼层
回复 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; x(:); 0]) ) ) < 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

评分

1

查看全部评分

发表于 2011-3-4 13:31 | 显示全部楼层
回复 7 # zhouyang664 的帖子

谢谢,不过,这个要先学习哪个基础的软件?

点评

what???  发表于 2011-3-5 00:11
发表于 2011-3-4 21:31 | 显示全部楼层
MATLAB啊!
发表于 2011-3-5 11:03 | 显示全部楼层
谢谢,我加班学软件先
发表于 2011-3-5 11:09 | 显示全部楼层
回复 10 # lcgs005 的帖子

好奇问下LS会那些软件!?
发表于 2011-3-5 12:59 | 显示全部楼层
回复 11 # ChaChing 的帖子

新手,连门还没入,主要想学学曲线拟合与线性回归方面的东西,有时间了,多指教下哦,在下先感谢了
发表于 2011-3-5 20:47 | 显示全部楼层
回复 12 # lcgs005 的帖子

ok, 互相加油!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-17 02:27 , Processed in 0.068231 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表