最小二乘法线性拟合从矩阵伪逆到 polyfit 的 3 种 MATLAB 代码实现解析在工程与科学计算中我们常常需要从离散数据点中寻找隐藏的规律。最小二乘法作为最经典的线性回归方法通过最小化误差平方和来寻找最佳拟合直线。本文将深入探讨 MATLAB 中三种不同的实现方式代数法、伪逆法以及内置函数 polyfit揭示它们背后的数学等价性。1. 最小二乘法的数学本质给定 N 个数据点 (xᵢ, yᵢ)假设它们满足线性关系 y kx b我们需要找到最优参数 k 和 b 使得拟合直线与数据点的偏差最小。定义残差平方和f Σ(yᵢ - kxᵢ - b)²通过令 ∂f/∂k 0 和 ∂f/∂b 0可以得到经典的正规方程代数法推导结果k (NΣxᵢyᵢ - ΣxᵢΣyᵢ) / (NΣxᵢ² - (Σxᵢ)²) b (Σyᵢ - kΣxᵢ) / N这种直接基于代数运算的方法虽然直观但当数据量增大时计算效率较低。更优雅的解决方案是采用矩阵表示法。2. 矩阵视角下的伪逆解法将线性方程组表示为矩阵形式 Y XK其中Y [y₁ y₂ ... yₙ]ᵀ X [x₁ 1; x₂ 1; ... ; xₙ 1] K [k; b]当 X 不是方阵时通过左乘 Xᵀ 得到正规方程 XᵀXK XᵀY。此时解可以表示为伪逆公式K (XᵀX)⁻¹XᵀY这个公式具有深刻的数学意义——它实际上是计算矩阵 X 的 Moore-Penrose 伪逆。在 MATLAB 中我们可以直接实现这一计算% 伪逆法实现 X [x, ones(length(x),1)]; % 构造设计矩阵 K inv(X*X)*X*y; % 计算伪逆解 k K(1); b K(2); % 提取斜率和截距注意实际计算时应避免直接求逆推荐使用K (X*X)\X*y以提高数值稳定性3. polyfit 函数的内部机制MATLAB 提供的 polyfit 函数看似简单实则封装了强大的计算引擎。当指定多项式阶数为 1 时它本质上就是在执行线性最小二乘拟合p polyfit(x, y, 1); % 线性拟合 k p(1); b p(2); % 获取参数深入分析 polyfit 的源代码可通过edit polyfit查看可以发现它采用了QR 分解这种数值稳定的算法来求解最小二乘问题而非直接计算伪逆。具体步骤包括对设计矩阵 X 进行 QR 分解X QR解三角方程组 RK QᵀY返回系数向量 K这种方法的优势在于避免了直接计算 XᵀX 可能带来的数值不稳定性。4. 三种方法的等价性验证我们通过具体数据验证三种方法的等价性。考虑以下数据点x [0.1, 0.3, 0.4, 0.75, 0.9]; y [1.7805, 2.2285, 2.3941, 3.2226, 3.5697];实现对比表方法代码实现斜率(k)截距(b)代数法k(sum(y.*x)-N*mean(y)*mean(x))/(sum(x.^2)-N*mean(x)^2)2.24111.5409伪逆法Kinv(X*X)*X*y2.24111.5409polyfitppolyfit(x,y,1)2.24111.5409计算结果完全一致验证了三种方法在数学上的等价性。不过在实际应用中polyfit 因其数值稳定性和易用性成为首选方案。5. 进阶讨论数值稳定性与扩展应用当处理大规模或病态数据时不同算法的数值特性显得尤为重要条件数分析设计矩阵 X 的条件数 cond(X) 直接影响解的稳定性正则化技术当 XᵀX 接近奇异时可引入岭回归 (ridge regression)加权最小二乘对不同的数据点赋予不同权重对于非线性拟合MATLAB 提供了 lsqcurvefit 等更强大的工具% 非线性拟合示例 fun (K,x) K(1)*exp(K(2)*x); % 指数拟合模型 K0 [1,1]; % 初始猜测 K lsqcurvefit(fun, K0, x, y); % 拟合参数理解最小二乘法的矩阵本质有助于我们灵活应对各种复杂的数据建模场景。无论是简单的线性关系还是复杂的非线性模式最小二乘思想都为我们提供了强大的分析工具。