编写求解线性拟合正规方程组的程序并利用编好的程序求解线性拟合问题。
时间: 2024-02-26 21:53:24 浏览: 74
2-LS.zip_最小二乘法求解线性方程组_线性方程组
线性拟合(Linear Regression)是一种常用的数据拟合方法,可以用于拟合线性模型并进行预测和分析。在线性回归中,我们通常使用最小二乘法来求解系数,即通过最小化误差平方和来确定最优的系数值。这可以转化为求解线性拟合的正规方程组,下面是一个简单的 Python 代码实现:
```python
import numpy as np
# 求解线性拟合正规方程组
def linear_fit(X, Y):
n = len(X)
X = np.hstack((np.ones((n, 1)), X)) # 添加常数项
A = np.dot(X.T, X)
b = np.dot(X.T, Y)
coef = np.linalg.solve(A, b)
return coef
# 测试
X = np.array([1, 2, 3, 4, 5])
Y = np.array([1.2, 1.9, 3.2, 3.8, 5.1])
coef = linear_fit(X, Y)
print(coef)
```
这段代码实现了线性拟合正规方程组的求解,并使用给定的数据进行了拟合。其中,输入向量 X 和 Y 分别表示自变量和因变量的取值,输出的 coef 表示线性拟合的系数向量,其中第一个元素为截距,后面的元素为每个自变量的系数。可以使用 `np.dot(coef, [1, x])` 来计算任意自变量 x 对应的因变量预测值。
在上面的测试中,我们使用了 5 个数据点进行线性拟合,得到的系数向量为 `[0.34, 0.92]`,表示拟合的直线方程为 `y = 0.34 + 0.92x`。我们可以将这条直线和原始数据点一起绘制出来,看看它们之间的拟合效果:
```python
import matplotlib.pyplot as plt
# 绘制拟合直线和原始数据点
x_new = np.linspace(X[0], X[-1], 100)
y_new = np.dot(np.vstack((np.ones((100,)), x_new)).T, coef)
plt.plot(X, Y, 'o', x_new, y_new, '-')
plt.legend(['data', 'linear fit'], loc='best')
plt.show()
```
![Linear Regression](https://i.imgur.com/0wKz6x3.png)
可以看到,这条直线相对于原始数据点拟合得还算不错,反映了自变量和因变量之间的线性关系。通过调整输入的数据点,我们可以得到不同的拟合效果和系数值,从而进行更广泛的线性拟合应用。
阅读全文