MATLAB学习交流:小技巧与心得分享

如何在matlab里找一段函数曲线的波峰大小和对应的位置(对绘制分岔图有用)

首先绘制一条曲线:

x=linspace(0,1,1000);       

%x的范围从0到1,并且1000等分

Pos=[1 2 3 4 5 6]/10;       

%规定了每条曲线的位置,按我的理解是在0~1,系统会自动的分成平均的10份,1,2,3 等等就是位置的编号,1就在第一个位置,2就在第二个位置,以此类推。

Hgt=[3 4 4 2 2 3];          

%每条曲线的高度,就是波峰每一段函数的顶点。

Wdt=[2 6 3 3 4 6]/100;     

%每条曲线的宽度,每条曲线1/2处的宽度。

for n=1:length(Pos)

    Gauss(n,:)=Hgt(n)*exp(-((x - Pos(n))/Wdt(n)).^2);

end   

%循环次数为Pos长度,显然一共循环六次 ,当n等于1的时候,将等号右边的计算结果放到Gauss的第一行中,当n等于2的时候,将等号右边的计算结果放到Gauss的第二行中,依次类推得到了几个曲线的走势矩阵。

P=sum(Gauss);

%将每一个函数的纵坐标相加,让这几个曲线融合成为一条曲线,就是下图中的红线。

plot(x,Gauss,'--',x,P);

%绘制图像,分别绘制6条曲线和6条曲线的总共曲线。

[pks,locs] = findpeaks(P,x);

% pks是找到总和曲线的峰值的大小 locs是每一个峰值的顺序

text(locs+.02,pks,num2str((1:numel(pks))'))

%加一个命令,让其对峰值的顺序进行编号。

这个命令啥意思我也不知道,照着Matlab自带的例子编就好了。

[psor,lsor] = findpeaks(P,x,'SortStr','descend');

findpeaks(P,x)

text(lsor+.02,psor,num2str((1:numel(psor))'))

%从绘制完图像后从输入这三行,就可以把峰值从高到低排序。

 

 

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空