2

我有一个等距值的变量(假设values=0:1e-3:1)。values我想获取最接近均匀随机值(假设x=rand)的值及其对应索引。

我可以做[value,vIdx]=min(abs(values-x)),这将是我能做的最简单的最小化。不幸的是,该min函数不会利用数据中的一个属性,即 convex。我不需要搜索所有索引,因为只要找到一个不小于前一个的索引,我就找到了全局最小值。就是说,我不想用 matlab min 函数代替一个循环,该循环会根据它与我将开始的值的距离而变慢。有很多方法可以使用,作为黄金分割,但我不确定使用 matlab fmincon 是否会比该min方法更快。

有没有人有任何提示/想法如何比使用所描述的min方法更快地获得所需的值?有时间我会检查时间表现,但如果有人先验地知道一个好的答案,请告诉我。

可能的应用:捕捉到最近的图形数据

4

1 回答 1

3

由于您的点是等距的,您可以使用该值x来查找索引:

vIdx = 1+round(x*(numel(values)-1));

这个想法是您将间隔[0, 1]分成numel(values)-1大小相等的间隔。现在通过乘以x该数字,您可以将间隔[0, numel(values)-1]映射到您的点映射到整数值的位置。现在使用round你得到最接近的一个,并通过添加 1 你得到 MATLAB 需要的基于一的索引。

于 2013-08-21T05:22:14.533 回答