python實現調和反距離空間插值法AIDW

1 簡介

AIDW 主要是針對 IDW 的缺點進行了改進,考慮了樣本點與預測點的位置,即方向和距離,具體見下圖:

在這里插入圖片描述

2 改進

IDW 公式:

在這里插入圖片描述

從IDW算法可看出,插值點的估算值僅與插值樣本距插值點的遠近相關,并未考慮樣本點的方位性(即樣本點被表示為各向同性)。

IDW 插值的基本假設是樣點在插值區呈均勻分布。但眾多情況下,樣點在各向分布并非均勻,甚至會出現樣點集中于某一方向的現象,違背了基本假設,其插值合理性就難被保證。針對 IDW 這一插值局限,作者提出了調和反距離權重(AIDW)插值算法。

AIDW 增加了可反映插值點與樣本點方位關系的調和權重系數 K,其基本假設是:距插值點近的樣本點,對其后方的樣本點有遮蔽效應,當兩樣本點與插值點的連線夾角 α < 360 ° / n \alpha<360°/n α<360°/n(n 為插值搜索鄰域內的樣點個數)時,遮蔽效應存在,當 α ≥ 360 ° / n \alpha≥360°/n α360°/n 時,遮蔽效應消失。在 AIDW 插值過程中,受遮蔽影響的樣本點,其插值權重將被削弱,削弱的程度取決于該樣點 K 值的大小。

按上述假設:

  • 圖1(a) 所示的 5 個樣點在方向上均勻地分布在插值點(中心點)周圍,任意兩樣點與插值點的連線夾角均大于或等于 72°(即α α ≥ 360 ° / 5 \alpha≥360°/5 α360°/5),即認為該5個樣點間相互不存在遮蔽效應;
  • 在圖1?中,任意兩樣點與插值點的連線夾角均小于72°,即認為距插值點的近樣點,對其后的樣點均具有遮蔽效應;在大多情況下,樣點在插值點周圍的分布應類似圖1(b),既不像圖1(a)均勻分布,也不像圖1?集中分布。
  • 圖1(b)中 Z 1 Z_1 Z1? Z 3 Z_3 Z3? 對任一樣點均無遮蔽, Z 2 Z_2 Z2? Z 4 Z_4 Z4? Z 5 Z_5 Z5? 有遮蔽, Z 4 Z_4 Z4? Z 5 Z_5 Z5? 也有遮蔽。

在這里插入圖片描述

將 IDW 傳統的算法思想與本文的基本假設結合,提出了 AIDW 算法:

在這里插入圖片描述

sin ? p θ \sin ^p\theta sinpθ的理解:

  • 從下圖(a)可以看出, Z i Z_i Zi? 逐漸移向 Z 0 Z_0 Z0? 的過程種, θ \theta θ 逐漸增大,當三者形成等腰三角形時, θ = 90 ° \theta=90° θ=90°,此時最大,即 sin ? p θ = 1 \sin^p\theta=1 sinpθ=1 Z j Z_j Zj? 不會對 Z i Z_i Zi? 產生遮蔽影響。
  • 從下圖(b)可以看出, Z i Z_i Zi? 保持與 Z 0 Z_0 Z0?相同的距離向 Z j Z_j Zj? 移動,當兩者位于同一條線時, Z i Z_i Zi?的影響完全被遮蔽,即 θ = 0 ° , sin ? p θ = 0 \theta=0°,\sin^p\theta=0 θ=,sinpθ=0

在這里插入圖片描述

計算樣例:

按AIDW算法,在圖3(b)中因 Z 1 Z_1 Z1? Z 6 Z_6 Z6? Z 3 Z_3 Z3? Z 7 Z_7 Z7? Z 8 Z_8 Z8? Z 4 Z_4 Z4? Z 7 Z_7 Z7?有遮蔽影響,這些受遮蔽樣點的插值權重被削減, Z 10 、 Z 11 、 Z 12 Z_{10}、Z_{11}、Z_{12} Z10?Z11?Z12?分別被 Z 4 Z_{4} Z4? Z 3 Z_3 Z3? Z 7 Z_7 Z7? 完全遮蔽,它們的插值權重降至為0。依照式(2)和式(3),最終插值點估算值的計算式為:

在這里插入圖片描述

  • Z Z Z 為插值點(中心點)估算值
  • Z 1 ? Z 9 Z_1-Z_9 Z1??Z9?為樣點觀測值
  • d 1 ? d 9 d_1-d_9 d1??d9?為樣點與插值點的歐氏距離
  • p 是冪指數
  • θ \theta θ 角如圖3(b)所示

在這里插入圖片描述

3 程序設計流程

AIDW 的插值程序可分為插值前準備和插值計算兩個過程:

  • 插值前準備主要是用于搜索合適的插值樣點,并為下一步的插值計算提供 d i d_i di? f i j f_{ij} fij? 值;
  • 插值計算過程主要是求算反映樣點遮蔽程度的 sin ? p θ i j \sin^p\theta_{ij} sinpθij? 值,并結合 d i 、 z i d_i、z_i di?zi? 值求算插值點的Z值。

在這里插入圖片描述

  • 插值搜索鄰域的大小以格點數(k×k)表示
  • m 是搜索鄰域內的樣點數
  • n 是插值所需的樣點數
  • d、f 分別為樣點與插值點的歐氏距離和兩樣點間的歐氏距離
  • i、j、u、v 均為插值樣點的序號
4 插值結果

在這里插入圖片描述

  • 對比 M 點(黑色框),IDW 出現孤立圓現象(站點集中于一側),AIDW 消除了孤立圓現象
  • 對比 C 點(紅色框),IDW 出現同心圓現象,AIDW 消除了同心圓現象
  • 對比 K 點(黃色框),兩者均出現孤立圓,通過分析,K 點周圍的站點分布均勻。

從上圖可以看出 AIDW 有效改進了 IDW 的缺點,同時又能保留 IDW 的插值思想,但 AIDW 需要計算 θ \theta θ ,因此在插值時間上要比 IDW 慢。

5 python 實現
from sklearn.neighbors import NearestNeighbors"""類函數"""
class AIDW:def __init__(self, x, y, m,p=2):self.m = m # 搜索鄰域內的樣點數self.nbrs = NearestNeighbors(n_neighbors=m, algorithm='ball_tree').fit(x)self.thresh = 360/mself.p = pself.y = yself.x = xdef fit(self, x_new):indices = self.nbrs.kneighbors(x_new, return_distance=False)x_sample = self.x[indices[0]]y_sample = self.y[indices[0]]x_ = x_sample-x_newzi = []ki = 1for i in range(1, self.m-1):for j in range(i):cos_ = np.sum(x_[i]*x_[j])/((np.sum(x_[i]**2)**(1/2))*(np.sum(x_[j]**2)**(1/2)))radian = np.arccos(cos_)angle = radian*180/np.pi if angle>=self.thresh:continueelse:ki*=np.sin(radian)**self.pdi = np.sum(x_[i]**2)**(1/2)zi.append(ki/(di**self.p))z = np.sum(np.array(zi)*y_sample[1:-1])/np.sum(zi)return z"""demo"""
import numpy as np
import matplotlib.pyplot as plt# create sample points with structured scores
X1 = 10 * np.random.rand(1000, 2) -5def func(x, y):return np.sin(x**2 + y**2) / (x**2 + y**2 )z1 = func(X1[:,0], X1[:,1])# 'train'
aidw = AIDW(X1, z1, m=15)# 'test'
spacing = np.linspace(-5., 5., 100)
X2 = np.meshgrid(spacing, spacing)
grid_shape = X2[0].shape
X2 = np.reshape(X2, (2, -1)).T
z2 = []
for x2 in X2:z2.append(aidw.fit(x2.reshape(1,-1)))
z2 = np.array(z2)# plot
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharex=True, sharey=True, figsize=(10,3))
ax1.contourf(spacing, spacing, func(*np.meshgrid(spacing, spacing)))
ax1.set_title('Ground truth')
ax2.scatter(X1[:,0], X1[:,1], c=z1, linewidths=0)
ax2.set_title('Samples')
ax3.contourf(spacing, spacing, z2.reshape(grid_shape))
ax3.set_title('Reconstruction')
plt.show()

在這里插入圖片描述

參考:
顧及方向遮蔽性的反距離權重插值法.李正泉.
An Adjusted Inverse Distance Weighted Spatial Interpolation Method.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160094.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

貝葉斯AB測試

AB測試是用來評估變更效果的有效方法&#xff0c;但很多時候會運行大量AB測試&#xff0c;如果能夠在測試中復用之前測試的結果&#xff0c;將有效提升AB測試的效率和有效性。原文: Bayesian AB Testing[1] 隨機實驗&#xff0c;又稱AB測試&#xff0c;是行業中評估因果效應的既…

自定義類型:結構體

1.結構體類型的聲明 1.1結構體的概念 結構是?些值的集合&#xff0c;這些值稱為成員變量。結構的每個成員可以是不同類型的變量。 1.2 結構的聲明 struct tag {member-list; }variable-list; 例如描述?個學?&#xff1a; struct Stu {char name[20];//名字int age;//年…

【Mysql】[Err] 1293 - Incorrect table definition;

基本情況 SQL文件描述 /* Navicat MySQL Data TransferSource Server : cm4生產-200 Source Server Version : 50725 Source Host : 192.168.1.200:3306 Source Database : db_wmsTarget Server Type : MYSQL Target Server Version : 50725 File…

vxe編輯保存表格

業務需求&#xff1a; 1、需要點擊編輯時&#xff0c;全部表格顯示編輯框&#xff0c;點擊保存&#xff0c;全部保存。 2、因為位置問題&#xff0c;產品經理把24小時分成了兩行&#xff0c;開發就得分兩個表格。列標題是寫死的&#xff0c;文字偏移也是寫死的&#xff0c;其他…

服務器主機安全的重要性及防護策略

在數字化時代&#xff0c;服務器主機安全是任何組織都必須高度重視的問題。無論是大型企業還是小型企業&#xff0c;無論是政府機構還是個人用戶&#xff0c;都需要確保其服務器主機的安全&#xff0c;以防止數據泄露、網絡攻擊和系統癱瘓等嚴重后果。 一、服務器主機安全的重…

__int128類型movaps指令crash

結論 在使用__int128時&#xff0c;如果__int128類型的內存起始地址不是按16字節對齊的話&#xff0c;有些匯編指令會拋出SIGSEGV使程序crash。 malloc在64位系統中申請的內存地址&#xff0c;是按16字節對齊的&#xff0c;但一般使用時經常會申請一塊內存自己切割使用&#…

Qt的一個無邊界窗口公共類

頭文件&#xff1a; #pragma once #include <QWidget>class CFrameLessWidgetBase :public QWidget { public:CFrameLessWidgetBase(QWidget* p nullptr);~CFrameLessWidgetBase() {}protected:bool nativeEvent(const QByteArray& eventType, void* message, long…

static和extern

1.extern extern 是?來聲明外部符號的&#xff0c;如果?個全局的符號在A?件中定義的&#xff0c;在B?件中想使?&#xff0c;就可以使? extern 進?聲明&#xff0c;然后使?。 即在一個源文件中想要使用另一個源文件&#xff0c;即可通過這個extern來聲明使用。 2.st…

未來制造業的新引擎:工業機器人控制解決方案

制造業正經歷著一場革命性的變革 在這個變革的浪潮中&#xff0c;工業機器人成為推動制造業高效生產的關鍵力量。然而&#xff0c;要發揮機器人的最大潛力&#xff0c;一個強大而智能的控制系統是必不可少的。在這個領域&#xff0c;新一代的工業機器人控制解決方案正嶄露頭角&…

學習MySQL先有全局觀,細說其發展歷程及特點

學習MySQL先有全局觀&#xff0c;細說其發展歷程及特點 一、枝繁葉茂的MySQL家族1. 發展歷程2. 分支版本 二、特點分析1. 常用數據庫2. 選型角度及場景 三、三大組成部分四、總結 相信很多同學在接觸編程之初&#xff0c;就接觸過數據庫&#xff0c;而對于其中關系型數據庫中的…

這樣寫postman實現參數化,阿里p8都直呼牛逼

什么時候會用到參數化 比如&#xff1a;一個模塊要用多組不同數據進行測試 驗證業務的正確性 Login模塊&#xff1a;正確的用戶名&#xff0c;密碼 成功&#xff1b;錯誤的用戶名&#xff0c;正確的密碼 失敗 postman實現參數化 在實際的接口測試中&#xff0c;部分參數…

你的關聯申請已發起,請等待企業微信的管理員確認你的申請

微信支付對接時&#xff0c;需要申請AppID,具體在下面的位置&#xff1a; 關聯AppID&#xff0c;發起申請時&#xff0c;會提示這么一句話&#xff1a; 此時需要登錄企業微信網頁版&#xff0c;使用注冊人的企業微信掃碼登錄進去&#xff0c;然后按照下面的步驟操作即可。 點擊…

iEnglish全國ETP大賽:教育游戲助力英語習得

“seesaw,abacus,sword,feather,frog,lion,mouse……”11月18日,經過3局的激烈較量,“以過客之名隊”的胡玲、黃長翔、林家慷率先晉級“玩轉英語,用iEnglish”第三屆全國ETP大賽的16強,在過去的周末中,還有TIK徘徊者隊、不負昭華隊、溫柔殺戮者隊先后晉級。據悉,根據活動規則,在…

電腦內存升級

ddr代兼容 自從DDR內存時代開啟之后&#xff0c;只要滿足內存的插槽規格相同(DDR3或DDR4或DDR5即為內存規格)這一條件&#xff0c;不同品牌、不同頻率以及不同容量的茶品都可以一起使用&#xff0c;除了品牌和容量的影響之外&#xff0c;不同頻率的搭配可能會造成性能方面的影…

面試官:什么是三色標記

程序員的公眾號&#xff1a;源1024&#xff0c;獲取更多資料&#xff0c;無加密無套路&#xff01; 最近整理了一波電子書籍資料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虛擬機》&#xff0c;《重構改善既有代碼設計》&#xff0c;《MySQL高性能-第3版》&…

git提交時會將target也提交

有時候大家在提交git時發現會將編譯文件target也提交上去&#xff0c;這種情況有以下幾種情況 情況1&#xff1a;項目沒有設置.gitignore 情況2&#xff1a;設置了.gitignore但是依然會提交。 第一種&#xff1a;添加.gitignore&#xff0c;并在文件中添加需要忽略的東西。 …

redis分布式鎖的學習記錄

核心性質 獨占性&#xff1a;對于同一把鎖&#xff0c;同一時刻只能被一個加鎖方獨占 健壯性&#xff1a;不能產生死鎖。如果有一個因為宕機無法主動解鎖&#xff0c;鎖也應該被正常加載 對稱性&#xff1a;加成和解鎖的使用方必須為同一個身份&#xff0c;不允許被非方釋放 高…

HCIA-實驗命令基礎學習:

視頻學習&#xff1a; 第一部分&#xff1a;基礎學習。 19——子網掩碼。 27——防火墻配置&#xff1a; 32——企業級路由器配置&#xff1a; 基礎實驗完成&#xff1a;&#xff08;完成以下目錄對應的實驗&#xff0c;第一部分基礎實驗就完成。&#xff09; 方法&#xff…

C //習題 8.13 寫一個用矩形法求定積分的通用函數,分別求

C程序設計 &#xff08;第四版&#xff09; 譚浩強 習題8.13 習題 8.13 寫一個用矩形法求定積分的通用函數&#xff0c;分別求 ∫ 0 1 s i n x d x &#xff0c; ∫ 0 1 c o s x d x &#xff0c; ∫ 0 1 e x d x \int_{0}^{1}sinx\ dx&#xff0c;\ \ \int_{0}^{1}cosx\ …

ILI9225 TFT顯示屏16位并口方式驅動

所用屏及資料如后圖&#xff1a; ILI9225&#xff0c;176*220&#xff0c;8位或16位并口屏&#xff0c;IM0接GND&#xff0c;電源及背光接3.3v 主控&#xff1a;CH32V307驅動&#xff08;庫文件和STM32基本一樣&#xff09; 一、源碼 ILI9225.c #include "ILI9225.h&quo…