一、前言
参考知乎文章:LU分解、LUP分解、Cholesky分解中的LUP分解,LUP分解相比LU分解更加稳定,在矩阵求逆、求解解线性方程组有广泛运用。笔者修复了文章所述LUP算法一个BUG,当待分解的矩阵某一列均为0时,例如矩阵[0 1;0 1],无法进行LUP分解。增加基于LUP分解求解线性方程组代码、在矩阵方程AX=B中,当B为单位阵时,利用LUP分解可以快速稳定地求解矩阵的逆。
二、LUP分解MATLAB代码
function [L, U, P] = lup(A)
if size(A, 1) ~= size(A, 2)
error('矩阵行数与列数不等')
end
U = A;
L = eye(size(A));
P = eye(size(A));
n = size(A, 2);
for j = 1 : n - 1
%Select i(>=j) that maximizes |U(i,j)|
index = -1;
maxValue = 0.0;
for i = j : n
temp = abs(U(i,j));
if temp > maxValue
maxValue = temp;
index = i;
end
end
if index == -1
continue;
end
%Interchange rows of U: U(j, j : n) <-> U(i, j : n)
for k = j : n
temp = U(j, k);
U(j, k) = U(index, k);
U(index, k) = temp;
end
%Int

本文详细介绍了LUP分解的MATLAB实现,包括LUP分解的代码以及使用LUP分解求解线性方程组的算法。修复了一个可能导致错误的BUG,并提供了矩阵求逆和求解线性方程组的测试例子。
最低0.47元/天 解锁文章
1571

被折叠的 条评论
为什么被折叠?



