首先,特别感谢我们的地统计学老师王培法老师,南邮的小黄同学、同班的小陈同学以及CSDN对本次项目完成的大力支持~
题主是新手,在学习克里金系列方法的时候,发现大多数的克里金方法都是通过matlab来实现的,网上很少有用C#来进行实现,所以题主突发奇想,使用C#将该方法实现。
因为是小白的缘故,许多方法可能非常“笨”,希望各位大神斧正。
前排警告⚠⚠⚠⚠⚠⚠⚠⚠!!!!!
C#的实现非常复杂,慎入!
本次内容的数据来自于《地统计学概论》
基本数据如下图:
其中0号点是待估计的点,其余点是控制点。
好了,开始正文,直接上代码!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 泛克吕格方法
{
public partial class Form1 : Form
{
PointF[] PF = new PointF[6];
double[,] f = new double[5, 2];
public Form1()
{
InitializeComponent();
}
}
以上是一些基本代码,没啥好说的,PF是以float为内容的点数组,f是等会要用到的5*2的矩阵,这个矩阵是构成泛克里金方程组的一部分。
public class Matrix
{
double[,] X;
//矩阵的乘法
public double[,] Matrix_Muti(double [,]p ,double [,]q)
{
int m = p.GetLength(0);//获取p矩阵的行数
int n = q.GetLength(1);//获取q矩阵的列数
int t = q.GetLength(0);
double[,] T = new double[m,n];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < t; k++)
{
T[i, j] += p[i, k] * q[k,j];
}
}
}
return T;
}
//二阶矩阵的转置
public double[,] Maxtrix_TransForm_2(double[,] p)
{
double[,] Temp = p;
int m = p.GetLength(0);//得到p矩阵的行
int n = p.GetLength(1);//得到p矩阵的列
double[,] Result = new double[n, m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
Result[i,j] = Temp[j, i];
}
}
return