c# 最小二乘法拟合直线
时间: 2023-08-29 17:07:05 浏览: 98
使用 C# 实现最小二乘法拟合直线可以分为以下步骤:
1. 定义数据点数组,其中 x 变量为自变量,y 变量为因变量,例如:
```csharp
double[] x = { 1, 2, 3, 4, 5 };
double[] y = { 1.2, 2.3, 3.1, 4.0, 5.2 };
```
2. 计算 x 和 y 的平均值,即:
```csharp
double xMean = x.Average();
double yMean = y.Average();
```
3. 计算 x 与 y 的协方差和 x 的方差,即:
```csharp
double cov = x.Zip(y, (xi, yi) => (xi - xMean) * (yi - yMean)).Sum();
double var = x.Sum(xi => Math.Pow(xi - xMean, 2));
```
4. 计算回归系数 b 和截距 a,即:
```csharp
double b = cov / var;
double a = yMean - b * xMean;
```
5. 输出结果:
```csharp
Console.WriteLine("拟合直线为 y = {0}x + {1}", b, a);
```
完整代码如下:
```csharp
double[] x = { 1, 2, 3, 4, 5 };
double[] y = { 1.2, 2.3, 3.1, 4.0, 5.2 };
double xMean = x.Average();
double yMean = y.Average();
double cov = x.Zip(y, (xi, yi) => (xi - xMean) * (yi - yMean)).Sum();
double var = x.Sum(xi => Math.Pow(xi - xMean, 2));
double b = cov / var;
double a = yMean - b * xMean;
Console.WriteLine("拟合直线为 y = {0}x + {1}", b, a);
```