matlab最小二乘法拟合 正规方程
时间: 2024-06-29 16:00:33 浏览: 222
在MATLAB中,最小二乘法是一种常用的数据拟合方法,用于估计模型参数,使得实际数据点与模型预测值之间的误差平方和最小。当我们有一个线性模型,如y = a + bx(其中y是因变量,x是自变量),最小二乘法可以帮助我们找到最佳的a和b值。
"正规方程"是求解这种最小二乘问题的一种经典数学方法。对于上述线性模型,正规方程的形式为:
[a, b] = inv(X'*X) * X' * y
这里,X是一个m x 2矩阵,其中每一行代表一个数据点(x_i, y_i),'表示转置,inv()表示矩阵的逆,*表示矩阵乘法。简单来说,正规方程将模型参数a和b表示为输入数据的线性组合。
具体步骤如下:
1. 创建输入矩阵X,第一列是x值,第二列是全1的列向量(为了加截距项a)。
2. 计算X的转置X'和X'X。
3. 如果X'X满秩,计算其逆,并乘以X'y得到参数向量[a, b]。
相关问题
最小二乘法拟合逼近代码
### 最小二乘法拟合逼近实现代码示例
#### Python 实现最小二乘法多项式拟合
Python 提供了多种库来实现最小二乘法拟合,其中 `numpy` 和 `scipy` 是最常用的两个库之一。下面是一个使用 `numpy.polyfit()` 函数进行一维数据的多项式拟合的例子。
```python
import numpy as np
import matplotlib.pyplot as plt
# 假设有一组实验数据 (x, y)
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([0, 0.8, 0.9, 0.1, -0.8, -1])
# 使用 numpy 的 polyfit 方法来进行二次多项式的拟合
degree = 2
coefficients = np.polyfit(x, y, degree)
# 创建一个多项式对象以便后续计算
polynomial = np.poly1d(coefficients)
# 计算拟合后的 y 值
x_fit = np.linspace(min(x), max(x))
y_fit = polynomial(x_fit)
# 绘制原始数据点以及拟合曲线
plt.scatter(x, y, label='Data Points')
plt.plot(x_fit, y_fit, color='red', label=f'Fitted Curve ({degree} Degree)')
plt.legend()
plt.show()
print(f"Fitted Polynomial Coefficients: {coefficients}")
```
这段代码展示了如何利用 `numpy.polyfit()` 来找到最佳拟合给定点集的一条抛物线,并绘制出这条曲线与原有点的关系图[^2]。
对于更高维度或多变量的情况,则可以考虑使用 `scipy.optimize.curve_fit()` 或者构建设计矩阵并手动解决正规方程\[X^TX\beta=X^Ty\][^1]。
#### MATLAB 实现最小二乘法多项式拟合
MATLAB 中同样有内置的功能可以直接调用来完成这项任务。以下是基于 `polyfit()` 函数的一个简单例子:
```matlab
% 输入样本数据
x = [0; 1; 2; 3; 4; 5];
y = [0; 0.8; 0.9; 0.1; -0.8; -1];
% 设定要拟合的次数 n
n = 2;
% 执行多项式拟合操作
[p,S,mu] = polyfit(x, y, n);
% 输出拟合系数 p 及其他统计信息 S 和 mu
disp('Polynomial coefficients:');
disp(p);
disp('Statistics structure:');
disp(S);
disp('Centering and scaling parameters:');
disp(mu);
% 预测新位置上的响应值
xi = linspace(min(x),max(x));
yi = polyval(p, xi, [], mu);
figure;
plot(xi, yi,'r-', 'LineWidth', 2); hold on;
scatter(x, y, 'filled'); grid minor;
title(['Degree ', num2str(n), ' Polynomial Fit']);
xlabel('Independent Variable');
ylabel('Dependent Variable');
legend({'Fitted curve','Sample data'},...
'Location','Best');
hold off;
```
上述脚本不仅完成了对输入数据的二次项拟合,还包含了图形化的展示部分,方便直观地查看拟合效果[^3]。
加权最小二乘法拟合直线原理
### 加权最小二乘法拟合直线的原理
#### 定义与目标
加权最小二乘法(Weighted Least Squares, WLS)是一种改进版的最小二乘法,旨在处理不同观测值具有不同精度的情况。其核心思想是在计算残差平方和时引入权重因子,使得更可靠的测量数据对最终结果的影响更大。
#### 数学表达式
设有一组观测数据 \((x_i,y_i)\),其中 \(i=1,\ldots,n\) 表示第 i 个样本点;\(w_i>0\) 则表示对应位置上的权重系数。为了找到最佳拟合直线 y=ax+b ,需满足如下条件:
\[
S(a,b)=\sum_{i=1}^{n}{w_i(y_i-(ax_i+b))^2}
\]
该方程表明,在所有可能的选择中选取能使上述带权误差平方总和达到极小化的参数 a 和 b 的组合作为最优解[^3]。
#### 权重的意义
权重反映了各个观察值之间的相对重要程度或可信度差异。当某次测量被认为更加精确时,则赋予较大的 wi 值;反之亦然。理想情况下,这些权重应该基于先验知识关于各次独立重复试验的标准误来设定。
#### 参数估计过程
具体到实际操作层面,可以通过解析求导的方式得到未知数a、b的具体数值。即令偏微分为零从而获得正规方程组并加以解决:
\[
\begin{cases}
\dfrac{\partial S}{\partial a}= -2\displaystyle\sum w_ix_i[y_i-(ax_i+b)] = 0\\ \\
\dfrac{\partial S}{\partial b}= -2\displaystyle\sum w_i[y_i-(ax_i+b)] = 0
\end{cases}
\]
进一步整理可以得出闭形式解决方案[^4]:
```matlab
function [a,b]=linear_wls(x,y,w)
% 计算加权平均值
mean_x=sum(w.*x)/sum(w);
mean_y=sum(w.*y)/sum(w);
% 计算斜率a
numerator=sum(w.*(x-mean_x).*(y-mean_y));
denominator=sum(w.*(x-mean_x).^2);
a=numerator/denominator;
% 计算截距b
b=mean_y-a*mean_x;
end
```
此函数实现了利用给定的数据集及其相应权重来进行简单线性回归分析的功能。
阅读全文
相关推荐















