水莫 发表于 2011-2-14 19:20

求信号最大值最小值的一段matlab程序,有几句不懂,求助~~

本帖最后由 水莫 于 2011-2-14 19:21 编辑

function = extrema(in_data)

flag=1;
dsize=length(in_data);

spmax(1,1) = 1;
spmax(1,2) = in_data(1);
jj=2;
kk=2;
while jj<dsize,
    if ( in_data(jj-1)<=in_data(jj) & in_data(jj)>=in_data(jj+1) )
      spmax(kk,1) = jj;
      spmax(kk,2) = in_data (jj);
      kk = kk+1;
    end
    jj=jj+1;
end
spmax(kk,1)=dsize;
spmax(kk,2)=in_data(dsize);

if kk>=4
    slope1=(spmax(2,2)-spmax(3,2))/(spmax(2,1)-spmax(3,1));
    tmp1=slope1*(spmax(1,1)-spmax(2,1))+spmax(2,2);
    if tmp1>spmax(1,2)
      spmax(1,2)=tmp1;
    end

    slope2=(spmax(kk-1,2)-spmax(kk-2,2))/(spmax(kk-1,1)-spmax(kk-2,1));
    tmp2=slope2*(spmax(kk,1)-spmax(kk-1,1))+spmax(kk-1,2);
    if tmp2>spmax(kk,2)
      spmax(kk,2)=tmp2;
    end
else
    flag=-1;
end


msize=size(in_data);
dsize=max(msize);
xsize=dsize/3;
xsize2=2*xsize;

spmin(1,1) = 1;
spmin(1,2) = in_data(1);
jj=2;
kk=2;
while jj<dsize,
    if ( in_data(jj-1)>=in_data(jj) & in_data(jj)<=in_data(jj+1))
      spmin(kk,1) = jj;
      spmin(kk,2) = in_data (jj);
      kk = kk+1;
    end
    jj=jj+1;
end
spmin(kk,1)=dsize;
spmin(kk,2)=in_data(dsize);

if kk>=4
   slope1=(spmin(2,2)-spmin(3,2))/(spmin(2,1)-spmin(3,1));
    tmp1=slope1*(spmin(1,1)-spmin(2,1))+spmin(2,2);
    if tmp1<spmin(1,2)
      spmin(1,2)=tmp1;
    end

    slope2=(spmin(kk-1,2)-spmin(kk-2,2))/(spmin(kk-1,1)-spmin(kk-2,1));
    tmp2=slope2*(spmin(kk,1)-spmin(kk-1,1))+spmin(kk-1,2);
    if tmp2<spmin(kk,2)
      spmin(kk,2)=tmp2;
    end
else
    flag=-1;
end

flag=1;



红色标注的语句是什么功能?
flag是用来干嘛的?
我是程序菜鸟,求助高手们~~

Happy99 发表于 2011-2-14 20:52

matlab? 感觉像fortran!?
求最大值最小值, matlab不是有现成函数可用!

水莫 发表于 2011-2-15 19:03

回复 2 # Happy99 的帖子

的确有现成,但是这个能算出最大值和最小值所在位置的,这其实是一个m文件里的,在别的程序段中需要调用这个函数

Happy99 发表于 2011-2-15 21:45

水莫 发表于 2011-2-15 19:03 static/image/common/back.gif
回复 2 # Happy99 的帖子

的确有现成,但是这个能算出最大值和最小值所在位置的,这其实是一个m文件里的, ...

= max(...) finds the indices of the maximum values of A, and returns them in output vector I. If there are several identical maximum values, the index of the first one found is returned.

水莫 发表于 2011-2-16 19:27

回复 4 # Happy99 的帖子

现在在另一个程序中调用这个函数的时候是这样调用的:upper= spline(spmax(:,1),spmax(:,2),dd);上面的程序的输出是一个dsize行,2列对吗?我觉得这边调用语句的时候是相当于循环语句那样调用的对吗? = max(...) 能实现这个功能吗?

ChaChing 发表于 2011-2-17 00:16

回复 5 # 水莫 的帖子

真的没太多时间细看LZ的程序, 但我想试试看不就知道!?

leeking30 发表于 2011-2-17 23:44

回复 3 # 水莫 的帖子

clear;
a = [ 1 2 3 4 5 6 7 -1 -2 -3 -8];
max_a=
min_a=

run
max_a =
   7   7
min_a =
    -8    11

最值 第一个数 和 对于的位置 第二个数

ChaChing 发表于 2011-2-18 23:42

本帖最后由 ChaChing 于 2011-2-18 23:47 编辑

leeking30 发表于 2011-2-17 23:44 http://www.chinavib.com/static/image/common/back.gif
...max_a=...

不必如此吧!? 直接使用max/min即可
看看help或4F

a = [ 1 2 3 4 5 6 7 -1 -2 -3 -8];
=max(a); max_a=
=min(a); min_a=

leeking30 发表于 2011-2-20 21:44

回复 8 # ChaChing 的帖子

谢谢提示 原来没看过max min的HELP
页: [1]
查看完整版本: 求信号最大值最小值的一段matlab程序,有几句不懂,求助~~