找回密码
 注册
Simdroid-非首页
查看: 285|回复: 9

matlab如何 求一个函数的多个峰值?

[复制链接]
发表于 2006-11-22 19:12:21 | 显示全部楼层 |阅读模式 来自 北京
matlab如何 求一个函数的多个峰值?一个函数有多个峰值,但 不知道峰值的位置,如何同时求出各个峰值的大小?谢谢
发表于 2006-11-22 19:34:06 | 显示全部楼层 来自 江苏南京
Simdroid开发平台
1)对该函数求一次导数和二次导数,
2)求一次导数对应的根,
3)判断一次导数的对应根是否为二次导数是否为负,若为负既凸形则是峰值;为正则为凹形。
比如y=-x^2+3*x,一次导数-2*x+3,根3/2。二次导数-2,显然是y(3/2)是峰值。
比如y=x^3+3*x^2等等,也可以如法求出。
4)另外需要考虑两个端点问题,就是说根的范围可能在给出的区间外。这样需要去掉范围外的;
5)还需要考虑的是,两点端点的值,端点值甚至会比任何范围内的都大。比如上边的三次函数,如果范围为[-3,3],虽然峰值不在端点,但是确实y(x=3)是最大的。
发表于 2006-11-22 19:39:31 | 显示全部楼层 来自 新疆乌鲁木齐
更简单的方法:
  1. x=linspace(0,10,200);
  2. y=sin(exp(x));
  3. a=find(diff(sign(diff(y)))<0)+1;
  4. plot(x,y,x(a),y(a),'r*')
复制代码
发表于 2006-11-22 20:07:36 | 显示全部楼层 来自 湖北武汉
SMTH MATHTOOLS FAQ
不过好象有点问题

:#FangQ(Qianqian.Fang@dartmouth.edu), 2001/4/21,UESTC/Math#

        极值:
        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)
        返回的是极大值和极小值

======================================================

我的没有问题,你可以测试一下,波峰和波谷点的求法只是将“>”改为“<”,MIT的一道题目,原来simwe有讨论,做波峰波谷求解是我独立想出来的,没想到前人早已经想到了,sign...
                                                                                                                              ——by bainhome


======================================================

[ 本帖最后由 bainhome 于 2006-11-22 20:21 编辑 ]
 楼主| 发表于 2006-11-23 08:56:51 | 显示全部楼层 来自 北京

多谢两位

非常感谢两位的回答,按照版主的方法,我已经把这个问题解决了!谢谢!
发表于 2006-11-23 10:00:57 | 显示全部楼层 来自 北京海淀
如果不知道diff函数的情况下这么做:
x=linspace(0,10,200);
y=sin(exp(x));
a=find((y(2:end-1)>y(1:end-2))&(y(2:end-1)>y(3:end)))+1;
plot(x,y,x(a),y(a),'r*')
偶当初是在中华钢结构论坛(http://www.okok.org/cgi-bin/ut/t ... mp;bpg=1&age=0)看到bainhome的这个帖子的,又把它贴到研学了(http://bbs.matwav.com/post/view? ... 1&age=0#577376)。呵呵

[ 本帖最后由 rocwoods 于 2006-11-23 10:05 编辑 ]
发表于 2007-10-9 13:46:57 | 显示全部楼层 来自 哈尔滨工程大学
真好使啊,强

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2007-10-10 09:40:15 | 显示全部楼层 来自 韩国
三维的哪?
回复 不支持

使用道具 举报

发表于 2010-7-9 12:24:43 | 显示全部楼层 来自 湖北武汉
三维的很困难
回复 不支持

使用道具 举报

发表于 2010-7-10 06:01:30 | 显示全部楼层 来自 贵州贵阳
记得前面有一个类似的帖子,一元和二元函数的先离散话,然后有相应的命令,就像找到一个图像上亮度较高的点,用imregionalmax,由于手机上网,不方便找到那个帖子,楼主可以找找看

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-6 21:27 , Processed in 0.050223 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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