一 Doolittle分解/LU分解
function [L,U]=Doolittle(A)
n=size(A,1);
L=eye(n);
U=zeros(n,n);
U(1,1:n)=A(1,1:n); % U的第一行
L(1:n,1)=A(1:n,1)/U(1,1);% L的第一列
for k=2:n
for j=2:n
if j>=k
U(k,j)=A(k,j)-sum(L(k,1:k-1)*U(1:k-1,j));
else
if U(j,j)==0
L(j,k)=0;
else
L(k,j)=(A(k,j)-sum(L(k,1:j-1)*U(1:j-1,j)))./U(j,j);
end
end
end
end
二 cholesky分解
% 实现n阶矩阵A的单位下三角阵分解,采用改进平方根法的cholesky分解
% 条件 A为n阶对称正定矩阵,且A的各阶顺序主子式都不为0,L为单位的下三角阵
function [L,U]=cholesky(A)
n=size(A,1);
L=eye(n);
U=zeros(n,n);
U(1,1:n)=A(1,1:n); % U的第一行
d1=U(1,1);
L(1:n,1)=U(1,1:n)./d1;
for k=2:n
for j=2:n
if j>=k
U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)');
dk=U(k,k);
else
L(k,j)=U(j,k)/dk;
end
end
end
end
三 测试
A=[2,4,2;4,9,6;2,6,9];
[L,U]=cholesky(A);
结果: