whiran
2008-05-20, 10:46
你看看这个小程序,在matlab下编的,基本上是求极值位置的一个程序,你再试试。
%求极大值;
% 平滑;
for i=3:2043
a4(i)=(a4(i-2)+a4(i-1)+a4(i)+a4(i+1)+a4(i+2))/5.0;
end
for i=3:2045
a4(i)=(a4(i-2)+a4(i-1)+a4(i)+a4(i+1)+a4(i+2))/5.0;
end
max=1;
j=1;
for i=3:2043
datafilt(i)=(datafilt(i-2)+datafilt(i-1)+datafilt(i)+datafilt(i+1)+datafilt(i+2))/5.0;
end
for i=3:2045
datafilt(i)=(datafilt(i-2)+datafilt(i-1)+datafilt(i)+datafilt(i+1)+datafilt(i+2))/5.0;
end
max=1;
j=1;
%求极值;
for i=500:1500
if(a4(i)>a4(i-1)&&a4(i)>a4(i+1)&&a4(i+1)>a4(i+2)&&a4(i+2)>a4(i+3)&&a4(i-1)>a4(i-2))
max(j)=i;
j=j+1;
end
end
maxramda=ramda(max);%极值点对应波长;
nummax=length(max);%极值点个数;
hold on;
plot(ramda(max),a4(max),'.r');%极值点对应图;
for i=300:1800
if(datafilt(i)>datafilt(i-1)&&datafilt(i)>datafilt(i+1)&&datafilt(i+1)>datafilt(i+2)&&datafilt(i+2)>datafilt(i+3)&&datafilt(i-1)>datafilt(i-2))
max(j)=i;
j=j+1;
end
end
maxramda=ramda(max);%极值点对应波长;
nummax=length(max);%极值点个数;
hold on;
plot(ramda(max),datafilt(max),'.r');%极值点对应图;
%求极大值;
% 平滑;
for i=3:2043
a4(i)=(a4(i-2)+a4(i-1)+a4(i)+a4(i+1)+a4(i+2))/5.0;
end
for i=3:2045
a4(i)=(a4(i-2)+a4(i-1)+a4(i)+a4(i+1)+a4(i+2))/5.0;
end
max=1;
j=1;
for i=3:2043
datafilt(i)=(datafilt(i-2)+datafilt(i-1)+datafilt(i)+datafilt(i+1)+datafilt(i+2))/5.0;
end
for i=3:2045
datafilt(i)=(datafilt(i-2)+datafilt(i-1)+datafilt(i)+datafilt(i+1)+datafilt(i+2))/5.0;
end
max=1;
j=1;
%求极值;
for i=500:1500
if(a4(i)>a4(i-1)&&a4(i)>a4(i+1)&&a4(i+1)>a4(i+2)&&a4(i+2)>a4(i+3)&&a4(i-1)>a4(i-2))
max(j)=i;
j=j+1;
end
end
maxramda=ramda(max);%极值点对应波长;
nummax=length(max);%极值点个数;
hold on;
plot(ramda(max),a4(max),'.r');%极值点对应图;
for i=300:1800
if(datafilt(i)>datafilt(i-1)&&datafilt(i)>datafilt(i+1)&&datafilt(i+1)>datafilt(i+2)&&datafilt(i+2)>datafilt(i+3)&&datafilt(i-1)>datafilt(i-2))
max(j)=i;
j=j+1;
end
end
maxramda=ramda(max);%极值点对应波长;
nummax=length(max);%极值点个数;
hold on;
plot(ramda(max),datafilt(max),'.r');%极值点对应图;