反距离加权插值

时间:2010-02-02 17:45:23

标签: c++ algorithm interpolation

我想计算一个权重作为inverse distance weighting interpolation之类的距离的倒数。

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]不是零但非常小,我也希望有一个合理的标准来检查并处理它。知道如何实现它?

3 个答案:

答案 0 :(得分:5)

如果存在零距离,则无需插值,因为您有完美的匹配!

在for循环中

if(dist[i] == 0.) return values[i];

答案 1 :(得分:4)

除了分段之外我没有看到任何方法 - 你需要一个不同的功能,而不是小距离的倒数距离。最简单的事情就是砍掉顶部:

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

但是如果你愿意的话,可以将其替换为仍在减少的内容,例如(MIN_DIST + dist[i])/2

答案 2 :(得分:3)

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