LU 分解
一、直观理解:把消元过程“存成两个矩阵”
LU 分解把方阵写成 (或带主元 ),其中 为单位下三角(含消元乘数), 为上三角。一旦分解完成,求解 只需:
- 解 (前代);
- 解 (回代)。
这相当于把高斯消去的工作缓存起来:右端项 改变时,不必重新消元,特别适合多个右端项、牛顿法中反复解线性系统等场景。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 同一 多个 ;需要直接法因子;中小稠密系统;作为更复杂求解器的组件。 |
| 核心优点 | 分解一次、多次回代;与高斯消去数学等价;可扩展为 Cholesky(对称正定)等。 |
| 局限与缺点 | 分解仍 ;需主元保证稳定;稀疏填充问题仍在;奇异或近奇异时失败。 |
三、核心原理
无主元时,高斯消元乘数放入 的下三角, 为消元后的上三角。带部分主元时存在置换矩阵 使
MATLAB 中 [L,U,P]=lu(A) 返回该分解。
对对称正定矩阵,优先 (Cholesky),更快更稳。
复杂度
- 分解:;
- 每次前代+回代:。
四、实践要点
- 优先
lu+ 两次三角解,或直接A\b(内部往往做分解); - 检查
U对角元是否接近 0; - SPD 时用
chol; - 不要手写
inv(L)*...,用正斜杠/反斜杠解三角系统。
五、MATLAB 示例
%% LU 分解求解多个右端项
A = [3 2 -1;
2 -2 4;
-1 0.5 -1];
[L, U, P] = lu(A);
B = [1 0; -2 1; 0 3]; % 两个右端项
X = zeros(size(A,1), size(B,2));
for k = 1:size(B,2)
y = L \ (P * B(:,k)); % 前代
X(:,k) = U \ y; % 回代
end
X2 = A \ B;
fprintf("LU 解与 A\\B 差异 = %.3e\n", norm(X-X2,"fro"));
disp("L ="); disp(L);
disp("U ="); disp(U);
disp("P*A - L*U 残差 ="); disp(norm(P*A - L*U, "fro"));
Cholesky 对照:
A = [4 1 1; 1 3 0; 1 0 2]; % SPD
R = chol(A); % A = R'*R
b = [1; 2; 3];
x = R \ (R' \ b);
fprintf("Cholesky 解 = [%s]\n", num2str(x', '%.4f '));
fprintf("残差 = %.3e\n", norm(A*x-b));
六、如何解释结果
说明是否使用主元、分解残差 、求解残差、多右端项时的效率收益。若对角元衰减很快,提示可能近乎奇异。
七、常见误区
1. 忘记置换
写 A≈LU 而实际是 PA=LU,验证会失败。
2. 对非方/奇异矩阵强行 LU
应先检查尺寸与秩。
3. SPD 不用 Cholesky 却用一般 LU
浪费结构信息。
4. 每次新 都重新 lu
失去分解的主要优势。
附:建模流程中的落地清单(LU 分解)
在竞赛或课程论文中,仅写出定义式往往不够。建议按下列顺序组织材料,既能保证可复现,也便于评委快速抓住贡献。
1. 问题对齐
先用两三句话说明:题目中的哪个子问题对应本方法,输入是什么,输出要支持什么决策。避免“因为常见所以使用”。若存在更简单的替代方法,应说明为何不够用。
2. 符号与单位
列出核心符号表,强调单位一致。许多错误并非算法失败,而是日/年、米/千米、概率/百分比混用。对无量纲参数,说明取值来源(估计、文献、情景设定)。
3. 关键公式回顾
在 后,求解变为两次三角系统。同一系数矩阵多个右端项时,分解一次即可。
4. 计算与实现要点
- 固定随机种子(若涉及随机);
- 记录中间量以便手算核对小例子;
- 用极限情形或解析特例做冒烟测试;
- 保存主要输入输出到表格,便于敏感性分析复用。
5. 补充 MATLAB 片段
[L,U,P]=lu(magic(4)); b=(1:4)'; x=U\(L\(P*b)); fprintf('||Ax-b||=%.3e\n',norm(magic(4)*x-b));
6. 结果报告模板
建议至少报告:是否带主元、分解残差、每个右端项的求解残差、耗时对比(相对反复 A\b 全重算)。
7. 何时不该使用
把 lu 用于明显对称正定问题却拒绝 Cholesky;或每次新的 都重新分解却声称高效。
完成以上清单后,再进入“小结”中的一句话金句,通常论文的方法段与验证段就会扎实许多。
附:结果解读示例与常见审稿问题
结果解读示例
假设已经得到主要数值输出。写作时应把数字翻译回题目语言,例如:
- “在基准参数下指标为 A;当关键参数变化 ±10% 时,指标波动约 B%,方案排序未变。”
- “算法在 R 次独立重复中有 S 次收敛到同一结构解,说明结论对初始化不敏感。”
- “与简化基线相比,本方法在验证集误差降低 Δ,但计算时间增加,权衡后仍采用。”
如果只有表格没有句子,评委很难判断你是否真正理解结果。
参数与数据的最小敏感性
即使篇幅有限,也建议给出一个小表:选取 1–3 个最关键参数,各取偏低/基准/偏高三档,报告输出变化。这比大段空泛的“模型具有较强鲁棒性”更有说服力。
可复现信息
在附录或正文脚注中记录:软件版本、随机种子、关键容差、数据截取时间范围。另一人按文档应能得到同量级结果。
审稿式自问
- 方法假设在题目数据上是否可检查?
- 若最敏感参数估计错误 20%,结论是否翻盘?
- 是否存在更简单方法达到相近效果?
- 图表是否都能用一句话概括?
- 局限是否写得具体,而不是套话?
把上述自问的答案写进论文,方法章节会明显更“像完成了建模”,而不是“像完成了公式摘录”。
八、小结
LU 分解把高斯消去固化为因子形式,使线性系统在多右端项下高效求解。它是数值线性代数的核心组件;稳定实现必须考虑主元,并在对称正定时优先 Cholesky。