MATLAB - 高斯消元法
在 MATLAB 中求解线性系统
Section titled “在 MATLAB 中求解线性系统”线性方程组是工程、物理、统计和金融领域无数问题的核心。虽然像高斯消元法(Gaussian Elimination)这样的方法对于理解理论至关重要,但 MATLAB 提供了高度优化且数值鲁棒的工具,使求解这些系统变得高效而直接。
问题:Ax = b
Section titled “问题:Ax = b”线性方程组通常以矩阵形式 Ax = b 表示,其中:
- A 是已知系数矩阵。
- x 是我们想找到的未知变量列向量。
- b 是已知结果列向量。
考虑以下系统:
2x₁ + 3x₂ = 8 4x₁ + 9x₂ = 20
以矩阵形式表示,则为:
A = [2 3; 4 9];b = [8; 20];x = [x₁; x₂];MATLAB 的方法:反斜杠运算符(\)
Section titled “MATLAB 的方法:反斜杠运算符(\)”在 MATLAB 中,求解 Ax = b 的主要、最有效且推荐的方法是使用反斜杠运算符(backslash operator),也称为 mldivide(矩阵左除)。
% 定义系数矩阵 A 和结果向量 bA = [2 3; 4 9];b = [8; 20];
% 使用反斜杠运算符求解 xx = A \ bMATLAB 执行此操作并返回解向量:
x = 2.0000 1.3333为什么要使用反斜杠? 它不仅仅是矩阵求逆的快捷方式。A \ b 是一个复杂的函数,它会分析矩阵 A 并自动选择最适合速度和准确性的算法(例如,对于方阵使用 LU 分解,对于非方系统使用 QR 分解)。它在数值上比计算 inv(A) * b 更稳定。
教学目的:理解高斯消元法
Section titled “教学目的:理解高斯消元法”为了理解解是如何找到的,我们可以学习高斯消元法(Gaussian Elimination)。目标是使用初等行运算将 增广矩阵 [A|b] 转换为上三角形式(行阶梯形),然后使用回代法求解变量。
步骤 1:构建增广矩阵
Section titled “步骤 1:构建增广矩阵”A = [2 3; 4 9];b = [8; 20];Ab = [A b]
Ab = 2 3 8 4 9 20步骤 2:前向消元
Section titled “步骤 2:前向消元”目标是在主对角线下方创建零。为了消除第二行中的 4,我们执行操作:Row2 = Row2 - 2 * Row1。
Ab(2, :) = Ab(2, :) - 2 * Ab(1, :)
Ab = 2 3 8 0 3 4步骤 3:回代
Section titled “步骤 3:回代”新系统为: 2x₁ + 3x₂ = 8 0x₁ + 3x₂ = 4
从第二个方程,我们可以很容易地求解 x₂: 3x₂ = 4 => x₂ = 4/3
将其代入第一个方程: 2x₁ + 3(4/3) = 8 => 2x₁ + 4 = 8 => 2x₁ = 4 => x₁ = 2
使用 rref 进行验证
Section titled “使用 rref 进行验证”rref(简化行阶梯形,Reduced Row Echelon Form)函数是一个出色的教学工具,它执行完整的高斯消元法以在左侧生成一个单位矩阵。然后,解将直接出现在最后一列中。
A = [2 3; 4 9];b = [8; 20];Ab = [A b];
R = rref(Ab)
R = 1.0000 0 2.0000 0 1.0000 1.3333这直接告诉我们 x₁ = 2 和 x₂ = 1.3333。
最佳实践与高级主题
Section titled “最佳实践与高级主题”- 始终首选
\:对于求解Ax = b,反斜杠运算符是 MATLAB 中的黄金标准。 - 检查解的存在性:一个系统可能无解或有无限多解。您可以通过比较系数矩阵
A和增广矩阵[A b]的秩来研究这一点。如果rank(A) < rank([A b]),则无解。如果rank(A) == rank([A b])但这小于变量的数量,则有无限多解。 - 大型稀疏系统:对于包含大量零(稀疏)的超大型矩阵系统,直接方法(如 “)可能过慢或占用过多内存。在这种情况下,请使用迭代求解器,如
pcg(预处理共轭梯度法)或gmres。