42 double incrementTolerance = m_lagIncrement / 2.;
48 if(m_angleTolerance != 90.0)
50 dirMin = m_angleDirection - m_angleTolerance;
51 dirMax = m_angleDirection + m_angleTolerance;
55 double incrementCount = 0.;
58 std::vector<double> np, gam, dis;
59 np.resize(m_nLags, 0.);
60 gam.resize(m_nLags, 0.);
61 dis.resize(m_nLags, 0.);
64 for(std::size_t lag = 0; lag < m_nLags; ++ lag)
66 incrementCount += m_lagIncrement;
68 double minDistance = incrementCount - incrementTolerance;
69 double maxDistance = incrementCount + incrementTolerance;
72 for(std::size_t line = 0; line < m_dataMatrix.size1() - 1; ++line)
74 for(std::size_t column = 0; column < m_dataMatrix.size2() - 1; ++column)
76 if(m_angleTolerance == 90.0)
78 if(line < column && m_dataMatrix(line, column) > 0. && m_dataMatrix(line, column) <= incrementTolerance && lag == 0)
80 np[lag] = np[lag] + 1.;
81 dis[lag] = dis[lag] + m_dataMatrix(line, column);
82 gam[lag] = gam[lag] + ((m_dataMatrix(line, line) - m_dataMatrix(column, column)) * (m_dataMatrix(line, line) - m_dataMatrix(column, column)));
84 else if(line < column && m_dataMatrix(line, column) > minDistance && m_dataMatrix(line, column) <= maxDistance && lag != 0)
86 np[lag] = np[lag] + 1.;
87 dis[lag] = dis[lag] + m_dataMatrix(line, column);
88 gam[lag] = gam[lag] + ((m_dataMatrix(line, line) - m_dataMatrix(column, column)) * (m_dataMatrix(line, line) - m_dataMatrix(column, column)));
93 if(line < column && m_dataMatrix(line, column) > 0. && m_dataMatrix(line, column) <= incrementTolerance && m_dataMatrix(column, line) >= dirMin && m_dataMatrix(column, line) <= dirMax && lag == 0)
95 np[lag] = np[lag] + 1.;
96 dis[lag] = dis[lag] + m_dataMatrix(line, column);
97 gam[lag] = gam[lag] + ((m_dataMatrix(line, line) - m_dataMatrix(column, column)) * (m_dataMatrix(line, line) - m_dataMatrix(column, column)));
99 else if(line < column && m_dataMatrix(line, column) > minDistance && m_dataMatrix(line, column) <= maxDistance && m_dataMatrix(column, line) >= dirMin && m_dataMatrix(column, line) <= dirMax && lag !=0)
101 np[lag] = np[lag] + 1.;
102 dis[lag] = dis[lag] + m_dataMatrix(line, column);
103 gam[lag] = gam[lag] + ((m_dataMatrix(line, line) - m_dataMatrix(column, column)) * (m_dataMatrix(line, line) - m_dataMatrix(column, column)));
111 boost::numeric::ublas::matrix<double> matrix(m_nLags, 2);
113 for(std::size_t lag = 0; lag < m_nLags; ++ lag)
117 dis[lag] = dis[lag] / np[lag];
118 gam[lag] = (gam[lag] / np[lag]) * .5;
121 matrix(lag,0) = dis[lag];
122 matrix(lag,1) = gam[lag];
GeostatisticalMethodSemivariogram()
Default constructor.
virtual boost::numeric::ublas::matrix< double > calculate()
Function to calculate the geostatistical information.
This file contains a class that represents the geostatistical semivariogram method.
virtual ~GeostatisticalMethodSemivariogram()
Virtual destructor.
Geostatistics is used for modelling spatial data. It provides accurate and reliable estimations of ph...