声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3647|回复: 6

[编程技巧] 如何求一维数据的局部极小(或极大)值

[复制链接]
发表于 2007-5-11 13:45 | 显示全部楼层 |阅读模式

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

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

x
求教:用matlab如何实现一组一维数据的局部极小(或极大)值及其对应横坐标的位置或定义域的范围,谢谢!
回复
分享到:

使用道具 举报

发表于 2007-5-11 13:56 | 显示全部楼层
help min
hlep max
发表于 2007-5-11 15:06 | 显示全部楼层
[a,b]=max(y(m:n));
a是值 b是位置
好象是这样
发表于 2007-5-11 21:38 | 显示全部楼层


这个问题之前刚讨论过,以后请多搜索一下论坛

  1. d = diff(x);
  2. n = length(d);
  3. d1 = d(1:n-1);
  4. d2 = d(2:n);
  5. indmin = find(d1.*d2<0 & d1<0)+1;
  6. indmax = find(d1.*d2<0 & d1>0)+1;
  7. if any(d==0)
  8.   
  9.   imax = [];
  10.   imin = [];
  11.   
  12.   bad = (d==0);
  13.   dd = diff([0 bad 0]);
  14.   debs = find(dd == 1);
  15.   fins = find(dd == -1);
  16.   if debs(1) == 1
  17.     if length(debs) > 1
  18.       debs = debs(2:end);
  19.       fins = fins(2:end);
  20.     else
  21.       debs = [];
  22.       fins = [];
  23.     end
  24.   end
  25.   if length(debs) > 0
  26.     if fins(end) == m
  27.       if length(debs) > 1
  28.         debs = debs(1:(end-1));
  29.         fins = fins(1:(end-1));
  30.       else
  31.         debs = [];
  32.         fins = [];
  33.       end      
  34.     end
  35.   end
  36.   lc = length(debs);
  37.   if lc > 0
  38.     for k = 1:lc
  39.       if d(debs(k)-1) > 0
  40.         if d(fins(k)) < 0
  41.           imax = [imax round((fins(k)+debs(k))/2)];
  42.         end
  43.       else
  44.         if d(fins(k)) > 0
  45.           imin = [imin round((fins(k)+debs(k))/2)];
  46.         end
  47.       end
  48.     end
  49.   end
  50.   
  51.   if length(imax) > 0
  52.     indmax = sort([indmax imax]);
  53.   end
  54.   if length(imin) > 0
  55.     indmin = sort([indmin imin]);
  56.   end
  57.   
  58. end  
复制代码

评分

1

查看全部评分

 楼主| 发表于 2007-5-12 10:51 | 显示全部楼层
谢谢,我搜索了,感觉这个是针对函数形式的
发表于 2007-5-12 10:54 | 显示全部楼层
原帖由 newsgae 于 2007-5-12 10:51 发表
谢谢,我搜索了,感觉这个是针对函数形式的


你的意思是对于数据不成立?一维数据是连续函数的离散表示,所以应该不存在这个问题
 楼主| 发表于 2007-5-14 23:29 | 显示全部楼层
好的,谢谢 。
我尝试了另外2个函数, imregionmax,imregionmin, 能够找到极值对应的位置,
谢谢啦。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-29 05:13 , Processed in 0.080317 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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