文档

分解

求解线性系统的矩阵分解

描述

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

你可以用分解对象有很多和原来系数矩阵一样的运算符一个

  • 复杂的共轭转置达的

  • 否定- da

  • 用一个标量乘或除c *哒dA / c

  • 解线性方程组Ax = b使用x = dA \ b

  • 解线性方程组xA = b使用x = b /哒

创建

语法

dA =分解(一)
dA =分解(类型)
dA =分解(类型,triangularFlag)
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”,则不能解一个“\ BB / A.相反,使用“鳕鱼”那些表格的问题。

“鳕鱼”

一个 R Z

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

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

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

价值

矩阵的分解一个

笔记

“陆”

密度矩阵:

P 一个 l U

l下三角,U是上三角形,和P是一个置换矩阵。

稀疏矩阵:

P R 一个 l U

P排列矩阵和R是一个对角线缩放矩阵。

“低密度脂蛋白”

密度矩阵:

P 一个 P l D l

l是一个对角线上有1s的下三角矩阵,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为了避免近似对称系数矩阵的对称。

名称-值对的观点

指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在单引号内(' ').可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:dA =分解(‘qr’,‘CheckCondition’,假)的QR分解一个并在求解线性方程组时对系数矩阵的条件提出了警告。

一般参数

全部展开

切换到检查系数矩阵的条件,指定为逗号分隔对组成“CheckCondition”和逻辑1真正的)或逻辑0).如果CheckCondition真正的而系数矩阵条件差或秩低时,则用该方法求解线性方程组mldivide (\)mrdivide (/)产生警告。

数据类型:逻辑

等级公差,指定为非负标量。指定公差可以帮助防止解决方案容易受到系数矩阵中的随机噪声的影响。

分解计算的秩一个的对角线元素的数量RQR分解的矩阵(Q, R, p) = qr (A, 0)绝对值大于托尔.如果一个k的低阶近似一个是由第一项相乘形成的k由第一个kR.改变容差会影响这个低阶近似一个

请注意

此选项仅适用于以下情况“类型”“qr”“鳕鱼”,或者当“类型”“汽车”一个是长方形的。否则,该选项将被忽略。

稀疏矩阵的参数

全部展开

频带密度阈值,指定为范围内的标量值[0 1].的价值“BandDensity”确定一个稀疏的,带状系数矩阵必须是密集的带状求解器使用mldivide (\)mrdivide (/)当解方程组时。

频带密度定义为:(频带中的#非零)/(全频带中的#非零)。的值1.0指示永不使用带状求解器。

LDL因子分解的支点耐受性,指定为区间内的标量值0.5 [0].使用更小的轴公差值可以提供更快的分解时间和更少的条目,但也可能导致更不稳定的分解。

这个枢轴公差和低密度脂蛋白用于实稀疏矩阵。

逻辑单元分解的枢轴公差,指定为标量或向量。指定一个标量值以更改公差向量中的第一个元素,或指定一个双元素向量以更改两个值。较小的枢轴公差往往导致更稀疏的LU因素,但解决方案可能会变得不准确。较大的值可以得到更精确的解决方案,但并不总是如此,并且通常会增加总工作量和内存使用量。

这个枢轴公差和用于稀疏矩阵。

属性

全部展开

此属性是只读的。

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

数据类型:

此属性是只读的。

分解类型,返回为“qr”“鳕鱼”“陆”“低密度脂蛋白”“胆固醇”“三角”“permutedTriangular”“联合”“hessenberg”,或“对角线”

数据类型:字符

切换到检查系数矩阵的条件,指定为任一逻辑1真正的)或逻辑0).如果CheckCondition真正的而系数矩阵条件差或秩低时,则用该方法求解线性方程组mldivide (\)mrdivide (/)产生警告。

数据类型:逻辑

此属性是只读的。

系数矩阵的数据类型,返回为“双”“单一”

数据类型:字符

此属性是只读的。

指示系数矩阵是复共轭转置,返回为任一逻辑1真正的)或逻辑0).这个指标是默认情况下分解由系数矩阵构造的对象。但取值为真正的如果你使用ctranspose操作员在分解表达式中的对象,例如dA’\ b.在这种情况下,达的都是一样的分解对象作为,但其值为真正的IsConjugateTransposed

数据类型:逻辑

此属性是只读的。

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

数据类型:逻辑

此属性是只读的。

指示系数矩阵是稀疏的,返回为任一逻辑1真正的)或逻辑0).

数据类型:逻辑

此属性是只读的。

系数矩阵的乘比例因子,返回为标量。的默认值1表示系数矩阵没有缩放。然而,当你乘或除分解对象的值ScaleFactor的变化。例如,3 *哒是一个分解对象相当于,但其值为3.ScaleFactor

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

对象的功能

可以使用的主要函数和操作符分解对象与求解线性方程组有关。

ctranspose 复杂的共轭转置
mldivide 求x的线性方程组Ax = B
mrdivide 解x的线性方程组xA = B
isIllConditioned 确定矩阵是否处于病态状态

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

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

  • 分解类型必须为“qr”“鳕鱼”

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

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

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

例子

全部折叠

展示如何使用分解对象可以提高求解效率右边有很多。

逆迭代是一种迭代特征值算法,用于求解具有多个右侧的线性方程组。它是一种从猜测对应特征向量开始迭代计算矩阵特征值的方法。每次迭代计算x = x \,然后缩放x的规范。

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

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

使用反斜杠反迭代算法进行100次迭代,计算特征值一个

抽搐i=1:100 x1 = A \ x1;X1 = X1 /模(X1);结束toc
运行时间为27.835561秒。
λ= x1‘* * x1
λ= -0.6707

现在使用一个分解对象来解决相同的问题。

tic dA =分解(A);x =1, x =1;X2 = X2 /模(X2);结束toc
运行时间为1.831414秒。
λ= x2的* * x2
λ= -0.6707

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

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

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

一个= 1 (3);dA =分解(一)
[3 3] Type: 'ldl'显示所有属性

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

b = 1 (3,1);x = dA \ b
警告:矩阵的工作精度是单一的。
x =3×1南南南

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

dA_qr =分解(,“qr”
dA_qr = decomposition with properties: MatrixSize: [3 3
x = dA_qr \ b
警告:Rank deficient, Rank = 1, tol = 1.153778e-15。
x =3×11 0 0

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

创建一个系数矩阵。仅使用上三角部分构造矩阵的三角分解。这个选项在上三角形和下三角形矩阵存储在同一个矩阵的情况下是有用的。

A = randi([0 5],10)
一个=10×104 0 1 2 3 4 5 2 0 5 5 0 0 1 2 4 1 1 4 0 0 5 5 4 3 2 3 4 3 3 5 5 0 4 0 4 1 3 4 3 4 4 0 1 0 5 5 5 5 0 0 4 4 2 2 5 4 2 1 0 1 2 4 2 5 3 1 5 4 3 3 2 1 3 2 0 1 4 2 5 4 3 2 5 4 3 0 3 0 5 5 1 0 4 1 1 2 3 2
dA =分解(,“三角”“上”
Type: ' 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

解线性方程组右边用一个1s的向量。mldivide产生一个关于系数矩阵条件的警告。

b = 1 (3,1);x = A \ b
警告:矩阵是接近单数或严重缩放。结果可能不准确。RCOND = 1.850372 e-17。
x =3×1-0.6250 1.3750 -0.7500

现在创建一个分解对象为矩阵,并求解相同的线性方程组。指定“CheckCondition”作为mldivide不检查系数矩阵的条件。即使返回的是相同的解,mldivide不显示警告信息。

dA =分解(,“CheckCondition”、假);x = dA \ b
x =3×1-0.6250 1.3750 -0.7500

使用isIllConditioned命令,检查分解对象基于病态矩阵。

tf = isIllConditioned (dA)
tf =逻辑1

介绍了R2017b

这个话题有用吗?