[kriging](一)网上下载的kriging克里金的C++程序的初步调试

笔者在网上下载了一份克里金的C++程序,水平有限,正在逐步地调试中。

初步

克里金法现在在许多软件都已经有集成了,据笔者所知:

  • arcgis : 看过有的arcgis培训视频里面简略介绍了里面的插值方法,有克里金。
  • surfer :笔者用过这个,效果很好。
  • gocad :听说有
  • landmark &jason :研究生时候用的专业的石油物探软件,里面有克里金法,万恶的开始。
  • pykrig : python实现的克里金
  • gstl : 一个地质统计学的C++的库,里面有克里金方法。
  • gslib : 一个Fortran的地质统计学的库,里面有克里金方法。
  • SGeMs :这个比较出名,应该是斯坦福大学的开源的软件,但是年代很久远了。
  • dace : 貌似是各matlab的工具箱,里面有克里金方法。
    以上的库基本可以满足日常的需求了,但是,笔者目前需要从事一些深入地研究,将克里金改用在其他领域,就需要从代码层面上了解了。

网上下的一段代码

从网上下载了一份代码,同样年代久远,使用MFC界面,内核里面插值方法有反距离权及克里金法。感觉上大多数想学克里金的人都会下载到这样一份不知所云的代码,每个文件都不知道在干什么。
在这里插入图片描述
如果想要完整编译该代码,VS2017必须完整地添加古老的MFC功能。在visual studio installer中添加如下功能,但是笔者并未这样做。
在这里插入图片描述
经过简略的分析
代码中,Kriking.h和InverseDist.h既包含了头又包含了实现的方法,同时继承自Interpolater.h
在这里插入图片描述
在这里插入图片描述
反距离权插值的思想为克里金的基础,所以先实现基础的反距离权
新建工程,然后在工程中把下载下来的代码中的和反距离权插值法的内容添加进项目工程
在这里插入图片描述
主函数main.cpp内容如下:

#include "InputReader.h"
#include "InverseDist.h"
#include <Eigen/Dense>
//#include "Kriging.h"

using namespace Eigen;
int main()
{
	InputReader m_ir;
	int nDiameter = 200;
	vector<double> vecZs;
	Interpolater* pInterpolater = NULL;
	m_ir.Read("./testdata.txt"); 

	vector<Point3D>& input = const_cast<vector<Point3D>&>(m_ir.Get3DPoints());
	
	for (int i = 0; i < input.size(); i++)
	{
		cout <<i<<" "<< input[i].x <<" " << input[i].y << " " << input[i].z << endl;
	}

	pInterpolater = new InverseDist(200, 4);
	//pInterpolater = new Kriging(input.begin(), input.end(), 4);
	int nRadius = nDiameter / 2;
	for (int i = 0; i < nDiameter; i++) {
		for (int j = 0; j < nDiameter; j++) {
			double z = pInterpolater->GetInterpolatedZ(j - nRadius, i - nRadius, &input[0], &input[input.size()-1]);
			vecZs.push_back(z);
		}
	}
	delete pInterpolater;

	/*转换到Eigen矩阵方便在cmd中查看输出的插值后的z**/
	MatrixXd m_matrix = Map<Matrix<double, 1,4000,RowMajor>>(vecZs.data());
	cout << "After Inverse Dist Interpolate:\n"<<m_matrix.transpose() << endl;

	return 0;
}

运行结果

数据txt文件读取结果
在这里插入图片描述
原始数据可视化在这里插入图片描述
反距离权插值后的z值,该程序初始化的距离为radius=200,距离的p次方位反比权,p初始值为8,这里使用了下载程序中的示例数据。
在这里插入图片描述
按道理,应该还需要实现插值后的每个z值点对应的x和y,就能够查看反距离插值后的三维数据,这个留待以后完成。

### 回答1: Matlab Dace是一种基于Kriging插值算法的Matlab函数库。Kriging插值算法是一种基于统计学的插值方法,用于在已知数据点之间进行估计。在空间或时间上缺少测量数据时,可以使用这种方法来计算未知点位置的数据。 Dace库提供了基于Kriging的插值算法的实现,使得用户可以在Matlab环境中轻松地进行插值,并可以对估计误差进行评估。Dace库提供了多种不同的Kriging插值模型,包括全局常数、线性、指数和球形函数。它还允许用户定义自定义模型。 另外,Dace库还提供了组合Kriging(co-Kriging)功能,这是一种使用多个插值模型估计多个变量之间相互作用的方法。它还支持带噪声的数据点和不同数据点之间的空间相关性。 总之,Matlab Dace是一个方便而强大的插值算法库,可用于处理具有空间相关性的数据。它提供了多种不同的插值模型和评估方法,使用户能够选择适合自己特定应用领域的最佳模型。 ### 回答2: Matlab dace是一种快速插值方法,适用于数据分析、建模和优化问题。该方法使用克里格插值进行预测,同时通过高斯过程对克里格插值的结果进行修正和优化,使其更加适用于小样本数据。Matlab dace还包含了一些常用的插值函数,如线性插值、三次样条插值等,可根据需要选择合适的插值方法进行处理。 Matlab dace的主要优点在于它可以处理具有高噪声、不规则分布的数据,在小样本情况下也可以有效地进行预测。此外,Matlab dace在估计函数形式时也不需要提前设定函数的形状,大大降低了建模的难度。 Matlab dace最常见的应用场景包括机器学习、信号处理和工程优化等领域。例如,在机器学习中,Matlab dace可以用来处理具有一定噪声和波动的数据,从而提高机器学习模型的准确性。在信号处理中,Matlab dace可用于对信号进行插值和平滑处理。在工程优化中,Matlab dace可以对设计参数进行优化,以提高系统性能。 总之,Matlab dace是一个功能强大、灵活的插值方法,可以用于处理各种类型的数据分析、建模和优化问题。它的应用场景非常广泛,可在多个领域产生巨大的价值。 ### 回答3: Matlab DACE是一种基于模型的最优化方法,用于在有限样本集上进行多目标优化和响应面建模。DACE代表Distorted Approximation via Conditional Expectation,即基于条件期望的扭曲逼近方法。该方法可以解决非线性多目标优化问题,同时提供了在有限样本情况下建立代理模型的有效方法。 DACE方法的优点有很多,首先是其对于高维优化问题的解决能力较强,并且能够在非线性和不光滑的函数下快速解决最优化问题。其次,DACE方法可以在优化过程中考虑样本点之间的相关性和局部性,并能够根据已知样本点进行模型迭代,具有较高的工程应用价值。特别是在现代工业设计、工程优化和高维系统中,DACE方法已经被广泛应用。 在Matlab中,DACE方法是使用dacefit函数进行建模,并使用fmincon函数完成多目标优化问题的求解。同时,Matlab还提供了丰富的可视化和分析功能,可以帮助用户更好地理解和使用DACE方法。 总之,Matlab DACE是一种高效的多目标优化方法,适用于非线性和高维函数的优化和建模。在现代工业设计、工程优化和高维系统中,DACE方法具有很大的应用前景。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值