半变异函数及半变异图绘制

基本原理:

克里金法用半变异函数测定空间相关要素,这里的要素是指对空间依赖的要素或者称为空间自相关要素,半变异的计算公式为:

考虑“区间分组”的平均半变异计算公式

按照方向进行区间分组的方法常用的是径向扇区,ArcGIS的地统计分析模块则用格网象元进行归类。

算法的内容:

计算距离

计算协方差

网格化变异函数矩阵

沿一定方向搜索

参数:采样点,Lag(步长),方向

  • 克里金法是一个占用大量处理器资源的过程。执行速度取决于输入数据集中点的数量和搜索窗口的大小。

  • 预测栅格可选输出方差中的低值指示预测值的高置信度。值较高,可能表明需要使用更多的数据点。

  • 泛克里金法类型假定有结构组件存在,且局部趋势将随位置的变化而变化。

  • 高级参数可控制克里金法所使用的半变异函数。步长大小的默认值初始设置为默认输出像元大小。对于主要范围偏基台块金来说,如果未进行任何设置,将会内部计算默认值。

  • 预测栅格的可选输出方差在每个输出栅格像元中都含有克里金法方差。假设克里金误差是正态分布的,则像元中实际 z 值等于预测栅格值加上或减去预测栅格中值的平方根 2 倍的可能性为 95.5%。

### 绘制克里金插值法的变异函数曲线图 要绘制克里金插值法中的变异函数曲线图,可以利用 `scipy` 和 `numpy` 库来计算并拟合经验变异函数。以下是完整的 Python 示例代码: #### 示例代码 ```python import numpy as np import matplotlib.pyplot as plt from scipy.spatial.distance import pdist, squareform def empirical_variogram(points, values, max_distance=None, num_lags=10): """ 计算经验变异函数。 参数: points (np.ndarray): 数据点坐标数组,形状为(n_samples, n_dimensions)。 values (np.ndarray): 对应的数据值数组,形状为(n_samples,)。 max_distance (float): 变异函数的最大距离,默认为最远距离的一。 num_lags (int): 将最大距离划分为多少个区间。 返回: distances (list): 各区间的平均距离。 semivariances (list): 各区间的方差值。 """ # 计算两点间距离矩阵 distance_matrix = squareform(pdist(points)) value_diffs_squared = squareform(pdist(values.reshape(-1, 1)) ** 2) if not max_distance: max_distance = np.max(distance_matrix) / 2 lag_size = max_distance / num_lags lags = [(i * lag_size, (i + 1) * lag_size) for i in range(num_lags)] distances = [] semivariances = [] for lower, upper in lags: mask = (distance_matrix >= lower) & (distance_matrix < upper) count = np.sum(mask) if count > 0: semi_variance = 0.5 * np.mean(value_diffs_squared[mask]) avg_distance = np.mean(distance_matrix[mask]) distances.append(avg_distance) semivarianges.append(semi_variance) return distances, semivariances # 示例数据 points = np.array([[0, 0], [1, 0], [0, 1], [1, 1]]) values = np.array([1, 2, 3, 4]) max_distance = 1.5 num_lags = 10 distances, semivariances = empirical_variogram(points, values, max_distance=max_distance, num_lags=num_lags) plt.figure(figsize=(8, 6)) plt.plot(distances, semivariances, 'o-', label="Empirical Semivariogram") plt.title("Semivariogram Curve", fontsize=16) plt.xlabel("Distance", fontsize=14) plt.ylabel("Semivariance", fontsize=14) plt.legend(fontsize=12) plt.grid(True) plt.show() ``` 以上代码实现了以下功能: - 使用 `pdist` 和 `squareform` 方法计算两两样本之间的欧几里得距离以及对应的平方差异[^2]。 - 定义了一个分箱策略,将距离范围分成若干区间,并计算每个区间的平均距离及其对应的方差值[^4]。 - 利用 Matplotlib 展示经验变异函数曲线图。 #### 结果解释 通过上述方法得到的经验变异函数能够反映量随空间化的趋势。如果需要进一步拟合理论模型(如球状模型、高斯模型等),可以通过最小二乘法或其他优化算法完成[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值