主要内容

LU矩阵分解

描述

例子

lU] = lu(一个分解全矩阵或稀疏矩阵一个变成一个上三角矩阵U和一个排列下三角矩阵l这样A = l * u

例子

lUP] = lu(一个也返回一个排列矩阵P这样A = p '* l * u.有了这个语法,l单位是下三角形和吗U是上三角形。

例子

lUP] = lu(一个outputForm返回P指定的格式outputForm.指定outputForm作为“向量”返回P作为一个这样的排列向量A(p,:) = l * u

例子

lUP] = lu(年代分解稀疏矩阵年代变成一个单位下三角矩阵l,一个上三角矩阵U,行排列矩阵P,列置换矩阵,以致于P* s * q = l * u

lUPD] = lu(年代还返回一个对角线缩放矩阵D这样P*(d \ s)* q = l * u.通常,行缩放会导致更稀疏且更稳定的分解。

___] = lu(年代所采用的轴心策略的阈值使用任何先前的输出参数组合。属性的默认值和要求,取决于指定的输出参数的数量输入是不同的。看到参数的详细描述。

例子

___] = lu(___outputForm返回P而且指定的格式outputForm.指定outputForm作为“向量”返回P而且作为排列向量。您可以使用以前语法中的任何输入参数组合。

例子

全部折叠

计算一个矩阵的LU因式分解,并检查得到的因子。LU分解是一种分解矩阵的方法 一个 变成一个上三角矩阵 U ,一个下三角矩阵 l ,和排列矩阵 P 这样 巴勒斯坦权力机构 .这些矩阵描述了在矩阵上执行高斯消去直到它变成行简化阶梯形所需的步骤。的 l 矩阵包含了所有的乘数,还有排列矩阵 P 用于行交换。

创建一个3 × 3矩阵并计算LU因子。

A = [10 -7 0 -3 2 6 5 -1 5];
[L,U] = lu(A)
L =3×31.0000 00 -0.3000 -0.0400 1.0000 0.5000 1.0000 0
U =3×310.0000 -7.0000 00 2.5000 5.0000 00 6.2000

将这些因素相乘来重建一个.使用双输入语法,合并排列矩阵P直接进入l因子,使l回归真的是P ' * L因此A = l * u

L * U
ans =3×310.0000 -7.0000 0 -3.0000 2.0000 6.0000 5.0000 -1.0000 5.0000

您可以指定三个输出来将排列矩阵与中的乘数分离l

[L,U,P] = lu(A)
L =3×31.0000 00 0.5000 1.0000 0 -0.3000 -0.0400 1.0000
U =3×310.0000 -7.0000 00 2.5000 5.0000 00 6.2000
P =3×31 0 0 0 0 1 0 10 0
P ' * L * U
ans =3×310.0000 -7.0000 0 -3.0000 2.0000 6.0000 5.0000 -1.0000 5.0000

通过执行LU分解并使用因子简化问题来求解线性系统。使用反斜杠操作符和将结果与其他方法进行比较分解对象。

创建一个5乘5的魔方矩阵并求解线性方程组 斧头 b 所有的元素b等于65,神奇的和。由于65是这个矩阵的神奇和(所有的行和列加起来都是65),对于的期望解x是1s的向量。

A =魔术(5);B = 65*ones(5,1);x = A\b
x =5×11.0000 1.0000 1.0000 1.0000

对于一般的方阵,反斜杠运算符使用LU分解计算线性系统的解。LU分解表示一个作为三角矩阵的乘积,涉及三角矩阵的线性方程组很容易用代换公式求解。

要重新创建由反斜杠计算的答案,请计算的LU分解一个.然后,利用因子求解两个三角形线性系统:

y = L\(P*b);x = U\y;

这种在求解线性系统之前预计算矩阵因子的方法可以在求解许多线性系统时提高性能,因为分解只发生一次,不需要重复。

[L,U,P] = lu(A)
L =5×51.0000 0000 0.7391 1.0000 0000 0.4783 0.7687 1.0000 00 0.1739 0.2527 0.5164 1.0000 0 0.4348 0.4839 0.7231 0.9231 1.0000
U =5×523.0000 5.0000 7.0000 14.0000 16.0000 0 20.3043 -4.1739 -2.3478 3.1739 00 24.8608 -2.8908 -1.0921 000 19.6512 18.9793 0000 -22.2222
P =5×50 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
y = L\(P*b);x = U\y
x =5×11.0000 1.0000 1.0000 1.0000

分解对象在使用专门的因式分解求解线性系统时也很有用,因为预先计算矩阵因式可以获得许多性能好处,但不需要知道如何使用这些因式。属性使用分解对象“陆”键入以重新创建相同的结果。

dA =分解(A,“陆”);x = dA\b
x =5×11.0000 1.0000 1.0000 1.0000

计算一个稀疏矩阵的LU因式分解,并验证其恒等式L* u = p * s * q

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

S =结实的;

计算的LU因式分解年代使用带有四个输出的稀疏矩阵语法返回行和列排列矩阵。

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

排列的行和列年代P * *将结果与三角形因子相乘进行比较L * U.其差值的1范数在舍入误差范围内,表明L* u = p * s * q

e = P*S*Q - L*U;规范(e, 1)
Ans = 5.7732e-15

计算矩阵的LU因式分解。通过将行排列返回为向量而不是矩阵来节省内存。

创建一个1000乘1000的随机矩阵。

A =兰特(1000);

用存储为矩阵的排列信息计算LU因式分解P.将结果与存储为向量的排列信息进行比较p.矩阵越大,使用排列向量的内存效率就越高。

[L1,U1,P] = lu(A);[L2,U2,p] = lu(A, A, A, A, A, A, A, A, A, A, A, A, A,“向量”);谁Pp
名称大小字节类属性P 1000x1000 8000000 double P 1x1000 8000 double

使用排列向量还可以节省后续操作的执行时间。例如,您可以使用前面的LU因式分解来求解线性系统 斧头 b .虽然从排列向量和排列矩阵得金宝搏官方网站到的解是等价的(四舍五入),但使用排列向量的解通常需要更少的时间。

比较有列排列和没有列排列的稀疏矩阵的LU分解计算结果。

加载west0479矩阵,这是一个实值479 × 479的稀疏矩阵。

负载west0479A = west0479;

计算的LU因式分解一个通过调用有三个输出。生成L和U因子的间谍图。

[L,U,P] = lu(A);次要情节(1,2,1)间谍(L)标题(“L因素”)副图(1,2,2)间谍(U)标题(“U因子”

图中包含2个轴对象。带有标题L因子的坐标轴对象1包含一个类型为line的对象。带有标题U因子的坐标轴对象2包含一个类型为line的对象。

现在,计算LU因式分解一个使用有四个输出,排列的列一个减少因子中非零的个数。得到的因子比不使用列排列要稀疏得多。

[L,U,P,Q] = lu(A);次要情节(1,2,1)间谍(L)标题(“L因素”)副图(1,2,2)间谍(U)标题(“U因子”

图中包含2个轴对象。带有标题L因子的坐标轴对象1包含一个类型为line的对象。带有标题U因子的坐标轴对象2包含一个类型为line的对象。

输入参数

全部折叠

输入矩阵。一个大小可以是完整的或稀疏的,也可以是正方形或矩形的。

数据类型:|
复数支持:金宝app是的

稀疏输入矩阵。年代大小可以是正方形或矩形。

数据类型:
复数支持:金宝app是的

稀疏矩阵的枢轴阈值,指定为标量或两元向量。有效值在区间内[0 1].你指定的方式的调用中指定了多少个输出

  • 三个输出或更少必须为标量,默认值为1.0

  • 四个或更多输出可以是标量,也可以是两个元素的向量。默认值为(0.1 - 0.001).如果你指定作为标量,它只替换向量中的第一个值。

在较高的级别上,此输入使您能够在准确性和总执行时间之间进行权衡。较小的值往往会导致更稀疏的LU因子,但解会变得不准确。较大的值可以导致更准确的解决方案(但并不总是如此),并且通常会增加总工作和内存使用。

选择一个旋转策略,首先基于输出参数的数量,其次基于被分解的矩阵的属性。在所有情况下,将阈值设置为1.0结果在部分旋转,而设置他们0导致只根据结果矩阵的稀疏性来选择枢轴。的所有值l的绝对值1 /分钟(打)或更少。

  • 三个或更少的输出参数-如果满足方程,则算法选择对角枢轴

    A(j,j) >= thresh * max(A(j:m,j))))
    否则,它将选择包含绝对值最大的元素的行。

  • 对称旋转策略——如果年代是一个方阵稀疏矩阵,具有大部分对称结构和大部分非零对角线,那么使用对称的旋转策略。对于这种策略,算法选择对角枢轴j如果满足不等式:

    A(i,j) >= thresh(2) * max(abs(A(j:m,j))))
    如果对角线项没有通过测试,那么选择最稀疏的行满足不平等:
    A(i,j) >= thresh(1) * max(abs(A(j:m,j))))

  • 非对称旋转策略——如果年代不满足对称旋转策略的要求,则使用非对称策略。在这种情况下,选择最稀疏的行满足不平等:

    A(i,j) >= thresh(1) * max(abs(A(j:m,j))))
    值为1.0打(1)结果在传统的部分旋转。条目l的绝对值1 /打(1)或更少。的第二个元素输入向量不用于非对称策略。

请注意

在极少数情况下,不正确的因式分解会导致P * *L * U.如果出现这种情况,增加最大限度地1.0(常规部分旋转),然后重试。

排列输出的形状,指定为“矩阵”“向量”.此标志控制是否返回行排列P和列排列作为排列矩阵或排列向量。

作为矩阵,输出P而且满足这些特性:

  • 三个输出-P满足P* a = l * u

  • 四个输出-P而且满足P* s * q = l * u

  • 5个输出-P,D满足P*(d \ s)* q = l * u

作为向量,输出P而且满足这些特性:

  • 三个输出-P满足A(p,:) = l * u

  • 四个输出-P而且满足S(p, q) = l * u

  • 5个输出-P,D满足D(:, p)\ s (:, q) = l * u

例子:[L,U,P] = lu(A,'矢量')

输出参数

全部折叠

下三角因子,作为矩阵返回。的形式l取决于行是否排列P在单独的输出中返回:

  • 如果第三个输出P,则l返回为单位下三角矩阵(即主对角线上为1s的下三角矩阵)。

  • 如果第三个输出P没有指定,那么l返回为单位下三角矩阵的行排列。具体来说,就是产品P ' * L输出的P而且l在三个输出案例中返回。

上三角因子,作为上三角矩阵返回。

行排列,作为排列矩阵返回,如果“向量”选项指定为排列向量。使用这个输出来提高计算的数值稳定性。

看到outputForm获取此输出所满足的标识的描述。

列排列,返回为排列矩阵或“向量”选项指定为排列向量。使用此输出来减少稀疏矩阵因子中的填充(非零的数量)。

看到outputForm获取此输出所满足的标识的描述。

行缩放,作为对角线矩阵返回。D是用来缩放值的年代这样P*(d \ s)* q = l * u.通常情况下(但并非总是如此),行缩放会导致更稀疏且更稳定的分解。

算法

LU因式分解是用高斯消去的一种变体来计算的。计算精确的解依赖于原始矩阵的条件数的值气孔导度(A).如果矩阵有一个很大的条件数(它几乎是奇异的),那么计算的因式分解可能不准确。

LU因式分解是求逆的关键步骤发票这个行列式依据.它也是用算子求得线性方程解或矩阵除法的基础\而且/.这必然意味着数量的限制也出现在这些相关函数中。

扩展功能

版本历史

R2006a之前介绍