inverse distance weighting interpolation

╄→гoц情女王★ 提交于 2019-12-21 22:53:47

问题


I would like to compute a weight as reciprocal of a distance for something like 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;

However the distance can be 0 and I need to make the weight suitable for computation. If there is only one distance dist[i] is 0, I would like its corresponding value values[i] to be dominant. If there are several distances are 0, I would like to have their values to contribute equally to the result. Also even if dist[i] is not zero but very small, I would like to have a reasonable criterion to check it and deal with it. Any idea how to implement it?


回答1:


I don't see any way besides piecewise - you need a different function than reciprocal distance for small distances. The simplest thing would be to just chop off the top:

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

but you could replace that with something still decreasing if you want, like (MIN_DIST + dist[i])/2.




回答2:


If there is a zero-distance, there is no need of interpolation since you have a perfect match!

inside the for-loop:

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



回答3:


Come up with definitions of "dominant", "very small" and "deal with it". Then, translate them into code.



来源:https://stackoverflow.com/questions/2186301/inverse-distance-weighting-interpolation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!