赞
踩
反距离加权IDW
理论:每个采样点对插值结果的影响随距离增加而减弱,距目标点近的样点赋予的权重较大。
应用:利用已知点数据计算需要的未知点数据,该理论以距离为参考,如果未知数据对于距离的耦合不高,可能不适用。
在IDW插值之前,得事先获取一个离散点子集,用于计算插值的权重;
比如取坐标点A1(0,2); A2(10,8); A3(20,10);A4(30,16);A5(40,25);A6(50,28).
插值步骤:
①计算未知点到所有点的距离;
② 计算每个点的权重:权重是距离的倒数的函数。
计算所需的数据,比如A11(1,a11),A12(2,a12)等等
#!/usr/bin/python3 def IDW( src_data, dst_data): #搜索最近点 floating = [] distance = [] dMinIndex = 0 dMin = 0 d = 0 i_index = 0 for i in range(0, 6): d = abs(src_data[i][0] - dst_data) #print("d = ", d) if (i == 0): dMin = d dMinIndex = src_data[i][0] i_index = i else: if (d < dMin): dMin = d dMinIndex = src_data[i][0] i_index = i if (dMin == 0): #完全匹配 dst_data = src_data[i_index][1] print("all in 1", dMinIndex ,"data:" ,dst_data) return dst_data #距离平方倒数 floating.append(src_data[i_index][1]) distance.append(1.0/dMin) floatingIndex = 1 for j in range(0, 6): if(j != i_index): d = abs(src_data[j][0] - dst_data) floating.append(src_data[j][1]) distance.append(1.0/d) floatingIndex = floatingIndex + 1 #累加 distanceSum = 0 for n in range(0, floatingIndex): distanceSum = distanceSum + distance[n] #权重 if(distanceSum == 0): #完全匹配 dst_data = src_data[i_index][1] print("all in 2", dMinIndex ,"data:" ,dst_data) else: floatingDst = 0 speedDst = 0 for i in range(0, floatingIndex): distance[i] = distance[i] / distanceSum if (distance[i] != 0): floatingDst = floatingDst + floating[i] * distance[i] else: print("IDW: 0") dst_data = floatingDst return dst_data number = [] number.append([0, 2]) number.append([10, 8]) number.append([20, 10]) number.append([30, 16]) number.append([40, 25]) number.append([50, 28]) num2 = [] for i in range(0, 51): num2.append(i) for i in range(0, 51): num2[i] = IDW(number, num2[i]) for i in range(0, 51): print("cal ", i, " data:", num2[i]) input("按下 enter 键后退出。")
打印
all in 1 0 data: 2
all in 1 10 data: 8
all in 1 20 data: 10
all in 1 30 data: 16
all in 1 40 data: 25
all in 1 50 data: 28
cal 0 data: 2
cal 1 data: 4.1625722105839476
cal 2 data: 5.721906846316942
cal 3 data: 6.869896029454955
cal 4 data: 7.7173512428846385
cal 5 data: 8.329157175398631
cal 6 data: 8.740222088507196
cal 7 data: 8.96100368424269
cal 8 data: 8.973908680381335
cal 9 data: 8.713698806343224
cal 10 data: 8
cal 11 data: 8.910305720132655
cal 12 data: 9.60778859527121
cal 13 data: 10.167058794250753
cal 14 data: 10.616850179388843
cal 15 data: 10.965189873417721
cal 16 data: 11.205857504928192
cal 17 data: 11.31666939906999
cal 18 data: 11.248967330078859
cal 19 data: 10.897028586954129
cal 20 data: 10
cal 21 data: 11.132639147385538
cal 22 data: 12.006830309498397
cal 23 data: 12.750355516137276
cal 24 data: 13.414519056261344
cal 25 data: 14.021739130434783
cal 26 data: 14.580036297640655
cal 27 data: 15.087009004404493
cal 28 data: 15.52785485592316
cal 29 data: 15.864696432419723
cal 30 data: 16
cal 31 data: 16.18999897195644
cal 32 data: 16.583552384528726
cal 33 data: 17.105395006160325
cal 34 data: 17.73134328358209
cal 35 data: 18.45886075949367
cal 36 data: 19.300012371644193
cal 37 data: 20.28321917283733
cal 38 data: 21.463649007459857
cal 39 data: 22.951972208040708
cal 40 data: 25
cal 41 data: 23.23278045371821
cal 42 data: 22.35959190500084
cal 43 data: 21.976169464806013
cal 44 data: 21.922870740112685
cal 45 data: 22.135535307517088
cal 46 data: 22.599123633236417
cal 47 data: 23.333552499095546
cal 48 data: 24.394501060119005
cal 49 data: 25.887094525454405
cal 50 data: 28
从上看,可以算出想要的点的数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。