MATLAB求离散数据的极值点 您所在的位置:网站首页 函数有几个极值点怎么求 MATLAB求离散数据的极值点

MATLAB求离散数据的极值点

2024-07-08 20:06| 来源: 网络整理| 查看: 265

******************对一维数组求局部极大值或局部极小值******************* 方法一:

获得一维离散数据y的局部极大值:extrMaxValue = y(find(diff(sign(diff(y)))==-2)+1);获得一维离散数据y的局部极大值的位置:extrMaxIndex = find(diff(sign(diff(y)))==-2)+1;获得一维离散数据y的局部极小值:extrMaxValue = y(find(diff(sign(diff(y)))==+2)+1);获得一维离散数据y的局部极小值的位置:extrMaxIndex = find(diff(sign(diff(y)))==+2)+1;举例说明:

y= [1 2 3 4 5 6 7 8 1];

 diff(y)= 1 1 1 1 1 1 1 -7 %说明:用后面一个数减去前面一个数。sign(diff(y))=1 1 1 1 1 1 1 -1 %说明:返回正负数的判断逻辑值值,正的为1,负的为-1 。diff(sign(diff(y)))=0 0 0 0 0 0 -2find(diff(sign(diff(y)))==-2)+1 %说明:find(diff==-2)的位置+1才对应局部极大值的位置y(find(diff(sign(diff(y)))==-2)+1): 返回局部极大值。

同理:y= [1 2 3 4 5 6 7 8 1 2 3 1 5 9 4]------15个数 1 1 1 1 1 1 1 -7 1 1 -2 4 4 -5 ------14个数 1 1 1 1 1 1 1 -1 1 1 -1 1 1 -1 ------14个数 0 0 0 0 0 0 -2 2 0 -22 0 -2 ------13个数 extrMaxValue = 8 3 9extrMaxIndex = 8 11 14 总体就是类似于找拐点(数学)--头尾均不考虑在内。

 

方法二: matlab2009以上有一个函数fingpeaks,可以对一维数组直接求解局部极大值: 举例说明: y= [1 2 3 4 5 6 7  8 1 2  3 1 5  9 4]; x=findpeaks(y); %则x =8 3 9

 

******************对二维矩阵求局部极大值或局部极小值*******************matlab自带函数imregionalmax和imregionalmin。 格式:imregionalmax(A,n) 说明:A可以使2D数据或3D数据,n为求局部极值所采用的方法,默认2D时n=8(八邻域法);3D时n=26.2D时,n=4/8;3D时,n=6/18/26 。 返回值:一个二值逻辑矩阵,结构与A相同(1:表示局部极大值;0表示:非局部极大值)。 举例说明:某10*10矩阵 A =

     1     1     1     1     1     1     1     1     1     1      1     4     4     4     1     1     1     1     1     1      1     4     4     4     1     1     1     1     1     1      1     4     4     4     1     1     1     1     1     1      1     1     1     1     1     1     1     1     1     1      1     1     1     1     1     1     9     9     1     1      1     1     1     1     1     9    10     9     1     1      1     1    44     1     1     9     9     9     1     1      1     1     1    45     1     1     1     1     1     1      1     1     1     1     1     1     1     1     1     1

 四邻域求局部极大值:A1=imregionalmax(A,4);得到A1

A1 =

     0     0     0     0     0     0     0     0     0     0      0     1     1     1     0     0     0     0     0     0      0     1     1     1     0     0     0     0     0     0      0     1     1     1     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     1     0     0     0      0     0     1     0     0     0     0     0     0     0      0     0     0     1     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0

八邻域秋局部极大值:A1=imregionalmax(A);得到的结果与上面的结果略有差别。

A1 =

     0     0     0     0     0     0     0     0     0     0      0     1     1     1     0     0     0     0     0     0      0     1     1     1     0     0     0     0     0     0      0     1     1     1     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     1     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     1     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0

利用matalab的点乘命令:A2=A1.*A,得到与原始矩阵A相对应的局部极大值矩阵。

A2 =

     0     0     0     0     0     0     0     0     0     0      0     4     4     4     0     0     0     0     0     0      0     4     4     4     0     0     0     0     0     0      0     4     4     4     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0    10     0     0     0      0     0    44     0     0     0     0     0     0     0      0     0     0    45     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0

*****************矩阵最大值的求解************************

B=zeros(size(A)); idx=find(A==max(max(A))); for k=1:size(idx,1);    [i,j]=ind2sub(size(A),idx(k));    B(i,j)= A(i,j); end 举例说明 A =

     45    1     1     1     1     1     1     1     1     1      1     4     4     4     1     1     1     1     1     1      1     4     4     4     1     1     1     1     1     1      1     4     4     4     1     1     1     1     1     1      1     1     1     1     1     1     1     1     1     1      1     1     1     1     1     1     9     9     1     1      1     1     1     1     1     9    10     9     1     1      1     1    44     1     1     9     9     45    1     1      1     1     1    45     1     1     1     1     1     1      1     1     1     1     1     1     1     1     1     1

得到原矩阵A对应的最大值矩阵: B =

     45    0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0      0     0     0     0     0     0     0     45    0     0      0     0     0    45     0     0     0     0     0     0      0     0     0     0     0     0     0     0     0     0

如果不需要算最大值的位置,直接用max(max(A))或者max(A(:)),都可以求出矩阵A的最大值。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有