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
版权声明:本文标题:克里金插值法的详细介绍。kriging。 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1703283110a445413.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论