3

我想将权重计算为距离的倒数,例如反距离加权插值

double wgt = 0, wgt_tmp, result = 0;
for (int i = 0; i < num; i++) {
   wgt_tmp = 1.0/dist[i];
   wgt += wgt_tmp;
   result += wgt_tmp * values[i];
}
results /= wgt;

但是距离可以0,我需要使权重适合计算。如果只有一个距离dist[i]0我希望它的对应值values[i]主导地位。如果有几个距离0,我希望它们的值对结果做出同样的贡献。此外,即使dist[i]不是零而是非常小,我也希望有一个合理的标准来检查和处理它。知道如何实施吗?

4

3 回答 3

6

如果有一个零距离,就不需要插值,因为你有一个完美的匹配!

在for循环内:

if(dist[i] == 0.) return values[i];
于 2011-06-08T13:05:33.183 回答
5

除了分段之外,我看不到任何方法-对于小距离,您需要一个与倒数距离不同的函数。最简单的事情就是把顶部切掉:

modified_dist[i] = dist[i] < MIN_DIST ? MIN_DIST : dist[i]

但如果你愿意,你可以用仍在减少的东西来代替它,比如(MIN_DIST + dist[i])/2.

于 2010-02-02T17:51:02.977 回答
4

想出“占主导地位”、“非常小”和“处理它”的定义。然后,将它们翻译成代码。

于 2010-02-02T17:50:43.277 回答