声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2752|回复: 8

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

[复制链接]
发表于 2011-2-14 19:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

function [spmax, spmin, flag]= 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是用来干嘛的?
我是程序菜鸟,求助高手们~~
回复
分享到:

使用道具 举报

发表于 2011-2-14 20:52 | 显示全部楼层
matlab? 感觉像fortran!?
求最大值最小值, matlab不是有现成函数可用!
 楼主| 发表于 2011-2-15 19:03 | 显示全部楼层
回复 2 # Happy99 的帖子

的确有现成,但是这个能算出最大值和最小值所在位置的,这其实是一个m文件里的,在别的程序段中需要调用这个函数
发表于 2011-2-15 21:45 | 显示全部楼层

[C,I] = 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列对吗?我觉得这边调用语句的时候是相当于循环语句那样调用的对吗?[C,I] = max(...) 能实现这个功能吗?
发表于 2011-2-17 00:16 | 显示全部楼层
回复 5 # 水莫 的帖子

真的没太多时间细看LZ的程序, 但我想试试看不就知道!?
发表于 2011-2-17 23:44 | 显示全部楼层
回复 3 # 水莫 的帖子

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

run
max_a =
     7     7
min_a =
    -8    11

最值 第一个数 和 对于的位置 第二个数
发表于 2011-2-18 23:42 | 显示全部楼层
本帖最后由 ChaChing 于 2011-2-18 23:47 编辑
leeking30 发表于 2011-2-17 23:44
...max_a=[max(a),find(a==max(a))]...

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

a = [ 1 2 3 4 5 6 7 -1 -2 -3 -8];
[c,i]=max(a); max_a=[c,i]
[c,i]=min(a); min_a=[c,i]
发表于 2011-2-20 21:44 | 显示全部楼层
回复 8 # ChaChing 的帖子

谢谢提示 原来没看过max min的HELP
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-12 03:41 , Processed in 0.209616 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表