admin 管理员组

文章数量: 1086019


2023年12月23日发(作者:linux的正确发音有几种)

kriging 插值作为地统计学中的一种插值方法由南非采矿工程师于1951年首次提出,是一种求最优、线形、无偏的空间内插方法。在充分考虑观测资料之间的相互关系后,对每一个观测资料赋予一定的权重系数,加权平均得到估计值。

这里介绍普通Kriging插值方法的基本步骤:1.该方法中衡量各点之间空间相关程度的测度是半方差,其计算公式为:

h为各点之间距离,n 是由h 分开的成对样本点的数量,z 是点的属性值。

2.在不同距离的半方差值都计算出来后,绘制半方差图,横轴代表距离,纵轴代表半方差。半方差图中有三个参数nugget(表示距离为零时的半方差),sill(表示基本达到恒定的半方差值),range(表示一个值域范围,在该范围内半方差随距离增加,超过该范围,半方差值趋于恒定)。利用做出的半方差图找出与之拟合的最好的理论变异函数模型(这是关键所在),可用于拟合的模型包括高斯模型、线性模型、球状模型、指数模型、圆形模型。

----球状模型,球面模型空间相关随距离的增长逐渐衰减,当距离大于球面半径后,空间相关消失。

3.用拟合的模型计算出三个参数。例如球状模型中nugget为c0,range为a,sill为c。

4.利用拟合的模型估算未知点的属性值,方程为:

,z0为估计值,zx是已知点的值,wx为权重,s是用来估算未知点的已知点的数目。

假如用三个点来估算,则有

这样权重就可以求出,然后估算未知点。

(上述内容根据《地理信息系统导论》(Kang-tsung Chang著;陈健飞等译,科学出版社,2003)第十三章内容进行总结,除球状模型公式外其余公式皆来自此书)

下面是本人自己编写的利用海洋中断面上观测站点的实测温度值来估算未观测处的温度的Fortran程序,利用距离未知点最近的五个观测点来估算未知点的温度,选用模型为球状模型。

do ii=1,nx

if(tgrid(ii,1)==0.)then

do i=1,dsite(ii)

!首先寻找距离最近的五个已知点位置

do j=1,nh

if(d(mm(ii),j)..j==1)then

hmie(j)=d(mm(ii),j)-dgrid(i)

else

hmie(j)=9999

end if

hmid(j)=abs(hmie(j))

end do

do j=1,nh

do k=j,nh

if(hmid(j)

else

m1=hmid(j)

hmid(j)=hmid(k)

hmid(k)=m1

end if

end do

end do

do j=1,5

do k=1,nh

if(abs(hmie(k))==hmid(j))then

locat(j)=k

end if

end do

end do

do j=1,4

do k=j+1,5

if(locat(j)==locat(k))then

do i3=1,nh

if(abs(hmie(i3))==abs(hmie(locat(j))).(j))then

locat(j)=i3

exit

end if

enddo

endif

enddo

enddo

!然后求各点间距离,并求半方差

do j=1,5

do k=1,5

hij(j,k)=abs(d(mm(ii),locat(j))-d(mm(ii),locat(k)))/1000.

end do

end do

do j=1,5

hio(j)=sqrt(hmid(j)**2+(abs(latgrid(ii)-lonlat(mm(ii),2))*llat)**2

$ +(abs(longrid(ii)-lonlat(mm(ii),1))*(1.112e5*

$ cos(0.017*(latgrid(ii)+lonlat(mm(ii),2))/2)))**2)/1000.

end do

do j=1,5

do k=1,5

if(hij(j,k).eq.0.)then

rleft(j,k)=0.

else

rleft(j,k)=sill*(1.5*hij(j,k)/range-0.5*hij(j,k)**3/range**3)

end if

if(hio(j).eq.0.)then

rrig(1,j)=0.

else

rrig(1,j)=sill*(1.5*hio(j)/range-0.5*hio(j)**3/range**3)

end if

end do

end do

rrig(1,6)=1.

rleft(6,6)=0.

do j=1,5

rleft(6,j)=1.

rleft(j,6)=1.

end do

try=rleft

call brinv(rleft,nnn,lll,is,js)

ty1=matmul(try,rleft)

!求权重

wq=matmul(rrig,rleft)

!插值所有格点上t,s

do j=1,5

tgrid(ii,i)=tgrid(ii,i)+wq(1,j)*t(mm(ii),locat(j))

sgrid(ii,i)=sgrid(ii,i)+wq(1,j)*s(mm(ii),locat(j))

end do

enddo

endif

enddo


本文标签: 模型 距离 方差 方法 估算