矩阵的LU分解(自编MATLAB)实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
LU 分解原理
定理:设A C n n
,如果 A 的顺序主子式
A 11
≠0, |a 11
a 12
a
21
a 22|≠0,…,|a 11a 12a 21a 22…a 12…a 22⋮⋮a n−11a n−12⋮
⋯a n−1n−1
|≠0 则存在唯一的主对角线上元素全为 1 的下三角矩阵L 与唯一的上三角矩阵 U ,使得
A =LU .
证明:对矩阵A 的阶数使用数学归纳法.
显然,当 n=1 时,A 11=1 ∙A 11 就是唯一的分解式。现假定对 n-1 阶矩阵,定理的结论成立。对 A 进行分块
A =(
A A −A A A A A
A
A AA
)
其中A A ,A A ∈A A −A
.由于 n-1 阶矩阵 A A −A 的 k 阶顺序主子式就是 A 的 k 阶主子式(k=1,2,…,n-2),故它们都不为零.从而由归纳法假设,A A −A 有唯一的 LU 分解
A A −A =A A −A A A −A
其中A A −A 的主对角线上的元素都1.由于 |A A −A |=|
A 11A 12A 21A 22
…A 12…A 22
⋮
⋮
A A −11A A −12
⋮
⋯
A A −1A −1
|=|A A −A A A −A |≠0
所以A A −A 及A A −A 是n-1阶可逆矩阵 先假设已有 A =LU ,其中
L =(
A A −A 0A
A
1
), U= (
A A −A A A
A
A AA
)
A ,A ∈A A −A
是待定向量。作乘积
AA = (A A −A A A −A A A −A A A A A A −A A AA +A A A ) =(A A −A A A
A A A
A AA
)=A 则A,A 必须满足
A A −A A =A A ,A A A A −A =A A A ,A AA +A A
A =A AA
注意到A A −A 及A A −A 都是n-1阶可逆矩阵,则由上式可惟一确定
A =A A −A −A A A ,A A =A A A A A −A −A
, A AA =A AA −
A A A
这就证明了 A 的 LU 分解的存在性和唯一性.
LU 分解算法
当 n 阶矩阵满足定理的条件时,可以用初等变换的方法求出 L 和 U .
因为当 A=LU 时,由于 L 可逆,故必存在可逆矩阵 P 使得
AA =A
即 PA=PLU=U .也就是说,可以先对 A 施行行的初等变换得出上三角矩阵U ,而矩阵 P 可以通过对单位矩阵I 进行相同的行初等变换得出,即
P(A,I) =(PA,PI) =(U,P)
于是A =A −A A ,为保持P 为下三角矩阵(从而A −A
也是下三角矩阵),在进行行初等变换时,不能进行行的对换,上行的倍数应加到下行的对应元.
LU 分解用于解方程组
矩阵的三角分解在求解线性方程组时十分方便.如对线性方程组 AA =A ,设A =AA .我们先求解方程组 AA =A . 由于A 是下三角矩阵,则解向量A 可以通过依次求出其分量 A 1,A 2,⋯A A 而求出,在求解方程组AA =A .解向量A 可以通过该方程组依次求出分量A A ,⋯,A 2,A 1而快速得出.于是由两个方程组AA =A ,AA =A 的求解而给出
AAA =AA =A = AA 的解.
程序流程图
MATLAB程序
function f=LU_decom(A)
[m,n]=size(A)
if m~=n
fprintf('Error:m and n must be equal!m=%d,n=%d\n',m,n) end
for i=1:n-1
if (det(A(1:i,1:i))==0)
fprintf('Error:det A(%d,%d)=0!\n',i,i)
flag='failure'
return;
else
flag='ok';
end
end
L=eye(n);
U=zeros(n);
for i=1:n
U(1,i)=A(1,i);
end
for r=2:n
L(r,1)=A(r,1)/U(1,1);
end
for i=2:n
for j=i:n
z=0;
for r=1:i-1
z=z+L(i,r)*U(r,j);
end
U(i,j)=A(i,j)-z;
end
if abs(U(i,i)) flag='failure' return; end for k=i+1:n m=0; for q=1:i-1 m=m+L(k,q)*U(q,i); end L(k,i)=(A(k,i)-m)/U(i,i); end end L U 实际数据计算 已知矩阵A=(211 410 −221),A=( 1 2 1 ),先对A进性LU分解, 并求解方程 A A=A的解. (1)A的LU分解 在MATLAB命令行中输入A=[2 1 1;4 1 0;-2 2 1];并调用以上函数可得如下结果 >> A=[2 1 1;4 1 0;-2 2 1];LU_decom(A) m = 3 n = 3 L = 1 0 0 2 1 0 -1 -3 1 U = 2 1 1 0 -1 -2 0 0 -4 (2)解方程组,程序及结果如下 %-----用LU分解解线性方程组------