qfwaterlily 发表于 2006-10-12 20:30

如何求由两个峰的曲线中,哪个较小的峰值对应的坐标值?

一条曲线有两个峰值,可是我现在仅仅能读到哪个最高峰的坐标值,哪个小的波峰的坐标值读不到,请高手指点一下?如何求次峰的峰值?

[ 本帖最后由 lxq 于 2006-10-12 22:42 编辑 ]

jimin 发表于 2006-10-15 14:34

分个区间应该可以求的

qfwaterlily 发表于 2006-10-15 19:27

关键是这个峰的位置是变化的,区间没法定,它一会儿在最高峰的左边,一会儿在最高峰的右边。这种情况,我该怎么求?
谢谢

jimin 发表于 2006-10-15 19:57

这条曲线是怎么生成的,峰值会随机移动的吗

[ 本帖最后由 ChaChing 于 2010-8-17 16:10 编辑 ]

branch 发表于 2006-10-15 20:10

既然是波峰,我觉得应该存在这样的关系
因为波峰点的属性幅值(纵坐标绝对值)较相邻(左右)点大,
所以只需找一点使得该点幅值大于相邻点。
排除偶然性,可以将判断扩展几个点。

bainhome 发表于 2006-10-15 22:39

这个问题和MIT的MATLAB课程中一道练习题思想类似,如果有不用循环还必须十分简洁的前提的话,说难不难,但说简单也不简单,答案如下:function PickSumitPoint
clc; x=.08:.002:1; y=exp(sin(1./x)); plot(x,y)
Indy=find(diff(sign(diff(y)))<0)+1;
fPoint=sortrows(,2);
dPointSecond=fPoint(end-1,:);
disp(['亚峰值点的坐标f为(',num2str(dPointSecond),')'])运行结果:亚峰值点的坐标f为(0.128      2.7159)

[ 本帖最后由 ChaChing 于 2010-8-17 16:14 编辑 ]

jimin 发表于 2006-10-15 23:12

学了点东西,练习一下咯
clc
x=.08:.002:1;
y=exp(sin(1./x));
plot(x,y)
Indy=find((y(2:end-1)>y(1:end-2))&(y(2:end-1)>y(3:end)))+1

fPoint=sortrows(,2);
dPointSecond=fPoint(end-1,:);
disp(['亚峰值点的坐标f为(',num2str(dPointSecond),')'])

Indy =

    25   279

亚峰值点的坐标f为(0.128      2.7159)

yqchenlolo 发表于 2006-10-16 08:58

原帖由 bainhome 于 2006-10-15 22:39 发表
这个问题和MIT的MATLAB课程中一道练习题思想类似,如果有不用循环还必须十分简洁的前提的话,说难不难,但说简单也不简单,答案如下:
function PickSumitPoint
clc
x=.08:.002:1;
y=exp(sin(1./x));
plot(x ...
这段程序的求解原理能不能说下:lol

qfwaterlily 发表于 2006-10-16 14:12

非常感谢大家的帮助!

to:jimin
是的,峰值随机移动的

[ 本帖最后由 ChaChing 于 2010-8-17 16:18 编辑 ]

jimin 发表于 2006-10-16 16:12

原帖由 yqchenlolo 于 2006-10-16 08:58 发表

这段程序的求解原理能不能说下:lol
关键是这句Indy=find(diff(sign(diff(y)))<0)+1;
找出所有比其左边一点和右边一点的值大的索引
这句的另一实现方式是
Indy=find((y(2:end-1)>y(1:end-2))&(y(2:end-1)>y(3:end)))+1
页: [1]
查看完整版本: 如何求由两个峰的曲线中,哪个较小的峰值对应的坐标值?