2

dist=[1:100]; % distance

% conc. is concentration of size 1x100

conc=1  1   1   1   1   1   1   1   1   1   1   1   1   1   1   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.990000000000000   0.980000000000000   0.970000000000000   0.950000000000000   0.920000000000000   0.890000000000000   0.850000000000000   0.820000000000000   0.790000000000000   0.750000000000000   0.710000000000000   0.680000000000000   0.640000000000000   0.600000000000000   0.560000000000000   0.520000000000000   0.480000000000000   0.440000000000000   0.400000000000000   0.360000000000000   0.310000000000000   0.270000000000000   0.230000000000000   0.180000000000000   0.140000000000000   0.100000000000000   0.0700000000000000  0.0400000000000000  0.0200000000000000  0.0100000000000000  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

我想在conc. 我将使用该索引来查找dist这些索引。需要注意的一点是,conc在大小为 100 的向量中,值以非线性关系从 1 减少到 0。我知道我们可以使用find(),但我不确定它如何用于我想做的事情。

如果可能的话,我希望能够在不使用循环的情况下有效地做到这一点。这是因为我有很多集中注意力的向量,而且我的代码中已经有很多循环。谢谢。

4

1 回答 1

3

一个简单的解决方案是

[x, i] = min(abs(conc - 0.16));

之后i将保存索引。这比较了conc向量的每个元素,这有点浪费,因为数据是有序的,您可以进行二进制搜索,但是在 matlab 级别实现的二进制搜索对于一百个元素的向量可能会更慢。

于 2012-03-28T19:35:57.043 回答