主要内容

分解

矩阵分解求解线性系统

描述

分解创建可重用的矩阵分解(LU,低密度脂蛋白,柯列斯基、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 /一个

自动选择矩阵分解类型的基于系数矩阵的性质。分解是如何选择的更多信息,请参阅算法的部分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是一个下三角矩阵与对角1 s,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是斜的。

一个必须对角线。

国旗只使用系数矩阵的上或下三角部分,指定为“上”“低”。该选项支持金宝app“三角”,“胆固醇”,“低密度脂蛋白”分解类型。

  • “三角”——如果一个上、下三角矩阵存储在相同的矩阵,然后使用triangularFlag指定唯一的三角矩阵。

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

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:dA =分解(‘qr’,‘CheckCondition’,假)执行的QR分解一个和关闭警告约当系数矩阵的条件用于解决线性系统。

一般参数

全部展开

系数矩阵的切换检查条件,指定为逗号分隔组成的“CheckCondition”和逻辑1(真正的)或逻辑0()。如果CheckCondition真正的系数矩阵是严重的或低等级,然后解决线性系统使用mldivide (\)mrdivide (/)产生警告。

数据类型:逻辑

排名宽容,指定为负的标量。指定公差可以帮助防止溶液易受随机噪声的系数矩阵。

分解计算的秩一个对角元素的数量R矩阵的QR分解(Q, R, p) = qr (A, 0)绝对值大于托尔。如果的秩一个k,然后低秩近似的一个是由乘以第一k由第一个kR。改变公差影响的低秩近似一个

请注意

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

稀疏矩阵的参数

全部展开

带密度阈值,指定为一个标量值的范围[0 1]。的价值“BandDensity”决定了密度稀疏,带状系数矩阵必须联合解算器的使用mldivide (\)mrdivide (/)当解决一个方程组。如果乐队系数矩阵的密度大于指定的乐队密度,然后使用联合解算器。

乐队密度的定义是:在乐队(# 0)/(#乐队中的元素)。的值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 *哒是一个分解对象相当于的,但有一个值3ScaleFactor

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

对象的功能

主函数和运算符,您可以使用分解对象是有关解决方程的线性系统。如果分解类型“qr”,那么你不能解决一个“\ BB / A。相反,使用“鳕鱼”问题与形式。

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

你也可以检查基础矩阵的条件数或等级分解对象。因为不同的算法,使用这些函数的结果分解对象可以使用相同的功能不同而直接在系数矩阵。

排名
  • 只有1-input形式排名(dA)是支持金宝app的。

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

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

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

  • 金宝app除了支持所有分解类型“qr”“鳕鱼”

例子

全部折叠

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

逆迭代是一个迭代的特征值的算法,解决了线性系统与许多右手边。它是一种迭代方法计算矩阵的特征值从一个猜出相应的特征向量。每次迭代计算x = x \,然后天平x的规范。

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

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

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

抽搐2 = 1:10 0 x1 = \ x1;x1 = x1 /规范(x1);结束toc
运行时间是18.108925秒。
λ= x1‘* * x1
λ= -0.6707

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

抽搐dA =分解(A);2 = 1:10 0 x2 = dA \ x2;x2 = x2 /规范(x2);结束toc
运行时间是1.126502秒。
λ= x2的* * x2
λ= -0.6707

算法的性能大大改善,因为矩阵一个不需要在每个迭代中映像。此外,即使反斜杠算法可以提高通过执行一个LU分解一个之前循环,分解对象提供访问所有相同的性能收益,而无需编写复杂的代码。

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

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

一个= 1 (3);dA =分解(一)
dA =分解与属性:MatrixSize:[3 3]类型:“陆”显示所有属性

解决线性系统使用一个向量的右边。

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.153778 e15汽油。
x =3×11.0000 0 0

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

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

=兰迪([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 =分解(,“三角”,“上”)
dA =分解与属性:MatrixSize:[10 10]类型:“三角”显示所有属性

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

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

= (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 使用向量1 s的右边。mldivide生产的调节系数矩阵的一个警告。

b = 1 (3,1);x = A \ b
警告:矩阵是奇异的工作精度。
x =3×1南正无穷

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

dA =分解(,“CheckCondition”、假);x = dA \ b
x =3×1南正无穷

使用isIllConditioned函数检查是否分解对象是基于一个坏脾气的矩阵。

tf = isIllConditioned (dA)
tf =逻辑1

引用

[1]戴维斯,蒂莫西·a .”算法930:因式分解:面向对象的线性系统MATLAB解决。”ACM交易的数学软件39岁的没有。4(2013年7月):队。https://doi.org/10.1145/2491491.2491498

扩展功能

版本历史

介绍了R2017b