矩阵的三角分解算法实验报告
作者:戴宇童
如有任何问题请联系 rothdyt@gmail.com
LR 分解,LDR 分解算法
LR分解的代码
function [A,L,R]=myLR(A,op)
%op是一个数值,op=1表示执行节约内存版的计算方式,否则执行普通LR分解
%如果执行op=1,则所求的单位下三角存在A的下三角部分(不含对角线),所求的上三角矩阵R存储在A的上三角部分(包含对角线)
n=size(A,2);
for i=1:n
Z=det(A(1:i-1,1:i-1));
if Z==0
fprintf('Factorization is impossible')
end
end
if op==1
A(1,:)=A(1,:);
A(2:end,1)=A(2:end,1)/A(1,1);
for r=2:n
for j=r:n
A(r,j)=A(r,j)-A(r,1:r-1)*A(1:r-1,j);
end
for i=r+1:n
A(i,r)=(A(i,r)-A(i,1:r-1)*A(1:r-1,r))/A(r,r);
end
end
else
R=zeros(size(A));
L=eye(size(A));
R(1,:)=A(1,:);
L(2:end,1)=A(2:end,1)/A(1,1);
for r=2:n
for j=r:n
R(r,j)=A(r,j)-L(r,1:r-1)*R(1:r-1,j);
end
for i=r+1:n
L(i,r)=(A(i,r)-L(i,1:r-1)*R(1:r-1,r))/R(r,r);
end
end
end
LDR分解代码
function [L,D,Rn]=myLDR(A,op)
%op是一个数值,op=1表示执行节约内存版的计算方式,否则执行普通分解
%{
如果执行节约内存的计算方式,那么得到的矩阵仍然记作A。
A的下三角(不含对角线)是L的下三角元素(不含对角线)
A的对角元是对角阵D的对角元
A的上三角(不含对角线)是R的上三角元素(不含对角线)
%}
n=size(A,2);
if op==1
A=myLR(A,1);
for i=1:n-1
for j=i+1:n
A(i,j)=A(i,j)/A(i,i);
end
end
A
else
[A,L,R]=myLR(A,2);
for i=1:n
D(i,i)=R(i,i);
end
for i=1:n
Rn(i,i)=1;
end
for i=1:n-1
for j=(i+1):n
Rn(i,j)=R(i,j)/R(i,i);
end
end
end
例子
对 A1=⎛⎝⎜⎜2