解线性方程组之LU分解(Doolittle 分解)

今天数值分析上机课, 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


你可能感兴趣的:(数值分析)