文档

分解

求解线性系统的矩阵分解

描述

分解创建可重用矩阵分解(LU, LDL, Cholesky, QR,和更多),使您能够解决线性系统(Ax = bxA = b)更有效率。例如,计算后dA =分解(一)调用dA \ b返回相同的向量一个\ b,但通常要快得多。分解对象非常适合于解决需要重复解决的问题,因为系数矩阵的分解不需要多次执行。金宝搏官方网站

你可以使用分解对象你可以在原来的系数矩阵上使用很多相同的运算符一个

  • 复杂的共轭转置达的

  • 否定- da

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

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

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

创建

描述

例子

=分解(一个返回矩阵的分解一个你可以用它来更有效地求解线性方程组。分解类型会根据输入矩阵的属性自动选择。

例子

=分解(一个类型指定要执行的分解类型。类型可以“qr”“鳕鱼”“陆”“低密度脂蛋白”“胆固醇”“三角”“permutedTriangular”“联合”“hessenberg”,或“对角线”

例子

=分解(一个类型triangularFlag的上或下三角形部分一个是用来分解的。triangularFlag可以“上”“低”.使用此语法,分解类型必须为“低密度脂蛋白”“胆固醇”,或“三角”

例子

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

输入参数

全部展开

系数矩阵。系数矩阵在左侧线性方程组中表示为Ax = b或在右边作为xA = b

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

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

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

价值

矩阵的分解一个

笔记

“汽车”(默认)

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是置换矩阵还是两者都是l而且U带状。

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

“hessenberg”

一个 P l U

P是一个排列矩阵,l是带状,U是上三角。

一个第一个子对角线以下必须有0。

“对角线”

一个 D

D是斜的。

一个必须对角线。

标志仅使用系数矩阵的上或下三角部分,指定为其中之一“上”“低”.此选项支持金宝app“三角”“胆固醇”,“低密度脂蛋白”分解类型。

  • “三角”-如果上三角矩阵和下三角矩阵都存储在同一个矩阵中,则使用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分解的枢轴公差,指定为标量或向量。指定一个标量值以更改公差向量中的第一个元素,或指定一个双元素向量以更改两个值。较小的枢轴公差往往导致更稀疏的LU因子,但解可能变得不准确。较大的值可以得到更精确的解决方案,但并不总是这样,而且通常会增加总工作和内存使用量。

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

属性

全部展开

此属性是只读的。

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

数据类型:

此属性是只读的。

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

数据类型:字符

切换以检查系数矩阵的条件,指定为逻辑的或逻辑的1真正的)或逻辑0).如果CheckCondition真正的当系数矩阵条件差或秩低时,用mldivide (\)mrdivide (/)产生警告。

数据类型:逻辑

此属性是只读的。

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

数据类型:字符

此属性是只读的。

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

数据类型:逻辑

此属性是只读的。

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

数据类型:逻辑

此属性是只读的。

指示系数矩阵是稀疏的,以逻辑形式返回1真正的)或逻辑0).

数据类型:逻辑

此属性是只读的。

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

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

对象的功能

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

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

的基础矩阵的条件号或秩分解对象。由于采用了不同的算法,这些函数在分解对象可以与直接在系数矩阵上使用相同的函数相比有所不同。

排名
  • 只有一个输入的表单排名(dA)是支持金宝app的。

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

  • 排名的价值取决于对的选择RankTolerance如果指定。

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

  • 金宝app支持除“qr”而且“鳕鱼”

例子

全部折叠

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

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

创建一个稀疏矩阵一个和随机的起始向量x1而且x2

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

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

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

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

tic dA =分解(A);ii=1:100 x2 = dA \ x2;X2 = X2 /范数(X2);结束toc
运行时间为1.225495秒。
λ= x2的* * x2
λ= -0.6707

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

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

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

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

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

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

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

dA_qr =分解(,“qr”
MatrixSize: [3 3] Type: 'qr'显示所有属性
x = dA_qr \ b
警告:Rank不足,Rank = 1, tol = 1.153778e-15。
x =3×11.0000 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 =分解(,“三角”“上”
MatrixSize: [10 10] Type: ' triangle '显示所有属性

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

创建一个病态的系数矩阵。在这个矩阵中,把前两列加起来,就得到第三列。

A = [1 2 1.5;3 4 3.5;5 6 5.5)
一个=3×31.000 2.000 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.326673 e-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