如何在Matlab数组中以数字方式搜索所有最接近零的值?

时间:2015-04-13 14:20:43

标签: arrays matlab

我有一些带有多个“零”的正函数的数值数据,但是,这些零中没有一个是零。我想提取所有这些零值的位置,并想知道最好的方法是什么。这是一个类似于我想要解决的人为设想的例子,其中包括值的示意图,相邻差异以及这些差异的迹象:

a = [ 0.0062 ; 0.0041 ; 0.0021 ; 0.0003 ; 0.0015 ; 0.0031 ; 0.0045 ; 0.0059 ; 0.0062 ; 0.0041 ; 0.0021 ; 0.0003 ; 0.0015 ; 0.0031 ; 0.0045 ; 0.0059 ]/0.0062 ;
d = diff(a) ;

r = -3/2:0.5:length(a)/2-4/2 ;

close all ;
hold on ;

plot( r, a ) ;
plot( r(1:length(d)), d ) ;
plot( r(1:length(d)), sign(d) ) ;

产生:

zeros

基于我所做的,我可以迭代数组并找到差异数组的符号从-1变为1的所有位置。两个问题:

  1. 有没有比for-loop更好的方法呢?
  2. 有没有更好的方法来搜索所有的miniumums?

2 个答案:

答案 0 :(得分:4)

找到差异从正变为负的值

indices = find(diff(sign(diff(a)))==2)+1;

在你的例子中,这给出了

indices =
     4
    12

根据您想要达到的目标,您可以直接找到最接近零的值,如下所示:

b = abs(a);
indices = find(b==min(b))

也给出了

indices =
     4
    12

请注意,这将找到最接近零的值的索引,除非多个值之间存在联系,在这种情况下,它会返回几个索引。

答案 1 :(得分:0)

如何采取your_data,执行1./your_data,然后使用findpeaks。有关findpeaks的更多选项,请参阅文档,包括为最低峰值找到阈值的可能性。它应该有所帮助。