文档

LU矩阵分解

语法

Y = lu(A)
[L,U] = lu(A)
[L,U,P] = lu(A)
[L,U,P,Q] = lu(A)
[L,U,P,Q,R] = lu(A)
[…= lu(A,'向量')
[…= lu(A,打谷子)
[…= lu(A,thresh,'vector')

描述

函数表示一个矩阵一个作为两个本质上是三角形矩阵的乘积,其中一个是下三角矩阵的排列,另一个是上三角矩阵的排列。因式分解通常被称为,或有时LR,分解。一个可以是矩形。

Y = lu(A)收益矩阵Y它包含严格意义上的下三角形l,即没有其单位对角线,和上三角形U子矩阵。也就是说,如果[L,U,P] = lu(A),然后Y = U+ l型眼(尺寸(A)).排列矩阵P不返回。

[L,U] = lu(A)返回一个上三角矩阵U和一个排列下三角矩阵l这样A = l * u.返回值l是下三角矩阵和排列矩阵的乘积。

[L,U,P] = lu(A)返回一个上三角矩阵U,一个下三角矩阵l用一个单位对角线,和一个排列矩阵P,以致于L* u = p * a.该声明陆(A,“矩阵”)返回相同的输出值。

[L,U,P,Q] = lu(A)对于稀疏非空一个,返回一个单位下三角矩阵l,一个上三角矩阵U,行排列矩阵P,和列重排矩阵,所以P* a * q = l * u.如果一个是空的还是不稀疏的,显示错误消息。该声明陆(A,“矩阵”)返回相同的输出值。

[L,U,P,Q,R] = lu(A)返回单位下三角矩阵l,上三角矩阵U,排列矩阵P,和对角缩放矩阵R如此......以至于......P*(r \ a)* q = l * u对于稀疏非空一个.通常情况下(但并非总是如此),行缩放会导致更稀疏且更稳定的分解。该声明陆(A,“矩阵”)返回相同的输出值。

[…= lu(A,'向量')返回两个行向量的排列信息p.您可以指定1到5个输出。输出p定义为:一个(p) = L * U、输出定义为(p, q) = L * U,输出R定义为R (: p) \ (:, q = L * U

[…= lu(A,打谷子)控制旋转。此语法仅适用于稀疏矩阵。的Input是类型的一个或两个元素向量默认为[0.1,0.001]。如果一个是一个具有大部分对称结构和大部分非零对角线的方阵,MATLAB®使用对称的旋转策略。在这个策略中,对角线是

A(i,j) >= thresh(2) * max(abs(A(j:m,j))))

被选中。如果对角线项未通过此测试,则选择对角线以下的主元项,使用打(1).在这种情况下,l有绝对值的项吗1 /分钟(打)或更少。

如果A不是如上所述,MATLAB使用非对称策略。在这种情况下,是最稀疏的行在哪里

A(i,j) >= thresh(1) * max(abs(A(j:m,j))))

被选中。1.0的值会导致传统的部分旋转。条目l的绝对值1 /打(1)或更少。的第二个元素当MATLAB使用非对称策略时,不使用输入向量。

较小的值打(1)打(2)往往会导致更稀疏的LU因子,但解会变得不准确。较大的值可以导致更准确的解决方案(但并不总是如此),并且通常会增加总工作和内存使用。该声明陆(打,“矩阵”)返回相同的输出值。

[…= lu(A,thresh,'vector')如前所述,控制旋转策略并返回行向量中的排列信息。的输入必须在前面“向量”在输入参数列表中。

    请注意在极少数情况下,不正确的因式分解会导致P * A *L * U.增加的最大值1.0(常规部分旋转),然后重试。

参数

一个

待分解的矩形矩阵。

稀疏矩阵的枢轴阈值。有效值在区间内[0, 1].如果指定第四个输出,默认为0.1.否则,默认为1.0

l

的因素一个.根据函数的形式,l要么是一个单位下三角矩阵,要么是一个单位下三角矩阵的乘积P '

U

上三角矩阵是一个因式一个

P

满足方程的行排列矩阵L* u = p * a,或L* u = p * a * q.用于数值稳定性。

满足方程的列置换矩阵P* a * q = l * u.用于减少稀疏情况下的填充。

R

Row-scaling矩阵

例子

示例1

开始

A = [1 2 3 4 5 6 7 8 0];

要查看LU因式分解,调用有两个输出参数。

[L1,U] = lu(A) L1 = 0.1429 1.0000 0 0.5714 0.5000 1.0000 1.0000 00 U = 7.0000 8.0000 00 0.8571 3.0000 00 4.5000

请注意,L1是一个下三角矩阵的排列:如果你切换第2行和第3行,然后切换第1行和第2行,得到的矩阵是下三角矩阵并且有1S在对角线上。还要注意U是上三角形。为了检验因式分解是否有效,计算乘积

L1 * U

它返回原始的一个.这个矩阵的逆矩阵,X = inv(A),实际上是由三角因子的倒数计算出来的

X = inv(U)*inv(L1)

用左边的三个参数来得到排列矩阵,

[L2,U,P] = lu(A)

返回一个真正的下三角形L2的值相同U,和排列矩阵P

L2 = 1.0000 00 0.1429 1.0000 0 0.5714 0.5000 1.0000 u = 7.0000 8.0000 00 0.8571 3.0000 00 4.5000 p = 00 1 1 0000 1 0

请注意,L2 = p * l1

P*L1 ans = 1.0000 00 0.1429 1.0000 0 0.5714 0.5000 1.0000

为了验证L2 * U是一个排列的版本一个,计算L2 * U然后减去P *

P*A - L2*U ans = 0 0 0 0 0 0 0 0 0 0 0

在这种情况下,发票(U) *发票(左)的排列结果发票(一个)给出的发票(P) *发票(A)

这个例子矩阵的行列式是

d = det(A) d = 27

它是由三角形的行列式计算出来的

d = det(L)*det(U)

解决方案一个x=b是用矩阵除法得到的吗

x = A\b

解实际上是通过求解两个三角方程组得到的

y = L\b x = U\y

示例2

其差值的1范数在舍入误差范围内,表明L* u = p * b * q

生成巴克敏斯特-富勒测地线穹顶连通性图的60 × 60稀疏邻接矩阵。

B =结实的;

使用带有四个输出的稀疏矩阵语法来获得行和列排列矩阵。

[L,U,P,Q] = lu(B);

将排列矩阵应用于B,并减去下三角矩阵和上三角矩阵的乘积。

Z = p * b * q - l * u;norm(Z,1) ans = 7.9936e-015

示例3

属性的好处“向量”选择。方法可以节省多少内存陆(F,“矢量”)语法。

F = gallery('uniformdata',[1000 1000],0);g = sum(F,2);[L,U,P] = lu(F);[L,U,p] = lu(F,'矢量');whos P P名称大小字节类属性P 1000x1000 8000000 double P 1x1000 8000 double

下面两个表述是等价的。第一种通常需要更少的时间:

x = U\(L\(g(p,:)));y = U\(L\(P*g));

提示

大多数计算LU分解的算法都是高斯消去的变体。因式分解是求逆的关键步骤发票这个行列式依据.它也是线性方程解或矩阵除法的基础\/

扩展功能

C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。

R2006a之前介绍

这个话题有用吗?