C++简单实现反距离插值

转自:https://blog.csdn.net/zzrrhhh/article/details/78385452?locationNum=8&fps=1

反距离插值C++实现

/*

测试数据
70 140 115.4
115 115 123.1
150 150 113.8
110 170 110.5
90 190 107.2
180 210 131.78


110 150 
所求值应为114.946
*/


#include <iostream>
#include <cmath>
using namespace std;


struct point
{
double x;
double y;
double z;
double weight; //权重
double distance; //距离插值点的距离
};


const int r = 1; //反距离的幂值(0.5到3均可)


int n = 0; //点的个数
point p[50]; //存放离散点
point q; //插值点


void Distance() //计算未知点到所有点的距离
{
for(int i = 0; i < n; ++i)
p[i].distance = sqrt((q.x-p[i].x)*(q.x-p[i].x) + (q.y-p[i].y) *(q.y-p[i].y));
}




void Weight() //计算权重
{
double f = 0;
int i = 0;
for(i = 0; i < n; ++i)
f += pow(1.0 / p[i].distance, r);
for(i = 0; i < n; ++i)
p[i].weight = pow(1.0 / p[i].distance, r) / f;
}




void Getval() //得到插值点的权重
{
q.weight = 0;
for(int i = 0; i < n; ++i) 
q.z += p[i].weight * p[i].z;
}




int main()
{
cout << "请输入已知点的个数" << endl;
cin >> n;
cout << "请输入已知点的坐标" << endl;
for(int i = 0; i < n; ++i)
cin >> p[i].x >> p[i].y >> p[i].z;
cout << "输入目标点的坐标" << endl;
cin >> q.x >> q.y;
Distance();
Weight();
Getval();
cout << q.z << endl;
return 0;
} --------------------- 本文来自 zzrrhhh 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zzrrhhh/article/details/78385452?utm_source=copy

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 距离权重插值(inverse distance weighting interpolation)是一种常用的空间插值,它根据插值点与已知点之间的距离来计算权重,距离越近的已知点权重越大。 实现距离权重插值的流程如下: 1. 准备已知点数据集:首先,需要准备已知点的数据集,包括每个已知点的坐标和相应的数值。 2. 确定插值点:根据需要插值的区域,确定插值点的坐标。 3. 计算距离和权重:对于每个插值点,分别计算其与已知点之间的距离,并根据距离计算权重。常用的距离计算方有欧氏距离和曼哈顿距离,权重计算可以使用不同的公式,例如w = 1/d,其中d为距离。 4. 根据权重进行插值:根据插值点与已知点的距离权重,对已知点的数值进行加权平均,得到插值点的估计值。插值公式一般为:Z(x,y) = ∑(Zi * wi) / ∑wi,其中Z(x,y)为插值点的估计值,Zi为已知点的数值,wi为权重。 5. 输出插值结果:输出插值点的估计值,可以以矩阵或栅格的形式呈现。 需要注意的是,距离权重插值对于已知点周围的区域插值效果会较好,但在远离已知点的区域可能会产生较大的误差。同时,插值的结果也受到已知点的数量和分布情况的影响。因此,在应用距离权重插值时需要对其适用范围和局限性进行合理的评估。 ### 回答2: 距离权重插值(Inverse Distance Weighting,IDW)是一种空间插值,通过对于待插值点附近每个已知点的距离进行加权,进而根据距离近远确定权重,从而得到待插值点的估计值。实现距离权重插值的基本流程如下: 1. 读取已知点集及其对应的属性值。已知点可以是具有已知属性值的离散点集,可以根据现有地理数据或测量数据获取。 2. 定义待插值点。根据实际情况,确定需要进行插值得到属性值的待插值点。 3. 计算待插值点与已知点之间的距离。可以采用欧氏距离、曼哈顿距离等进行计算。 4. 根据距离计算权重。一般选择距离的倒数作为权重,即根据距离远近的不同确定权重大小,距离越近的已知点权重越大,距离越远的已知点权重越小。 5. 根据权重进行加权平均计算。将待插值点的属性值估计为已知点属性值的加权平均,权重即为距离的倒数。 6. 输出插值结果。得到待插值点的属性值估计结果,并根据实际需要进行后续处理和分析。 需要注意的是,在实际实现中,还需要对权重进行归一化处理,以确保插值结果具有一定的可信度和合理性。此外,距离权重插值也可以进行改进和优化,例如引入最小二乘、考虑不同距离阈值等,以提高插值结果的准确性和可靠性。 ### 回答3: 距离权重插值是一种空间插值,用于在离散数据点之间进行数据的估计。它的主要思想是根据每个数据点与目标位置之间的距离来确定权重,距离越近的点权重越大。 距离权重插值实现流程可以概括为以下几个步骤: 1. 在目标位置周围选择一组已知数据点作为插值范围。 2. 计算目标位置与每个数据点之间的距离。 3. 根据距离计算每个数据点的权重。一种常用的权重计算方是使用距离的倒数作为权重,即权重等于距离的倒数。 4. 使用权重对数据点进行加权求和,得到对目标位置的估计值。加权求和公式为:估计值 = Σ(权重 * 数据值)/ Σ权重。 5. 输出估计值作为目标位置的插值结果。 需要注意的是,距离权重插值对数据点的选择和权重计算都有多种不同的实现方式。在实际应用中,根据具体数据的特点,可以选择合适的数据点选择方和权重计算方,以获得更准确的插值结果。 总结起来,距离权重插值实现流程包括数据点的选择、距离计算、权重计算、加权求和和输出估计值等步骤。通过这些步骤,可以在离散数据点之间插值得到目标位置的估计值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值