如何在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))'))
%从绘制完图像后从输入这三行,就可以把峰值从高到低排序。