克里金插值法的详细介绍。kriging。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
kriging 插值作为地统计学中的一种插值方法由南非采矿工程师D.G.Krige于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).ne.0.or.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)<hmid(k))then
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))).and.i3.ne.locat(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。