1/6 LU 分解
LU 分解可以写成A = LU,这里的L代表下三角矩阵,U代表上三角矩阵。对应的matlab代码如下:
function[L, U] =zlu(A)
% ZLU - LU decomposition for matrix A
% work as gauss elimination
[m, n] = size(A);
if m ~= n
error('Error, current time only support square matrix');
end
L = zeros(n);
U = zeros(n);
for k = 1:n-1
gauss_vector = A(:,k);
gauss_vector(k+1:end) = gauss_vector(k+1:end) ./ gauss_vector(k);
gauss_vector(1:k) = zeros(k,1);
L(:,k) = gauss_vector;
L(k,k) = 1;
for l=k+1:n
A(l,:) = A(l,:) - gauss_vector(l)*A(k,:);
end
end
U = A;
这段代码的目的非常简单,就是使用高斯消元法给出L,U。但是计算的稳定性非常不好,这点可以通过这段代码的分解结果和matlab自带lu的分解结果相比较得出。比较的方法非常简单:就是计算l*u与原始矩阵想减之后的Frobinus范数大小,使用如下的代码