今天数值分析上机课, LU 分解 Doolittle 分解,写个小程序,
由于MATLAB对向量和矩阵乘法的优势,可简化其中一些步骤
% LU 分解 Doolittle 分解
A = [1,2,1,-2;2,5,3,-2;-2,-2,3,5;1,3,2,3];
b = [2;8;4;9];[m,n]=size(A);
u = zeros(n); l=eye(n);
% LU分解
u(1,:) = A(1,:);
l(:,1) = A(:,1)/u(1,1);
for r = 2:n
for i = r:n
u(r,i) = A(r,i)-l(r,1:r-1)*u(1:r-1,i);
end
for i = r+1:n
l(i,r) = (A(i,r)-l(i,1:r-1)*u(1:r-1,r))/u(r,r);
end
end
u
l
% 求解 Ly = b; Ux = y;
y = zeros(n,1); x = y;
y(1) = b(1);
for i = 2:n
y(i)=b(i)-l(i,1:i-1)*y(1:i-1);
end
y
x(n) = y(n)/u(n,n);
for i = n-1:-1:1
x(i)=(y(i)-u(i,i+1:n)*x(i+1:n))/u(i,i);
end
x