分解

求解线性系统矩阵分解

描述

分解创建可重用矩阵分解(LU、LDL、Cholesky、QR等),使您能够解决线性系统(Ax = b要么xA = b)更有效率。例如,在计算之后dA =分解(一)通话dA \ b返回相同的向量A \ B,但通常要快得多。分解对象非常适合解决需要重复解的问题,因为系数矩阵的分解不需要执行多次。万博 尤文图斯

你可以用分解对象有许多相同的运营商可能会在原始系数矩阵使用一个:

  • 共轭复数达的

  • 否定-dA

  • 乘或除标量使用c *哒要么dA / c

  • 解一个线性系统Ax = b运用x = dA \ b

  • 解一个线性系统xA = b运用X = B / DA

创建

描述

例子

=分解(一个)返回矩阵的分解一个你可以用它来更有效地解决线性系统。分解型是基于所述输入矩阵的性质自动选择。

例子

=分解(一个,类型)指定分解的类型以执行。类型可以“qr”,“鳕鱼”,'鲁',“低密度脂蛋白”,“哲”,“三角”,“permutedTriangular”,“联合”,'hessenberg', 要么“对角线”

例子

=分解(一个,类型,triangularFlag)的上或下三角形部分一个是在分解中使用。triangularFlag可以'上'要么'降低'。有了这个语法,分解类型必须是“低密度脂蛋白”,“哲”, 要么“三角”

例子

=分解(___,名称,值)使用一个或多个指定的附加选项名称,值使用前面任何语法对参数进行配对。例如,dA =分解(“CheckCondition”,假)指定不基于的条件抛出警告一个而解决dA \ b

输入参数

全部展开

系数矩阵。系数矩阵出现在左边的线性方程组中,为Ax = b或如右图xA = b

数据类型:|
复数的支持:万博1manbetx是的

分解类型,指定为这些表中的选项之一。

这些选项适用于任何系数矩阵。

矩阵的分解一个

笔记

“汽车”(默认)

N/A

自动选择基于所述系数矩阵的性质的矩阵分解型的。有关分解是如何选择的信息,请参阅算法的部分mldivide

“qr”

一个 P = R

单一,R是上三角形,然后呢P是置换矩阵。

QR分解给出了一个最小二乘解。

如果类型“qr”,那么你就解决不了A'\乙要么B / A。取而代之的是,使用“鳕鱼”对于这些形式的问题。

“鳕鱼”

一个 = R Z *

R是上三角形,两者都是吗Z有正交列。

完全正交分解给出了一个最小范数最小二乘解。

广场系数矩阵,你也可以使用这些选项。

矩阵的分解一个

笔记

'鲁'

密集矩阵:

P 一个 = l U

l下三角,U是上三角形,然后呢P是置换矩阵。

稀疏矩阵:

P ( R \ 一个 ) = l U

P是置换矩阵,而R是一个对角缩放矩阵。

“低密度脂蛋白”

密集矩阵:

P * 一个 P = l D l *

l是用ls下三角矩阵的对角,D是对角矩阵,并P是置换矩阵。

稀疏矩阵:

P * 年代 一个 年代 P = l D l *

年代是一个尺度矩阵。

一个必须是对称的。

“哲”

密集矩阵:

一个 = l l *

l三角形的低。

稀疏矩阵:

一个 = P l l * P *

P是置换矩阵。

一个必须是对称正定。

“三角”

一个 = T

T是三角形。

一个必须是三角形的。

“permutedTriangular”

一个 = P T *

T是三角形的,并且两个P是排列矩阵。

一个一定是三角矩阵的置换。

“联合”

一个 = P * l U

P置换矩阵和两者都是吗lU带状。

最有效的矩阵与低带宽。看到带宽为更多的信息。

'hessenberg'

一个 = P * l U

P是置换矩阵,l是带状,U是上三角。

一个第一个子对角线以下一定是0。

“对角线”

一个 = D

D是斜的。

一个必须对角线。

标志仅使用上部或降低系数矩阵的三角形部分,指定为'上'要么'降低'。此选项支持万博1manbetx“三角”,“哲”“低密度脂蛋白”分解类型。

  • “三角”-如果上三角矩阵和下三角矩阵都存储在同一个矩阵中,则使用triangularFlag只指定其中一个三角矩阵。

  • “哲”“低密度脂蛋白”——使用triangularFlag为了避免近对称系数矩阵的对称性。

名称-值对的观点

的可选逗号分隔对名称,值参数。的名字参数名和是对应的值。的名字必须出现引号内。您可以按照任何顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例子:dA =分解(‘qr’,‘CheckCondition’,假)执行QR分解一个并在使用系数矩阵求解线性系统时,关闭有关条件的警告。

常规参数

全部展开

开关检查条件系数矩阵,指定为逗号分隔对所组成“CheckCondition”和逻辑1(真正)或逻辑0()。如果校验条件真正和系数矩阵被严重空调或低等级的,则线性系统求解使用mldivide (\)要么mrdivide (/)产生警告。

数据类型:逻辑

秩容差,指定为一个非负标量。确定容差可以防止解受系数矩阵中随机噪声的影响。

分解的秩一个中的对角线元素的个数R矩阵的QR分解(Q, R, p) = qr (A, 0)绝对值大于TOL。如果的秩一个k,则为的低秩近似一个是由第一项相乘得到的吗k由第一个kR。改变容差会影响这个低秩近似一个

请注意

此选项仅适用于以下情况“类型”“qr”要么“鳕鱼”,或者当“类型”“汽车”一个为矩形。否则,此选项将被忽略。

稀疏矩阵参数

全部展开

带宽密度阈值,指定为范围内的标量值[0 1]。的价值“BandDensity”确定如何密稀疏,带状系数矩阵必须是解算器带状通过使用mldivide (\)要么mrdivide (/)当解一个方程组时。如果系数矩阵的带密度大于规定的带密度,则使用带状求解器。

频带密度定义为:(频带中的# non0) /(频带中的#元素)。的价值1.0表示从不使用带状求解。

低密度脂蛋白分解的枢轴容差,指定为间隔中的标量值0.5 [0]。使用旋转公差的较小值可以给分解速度更快的时间和更少的条目,但也可能导致不太稳定的分解。

这个支点宽容是相同的是LDL用途实稀疏矩阵。

枢轴容忍LU分解,指定为标量或矢量。指定一个标量值以改变公差向量的第一个元素,或指定一个两元素矢量来改变这两个值。较小的枢轴公差倾向于导致稀疏LU因素,但该解决方案可以变得不准确。较大的值会导致更准确的解决方案,但并非总是如此,通常增加总的工作和内存使用情况。

这个支点宽容是相同的是用于稀疏矩阵。

属性

全部展开

此属性是只读的。

系数矩阵的大小时,返回作为两元件行向量。

数据类型:

此属性是只读的。

分解式,返回“qr”,“鳕鱼”,'鲁',“低密度脂蛋白”,“哲”,“三角”,“permutedTriangular”,“联合”,'hessenberg', 要么“对角线”

数据类型:字符

肘节以检查系数矩阵的情况下,指定为逻辑1(真正)或逻辑0()。如果校验条件真正和系数矩阵被严重空调或低等级的,则线性系统求解使用mldivide (\)要么mrdivide (/)产生警告。

数据类型:逻辑

此属性是只读的。

系数矩阵的数据类型,或者返回“双”要么“单一”

数据类型:字符

此属性是只读的。

指示系数矩阵是复共轭转置,返回作为任何逻辑1(真正)或逻辑0()。该指标是默认情况下分解由系数矩阵构造的对象。然而,它的价值是真正如果你使用ctranspose操作上分解对象,例如轻拍。在这种情况下,达的是一样的分解对象的价值真正IsConjugateTransposed

数据类型:逻辑

此属性是只读的。

指示器系数矩阵是真实的,返回作为任一逻辑1(真正)或逻辑0()。的价值表示系数矩阵包含复数。

数据类型:逻辑

此属性是只读的。

指示器系数矩阵是稀疏矩阵,返回作为任一逻辑1(真正)或逻辑0()。

数据类型:逻辑

此属性是只读的。

系数矩阵的乘性尺度因子,返回为标量。的默认值1表示该系数矩阵不进行缩放。然而,当你乘,或将分解的值ScaleFactor变化。例如,3 *哒是一个分解对象相当于的价值3.ScaleFactor

数据类型:
复数的支持:万博1manbetx是的

对象的功能

您可以使用的主要函数和操作符分解对象与解线性方程组有关。如果分解类型为“qr”,那么你就解决不了A'\乙要么B / A。取而代之的是,使用“鳕鱼”对于这些形式的问题。

ctranspose 共轭复数
mldivide 解线性方程组Ax = Bx
mrdivide 解线性方程组xA = Bx
isIllConditioned 判断矩阵是否病态

还可以检查的条件数或基础矩阵的秩分解对象。由于使用了不同的算法,使用这些函数的结果对分解比直接使用在系数矩阵相同功能的对象可以是不同的。

排名
  • 只有1个输入的表单排名(dA)被支持万博1manbetx。

  • 分解类型必须是“qr”要么“鳕鱼”

  • 秩的值取决于的选择RankTolerance如果指定。

rcond
  • 运行相同的条件检查反斜杠\用途来确定是否发出警告。

  • 万博1manbetx除了支持所有类型分解“qr”“鳕鱼”

例子

全部折叠

展示如何使用分解对象可以提高解决效率 斧头 = b 右边有很多。

逆迭代是一个迭代算法特征值,解决了线性系统与许多右手边。它是这样一种方法来迭代地计算从相应特征向量的猜测开始矩阵的特征值。每次迭代单位计算x = x \,然后缩放x的规范。

创建一个稀疏矩阵一个和随机起始向量x1x2

n = 1 e3;rng默认%的再现性A = sprandn(N,N,0.2)+ speye(N);X1 = randn(N,1);X2 = X1;

使用反斜杠计算的特征值应用逆迭代算法的100次迭代一个

抽搐II = 1:100 X1 = A \ X1;X1 = X1 /范数(X1);结束TOC
经过时间是18.987628秒。
拉姆达= X1' * A * X1
拉姆达= -0.6707

现在使用分解目的解决同样的问题。

tic dA =分解(A);II = 1:100×2 = DA \ X2;X2 = X2 /范数(2次);结束TOC
经过时间是1.176988秒。
拉姆达= X2' * A * X2
拉姆达= -0.6707

由于矩阵的引入,算法的性能得到了显著提高一个不需要在每次迭代期间进行因数分解。此外,尽管反斜杠算法可以通过执行LU分解来改进一个之前循环,分解对象提供访问所有相同的性能增益,而不需要编写复杂的代码。

选择一个分解型覆盖基于所述输入矩阵的自动默认选择。

创建一个系数矩阵,并使用分解型的默认选择分解矩阵。

一个= 1 (3);dA =分解(一)
DA =具有属性分解:MatrixSize:[3 3]类型: 'LDL' 显示所有属性

用右边的1向量来解线性方程组。

b = 1 (3,1);x = dA \ b
警告:矩阵是奇异的,以加工精度。
x =3×1南南南

指定要使用的分解型“qr”方法,而不是默认“低密度脂蛋白”方法。这迫使反斜线(\)找到最小二乘问题的解决,而不是返回的载体秒。

dA_qr =分解(,“qr”)
dA_qr =具有属性分解:MatrixSize:[3 3]类型: 'QR' 显示所有属性
X = dA_qr \ b
警告:秩亏,秩= 1,tol = 1.153778e-15。
x =3×11.0000 0 0

指定'上'在分解只使用输入矩阵的上三角部分。

创建一个系数矩阵。构造一个仅使用上三角形部分的矩阵的三角形分解。当上三角矩阵和下三角矩阵都存储在同一个矩阵中时,此选项非常有用。

A = randi([0 5],10)
一个=10×104 0 3 4 2 1 4 5 2 0 5 5 0 0 2 4 1 1 4 0 0 5 5 1 4 3 3 4 3 3 5 2 5 0 4 0 4 1 3 4 3 4 4 0 1 0 5 5 5 50 0 4 4 2 2 5 2 1 0 1 2 4 4 2 5 3 1 4 3 3 5 2 1 3 2 0 1 4 2 5 4 3 5 4 3 0 3 2 0 5 5 1 0 4 1 1 2 3 2
dA =分解(,“三角”,'上')
dA =属性分解:MatrixSize:[10 10]类型:' triangle '显示所有属性

使用“CheckCondition”在求解线性系统时,利用名称-值对基于系数矩阵的条件关闭警告分解

创建一个病态的系数矩阵。在这个矩阵中,平均前两列就产生了第三列。

A = [1 2 1.5;3 4 3.5;5 6 5.5]
一个=3×31.0000 2.0000 1.5000 3.0000 4.0000 3.5000 5.0000 6.0000 5.5000

解一个线性系统 斧头 = b 在右边用一个1s的向量。mldivide产生一个关于系数矩阵条件的警告。

b = 1 (3,1);x = A \ b
警告:矩阵接近奇异或严重缩放。结果可能是不准确的。RCOND = 8.326673e-18。
x =3×1-0.0556 1.9444 -1.8889

现在创建一个分解对象的矩阵,解决了相同的线性系统。指定“CheckCondition”作为以便mldivide不检查系数矩阵的条件。即使返回相同的解决方案,mldivide不显示警告消息。

dA =分解(,“CheckCondition”、假);x = dA \ b
x =3×1-0.0556 1.9444 -1.8889

使用isIllConditioned函数检查是否分解目的是基于一个病态矩阵。

tf = isIllConditioned (dA)
TF =逻辑1

扩展功能

介绍了R2017b