我不是程序员,但我必须在Matlab中做很简单的事情。我希望你能帮助我。
我有一些数据,在列中,我需要找到局部极值。任何想法如何写这几行代码?
答案 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