| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1276 人关注过本帖
标题:关于kriging(克立金)算法的问题~~
只看楼主 加入收藏
virgoboy2004
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-11-23
收藏
 问题点数:0 回复次数:0 
关于kriging(克立金)算法的问题~~

希望呢感有哪位大人帮我解释一下这个段代码~
template<class T, class ForwardIterator>
class TKriging : public TInterpolater<ForwardIterator>
{
public:
TKriging(const ForwardIterator first, const ForwardIterator last, double dSemivariance) : m_dSemivariance(dSemivariance)
{
m_nSize = 0;
ForwardIterator start = first;
while(start != last) {
++m_nSize;
++start;
}

m_matA.SetDimension(m_nSize, m_nSize);

for(int j=0; j<m_nSize; j++) {
for(int i=0; i<m_nSize; i++) {
if(i == m_nSize-1 || j == m_nSize-1) {
m_matA(i, j) = 1;
if(i == m_nSize-1 && j == m_nSize-1)
m_matA(i, j) = 0;
continue;
}
m_matA(i, j) = ::GetDistance(first, i, j) * dSemivariance;
}
}
int nD;
LUDecompose(m_matA, m_Permutation, nD);
}
double GetInterpolatedZ(double xpos, double ypos, ForwardIterator first, ForwardIterator last) throw(InterpolaterException)
{
std::vector<double> vecB(m_nSize);
for(int i=0; i<m_nSize; i++) {
double dist = ::GetDistance(xpos, ypos, first, i);
vecB[i] = dist * m_dSemivariance;
}
vecB[m_nSize-1] = 1;

LUBackSub(m_matA, m_Permutation, vecB);

double z = 0;
for(i=0; i<m_nSize-1; i++) {
double inputz = (*(first+i)).z;
z += vecB[i] * inputz;
}
if(z < 0)
z = 0;
return z;
}
private:
TMatrix<T> m_matA;
vector<int> m_Permutation;
int m_nSize;
double m_dSemivariance;
};

typedef TKriging<double, Point3D*> Kriging;

搜索更多相关主题的帖子: 克立 kriging 算法 start class 
2007-07-04 09:51
快速回复:关于kriging(克立金)算法的问题~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019221 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved