用于查找局部极值的MATLAB m函数

时间:2014-12-03 21:49:29

标签: matlab max min

我不是程序员,但我必须在Matlab中做很简单的事情。我希望你能帮助我。

我有一些数据,在列中,我需要找到局部极值。任何想法如何写这几行代码?

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。

1)一个简单的方法是使用this script

2)如果数据不大,您可以编写自己的算法,分析每个点的渐变或分析增量:

1D阵列

jmin=0;
jmax=0;
for j=2:length(M)-1
    if (M(j)>M(j-1))&&(M(j)>M(j+1))
        jmax=jmax+1;
        max_index(jmax)=j;
        max_value(jmax)=M(j);
    end;
    if (M(j)<M(j-1))&&(M(j)<M(j+1))
        jmin=jmin+1;
        min_index(jmin)=j;
        min_value(jmin)=M(j);
    end;
end;

二维矩阵

jmin=0;
jmax=0;
s=size(M);
for j1=2:s(1)-1
    for j2=2:s(2)-1
        if (M(j1,j2)>M(j1-1,j2))&&(M(j1,j2)>M(j1+1,j2))&&(M(j1,j2)>M(j1,j2-1))&&(M(j1,j2)>M(j11,j2+1))
            jmax=jmax+1;
            max_index(jmax)=[j1,j2];
            max_value(jmax)=M(j1,j2);
        end;
        if (M(j1,j2)<M(j1-1,j2))&&(M(j1,j2)<M(j1+1,j2))&&(M(j1,j2)<M(j1,j2-1))&&(M(j1,j2)<M(j11,j2+1))
           jmin=jmin+1;
           min_index(jmin)=[j1,j2];
           min_value(jmin)=M(j1,j2);
        end;
    end;
end;

在此算法中,我们检查每个点相对于其他四个相邻点的最大值或最小值。这种模式可以拥有更复杂的结构,并且可以根据数据包含更多的点。

答案 1 :(得分:0)

我发现了类似的东西,但我发现它没有单独发现它的极值,我想。

d = diff(a)
for i=1:N-2
         if d(i)==0                
            if sign(d(i-1))~=sign(d(i+1)) 
               maxmin = [maxmin, i];
            end
         elseif sign(d(i))~=sign(d(i+1))   
            maxmin = [maxmin, i+1];       
         end