前面人工智能导论(2)——基本算法程序编写——回归介绍了Python中使用线性拟合工具,我就想在C#中能不能做一个线性拟合工具,方便我们进行线性拟合。

界面布局和基础准备

我们简单的绘制一个窗体,其中可以进行选择数据,显示原始数据以及进行数据拟合。

其中的存放数据的容器使用的是DataGripView,其他的应该都很熟悉。

之前在设计串口示波器的时候,我们引入了MathNet数学库,本期我们也是利用MathNet库中的方法进行数据拟合。


using MathNet.Numerics.LinearAlgebra;
using MathNet.Numerics.LinearAlgebra.Double;
using MathNet.Numerics.LinearRegression;

导入我们的MathNet相关库(在NuGet中获取)

除此之外我们还需要安装其他的几个库,也在NuGet管理库中添加。

CsvHelper,EPPlus

这两个库可以帮助我们解析CSV文件和EXCEL文件。

功能编写


private void DataChoose_Click(object sender, EventArgs e)
{
  using (OpenFileDialog openFileDialog = new OpenFileDialog())
  {
     openFileDialog.Filter = "CSV Files (*.csv)|*.csv|Excel Files (*.xls;*.xlsx)|*.xls;*.xlsx|All Files (*.*)|*.*";
     DialogResult result = openFileDialog.ShowDialog();
     if (result == DialogResult.OK)
     {
         string selectedFilePath = openFileDialog.FileName;
         LoadDataFromSelectedFile(selectedFilePath);
     }
  }
}

当我们点击按钮的时候,唤醒资源管理器,选择我们的CSV文件或者Excel文件,并且将文件路劲作为变量传递给LoadDataFromSelectedFile函数。

		

当我们点击数据显示按钮的时候,先检查我们的XY轴是否已经选择,如果没有选择我们则进行报错,并退出函数。

如果选择没有问题的话,我们就先检测数据是否有异常(这里应该添加更多的判断逻辑)之后根据我们选择的XY轴来将数据打印到Chart上作为原始数据。

当我们点击拟合按钮,我们从波形图中获取各个点的数据保存到列表中,之后调用数学库中的线性拟合函数,将XY作为参数传入。

效果展示

regression 的两个成员item1和item2分别是截距和斜率,根据我们的截距和斜率来画出我们的线性拟合曲线。


嘉立创PCB

还没有评论,抢个沙发!