2013-08-21 68 views
2

我有一個等距值的變量(假設爲values=0:1e-3:1)。我想從values中得到最接近均勻隨機值的值(其爲x=rand)。最小化凸隨機值

我可以做[value,vIdx]=min(abs(values-x)),這將是我可以做到的最簡單的最小化。 不幸的是,min函數不會利用數據中的一個屬性,即凸出的。我不需要搜索所有索引,因爲只要找到一個不比以前更少的索引,我就已經找到了全局最小值。說,我不想用matlab min函數替換一個循環,這個循環會比較慢,這取決於它離開我將要開始的值的距離。有許多方法可以用作黃金分割,但我不確定使用matlab fmincon會比方法min更快。

有沒有人有任何提示/想法如何獲得所需的值比使用描述的min方法更快?我有時間檢查時間表現,但如果有人知道先驗的好答案,請告訴我。

可能的應用:捕捉到最近的圖形數據

回答

3

由於您的點數是等距可以使用值x找到索引:

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

的想法是,你正在分裂的時間間隔[0, 1]分成numel(values)-1等分大小的區間。現在,通過將該數字乘以x,將間隔映射到[0, numel(values)-1],其中您的點將映射到整數值。現在使用round即可得到最接近的一個,並通過加1得到MATLAB需要的基於一維的索引。

+0

你可以更新你的公式到一個更通用的情況,如果值的邊界不是'[0,1]':'vIdx = 1 + round((x-values(1))*(numel(values )-1)/(值(結束) - 值(1)))'。並感謝你的答案,我想我習慣了迭代方法x( – Werner