主要内容

稀疏矩阵的操作

操作效率

计算复杂度

稀疏的操作的计算复杂度成正比nnz,矩阵中的非零元素的个数。计算复杂度也线性取决于行大小和列的大小n矩阵的,而是独立的产品m * n零和非零元素的总数。

的复杂性相当复杂的操作,如稀疏线性方程组的解,包括等因素排序和填写,在前一节中讨论。不过,总体而言,一个稀疏矩阵操作所需的计算机时间成正比的算术运算零数量。

算法细节

稀疏矩阵传播通过计算根据这些规则:

  • 函数接受一个矩阵和返回一个标量或矢量大小不变总是产生输出完整的存储格式。例如,大小函数始终返回一个完整的矢量,其输入是否完整或稀疏。

  • 接受标量或矢量的函数并返回矩阵,如0,,兰德,眼睛,总是返回完整的结果。这是必要的,以避免意外引入稀疏。稀疏的模拟0 (m, n)仅仅是稀疏(m, n)。稀疏的类似物兰德眼睛sprandspeye,分别。没有稀疏的模拟功能

  • 一元函数接受一个矩阵并返回一个矩阵或向量保持操作数的存储类。如果年代是一个稀疏矩阵,然后呢胆固醇(S)也是一个稀疏矩阵,然后呢诊断接头(S)是一个稀疏的向量。Columnwise等功能马克斯总和也稀疏向量,即使这些可以完全非零向量。这条规则是重要的例外稀疏的完整的功能。

  • 二元操作符产生稀疏的结果如果两个操作数都是稀疏的,全部结果如果都是满的。混合操作数,结果是完整的,除非操作保存稀疏。如果年代是稀疏的,F满了,然后S + F,S * F,F \ S是完整的,而美国* FS&F是稀疏的。在某些情况下,结果可能是稀疏即使矩阵有几个零元素。

  • 矩阵连接使用函数或方括号产生稀疏混合操作数的结果。

排列和重新排序

的排列稀疏矩阵的行和列年代可以用在两个方面:

  • 一个置换矩阵P作用于的行年代作为P * S或在列* P '

  • 一个排列向量p,这是一个完整的包含的排列向量1:n,作用于行年代作为:S (p),或者在列S (: p)

例如:

p = (1 2 3 4 5) I =眼睛(5,5);P =我(P:)的e = (4,1);S =诊断接头(11:11:55)+诊断接头(e, 1) +诊断接头(e, 1)
p = 1 2 3 4 5 p = 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 S = 22 11 1 0 0 0 1 1 0 0 0 1 33 1 0 0 0 1 44 1 0 0 0 1 55

你现在可以试试使用排列向量排列p和置换矩阵P。例如,语句:S (p)P * S返回相同的矩阵。

:S (p)
ans 33 = 11 1 0 0 0 0 1 1 0 0 0 1 44 1 1 22 1 0 0 0 0 0 1 55
P * S
ans 33 = 11 1 0 0 0 0 1 1 0 0 0 1 44 1 1 22 1 0 0 0 0 0 1 55

同样的,S (: p)* P '两种生产

* P '
ans 22 = 11 0 0 1 0 1 1 0 0 0 33 1 1 0 0 1 44 0 1 0 0 1 0 55

如果P是一个稀疏矩阵,那么使用存储两种表示成正比吗n你可以申请年代时间成正比nnz (S)。向量表示稍微紧凑和高效,因此不同的稀疏矩阵排列的例程返回完整的行向量除了旋转排列的LU分解(三角形),它返回一个矩阵的LU分解。

将两者之间的置换表示:

n = 5;I = speye (n);公关=我(p:);电脑=我(:p);电脑= (1:n) *电脑
电脑= 1 2 3 4 5
公关= (pr * (1: n)“)”
公关= 1 2 3 4 5

的倒数P仅仅是R = P '。你可以计算的倒数pr (p) = 1: n

r (p) = 1:5
r = 1 4 2 3 5

重新排序为稀疏

重新排序的列矩阵通常可以使其路或QR因素稀疏的。重新排序的行和列通常可以使其稀疏的柯列斯基因素。最简单的这样的重新排序是由非零的列数。这是有时好重新排序矩阵非常不规则的结构,特别是如果有伟大的行或列的非零计数的变化。

colperm计算一个排列的命令列矩阵非零的数量在每一列从最小到最大。

重新排序来减少带宽

反向Cuthill-McKee排序旨在减少配置文件或矩阵的带宽。不能保证找到尽可能最小的带宽,但它通常。的symrcm函数实际上操作的非零结构对称矩阵+“,但结果也适用于非对称矩阵。这个命令是用于矩阵来自一维问题或在某种意义上的问题细长

近似最小程度排序

图中的一个节点的度是连接该节点的数量。这是一样的数量非对角的邻接矩阵的非零元素对应的行。最低程度的近似算法生成一个排序的基础上如何改变这些度在高斯消去法或柯列斯基分解。这是一个复杂和强大的算法通常会导致比大多数其他排列稀疏的因素,包括列数和反向Cuthill-McKee。因为跟踪每个节点的度是非常耗时的,最低程度的近似算法使用一个近似的程度,而不是精确的程度。

这些MATLAB®功能实现最低程度的近似算法:

  • symamd——使用对称矩阵。

  • colamd——使用非对称矩阵和对称矩阵的形式*““*

看到重新排序和稀疏矩阵的分解例如使用symamd

你可以改变各种参数与算法使用的细节spparms函数。

有关所使用的算法colamdsymamd,请参阅[5]。近似度的算法是基于使用[1]

嵌套的解剖点

像近似最小程度排序,嵌套的解剖排序算法实现的解剖函数重新排列了矩阵行和列通过考虑矩阵图的邻接矩阵。该算法减少了问题的规模要小得多,对图中顶点一起崩溃。重新排序后的小图表,然后应用投影算法和改进措施扩大图回到原来的大小。

嵌套的解剖算法产生高质量的重新排序并执行特别好与有限元矩阵相比其他重新排序技术。对嵌套的解剖排序算法的更多信息,见[7]

保理稀疏矩阵

LU分解

如果年代是一个稀疏矩阵,下面的命令返回三个稀疏矩阵l,U,P这样P * S = L * U

陆(L U P) =(年代);

获得的因素通过高斯消去法部分旋转。置换矩阵P只有n非零元素。与密度矩阵,该声明陆[L U] = (S)返回一个交换单位下三角矩阵和一个上三角矩阵的乘积年代。就其本身而言,陆(S)返回lU在一个矩阵没有主信息。

三个输出语法陆(L U P) = (S)选择P通过数值部分转动,但不主改善稀疏的因素。另一方面,output语法[L U P, Q] =陆(S)选择P通过阈值部分旋转,并选择P改善稀疏的因素。

你可以控制旋转在稀疏矩阵

陆(年代,打)

在哪里是一个主阈值在[0,1]。旋转时对角条目列级不到乘以任何sub-diagonal条目列的大小。打= 0部队斜旋转。打= 1是默认的。(默认为0.1output语法)。

当你打电话有三个或更少的输出,MATLAB自动分配所需的内存稀疏lU在分解的因素。除了output语法,MATLAB不使用任何符号LU prefactorization确定和设置数据结构的内存需求。

重新排序和稀疏矩阵的分解

这个例子展示了重新排序和稀疏矩阵分解的影响。

如果你获得一个好的列排列p减少补充物,也许symrcmcolamd,然后计算陆(S (: p))花费更少的时间比计算和存储陆(S)

创建一个稀疏矩阵使用巴基球的例子。

B =巴基;

B正好有三个非零元素在每行和每列。

创建两个排列,r使用symrcmsymamd分别。

r = symrcm (B);m = symamd (B);

两个排列对称反向Cuthill-McKee排序和对称近似最小程度排序。

创建间谍阴谋显示三个巴基球图的邻接矩阵与这三个不同的编号。当地,pentagon-based结构的原始编号并不明显。

图次要情节(1、3、1)间谍(B)标题(“原始”次要情节(1、3、2)间谍(B (r, r))标题(“反向Cuthill-McKee”次要情节(1,3,3)间谍(B (m m))标题(最小程度的)

图包含3轴对象。坐标轴对象1与原有标题包含一个类型的对象。坐标轴对象2标题反向Cuthill-McKee包含一个类型的对象。坐标轴对象3标题最小程度上包含一个类型的对象。

反向Cuthill-McKee订购,r,减少了带宽和对角线附近集中所有非零元素。的近似最小程度排序,,产生一个碎片形结构与大量的零。

看到填写生成LU分解的巴基球,使用speye稀疏矩阵,插入3 s的对角线上B

B = B - 3 * speye(大小(B));

因为每一行和现在是零,这新的B实际上是单数,但它仍然是指导来计算其LU分解。当只有一个输出参数调用时,返回两个三角形的因素,lU在一个稀疏矩阵。非零的数量,矩阵是一个测量所需的时间和存储解决线性系统涉及B

这里有三个排列的非零项。

  • 陆(B)(原):1022

  • 陆(B (r, r))(反向Cuthill-McKee): 968

  • 陆(B (m m))(近似最小程度):636

尽管这是一个小例子,典型的结果。原编号方案导致最填写。反向Cuthill-McKee订购的代替者集中在乐队,但它几乎是前两序一样广泛。用于近似最小程度排序,保留了相对较大的零块在消除和填写的数量显著低于其他生成的排序。

间谍下面的情节反映了每个重新排序的特征。

图次要情节(1、3、1)间谍(lu (B))标题(“原始”次要情节(1、3、2)间谍(lu (B (r, r)))标题(“反向Cuthill-McKee”次要情节(1,3,3)间谍(lu (B (m m)))标题(最小程度的)

图包含3轴对象。坐标轴对象1与原有标题包含一个类型的对象。坐标轴对象2标题反向Cuthill-McKee包含一个类型的对象。坐标轴对象3标题最小程度上包含一个类型的对象。

柯列斯基分解

如果年代是一个对称(或埃尔米特),正定,稀疏矩阵,下面的语句返回一个稀疏,上三角矩阵RR * R =年代

R =胆固醇(S)

胆固醇不会自动为稀疏主,但你可以计算近似最小程度和概要限制为使用排列吗胆固醇(S (p, p))

自从乔里斯基算法不使用旋转稀疏和不需要旋转数值稳定,胆固醇做一个快速的计算所需的内存分配所有的记忆开始时分解。您可以使用symbfact使用相同的算法胆固醇,计算分配多少内存。

QR分解

MATLAB计算完整的稀疏矩阵的QR分解年代

(Q, R) = qr (S)
[Q, R E] = qr (S)

但这通常是不切实际的。酉矩阵经常不能有很高比例的零元素。一个更实际的选择,有时被称为“Q-less QR分解”,是可用的。

与一个稀疏的输入参数和一个输出参数

R = qr (S)

返回的上三角部分QR分解。矩阵R提供了柯列斯基分解矩阵与正规方程:

‘* R = S *

然而,数字信息的损失中固有的计算*年代年代是可以避免的。

有两个输入参数有相同数量的行,和两个输出参数,声明

[C R] = qr(年代,B)

应用正交变换B、生产C =问' * B没有计算

Q-less QR分解允许稀疏最小二乘问题的解决方案

最小化 一个 x - - - - - - b 2

有两个步骤:

[c R] = qr (A, b);x = R \ c

如果一个是稀疏,但不是广场,MATLAB解决线性方程反斜杠符使用这些步骤:

x = A \ b

或者,你也可以自己做分解和检查R等级不足。

也可以解决一个序列的最小二乘线性系统与不同的右手边,b,不一定是已知的时候R = qr (A)计算。该方法解决了“semi-normal方程‘* R * x =“* b

x = R \ (R \ (“* b))

然后采用一步迭代优化,减少圆滑的错误:

r = b - x *;e = R \ (R \ (* R));x = x + e

不完全分解

iluichol函数提供近似,不完整的分解,它是有用的为稀疏的迭代方法预调节器。

ilu函数产生三不完整的右下方(ILU)分解:补零ILU(ILU (0)),克劳特ILU版本(ILUC(τ))和ILU阈值下降和旋转(ILUTP(τ))。的ILU (0)从不轴心和由此产生的因素只有在输入矩阵非零非零的位置。这两个ILUC(τ)ILUTP(τ)然而,基于阈值的下降与用户定义的宽容τ

例如:

一个=画廊(“纽曼”1600)+ speye (1600);
ans = 7840
陆nnz (())
ans = 126478

显示,一个有7840个非零,其完整的LU分解有126478个非零。另一方面,下面的代码显示了不同的ILU输出:

[L U] = ilu(一个);nnz (L) + nnz (U)造(A, 1)
ans = 7840
规范(A - (L * U)。* spones (A),“摇来摇去”)。/规范(,“摇来摇去”)
ans = 4.8874 e-17
选择。类型=“ilutp”;选择。droptol = 1的军医;[L U P] = ilu(选择一个);nnz (L) + nnz (U)造(A, 1)
ans = 31147
常模(P * A - L * U,“摇来摇去”)。/规范(,“摇来摇去”)
ans = 9.9224 e-05
选择。类型=“克劳特”;[L U P] = ilu(选择一个);nnz (L) + nnz (U)造(A, 1)
ans = 31083
常模(P * l * U,“摇来摇去”)。/规范(,“摇来摇去”)
ans = 9.7344 e-05

这些计算表明,填零因素有7840 0,ILUTP(1)的军医因素有31147 0,ILUC(1)的军医因素有31083 0。同时,产品的相对误差的填零因素的模式上基本上是零一个。最后,分解产生的相对误差阈值下降的顺序相同公差下降,尽管这是没有保证的。看到ilu更多的选择和细节参考页面。

ichol函数提供了补零不完整的柯列斯基分解(集成电路(0))以及基于阈值的不完整的柯列斯基分解(ICT(τ)对称、正定稀疏矩阵。这些分解不完全LU分解的类似物上面,有许多相同的特点。例如:

一个= delsq (numgrid (“年代”,200));nnz (A)
ans = 195228
nnz(胆固醇(,“低”))
ans = 7762589
显示,一个有195228个非零,其完整的柯列斯基分解没有重新排序7762589 0。相比之下:
L = ichol(一个);nnz(左)
ans = 117216
规范(A - (L * L ')。* spones (A),“摇来摇去”)。/规范(,“摇来摇去”)
ans = 3.5805 e-17
选择。类型=“信息与通信技术”;选择。droptol = 1的军医;L = ichol(选择);nnz(左)
ans = 1166754
规范(L * L ',“摇来摇去”)。/规范(,“摇来摇去”)
ans = 2.3997 e-04

集成电路(0)只有非零的模式下的三角形吗一个,在的模式一个,产品匹配的因素。此外,ICT(1)的军医因素比完整的柯列斯基稀疏的因素,和之间的相对误差一个L * L '在同一订单下降的宽容。重要的是要注意,与提供的因素胆固醇提供的,默认的因素ichol下三角。看到ichol参考页面获取更多信息。

特征值和奇异值

两个函数可以计算一些特征值和奇异值指定。圣言会是基于eigs

函数来计算一些特征值和奇异值

函数

描述

eigs

一些特征值

圣言会

一些奇异值

这些功能是最常用的稀疏矩阵,但他们可以用全矩阵或甚至在MATLAB代码定义了线性算子。

该声明

[V,λ]= eigs (k,σ)

找到了k矩阵的特征值和相应的特征向量一个最近的“转变”σ。如果σ省略,最大特征值的大小。如果σ是零,最小特征值的大小。第二个矩阵,B广义特征值问题,可以包括:Aυ=λBυ。

该声明

[U, V] =圣言(A、k)

找到了k最大的奇异值一个

(U, V) =圣言(k,“最小”)

找到了k最小奇异值。

用于数值技术eigs圣言会介绍了[6]

稀疏矩阵的最小特征值

这个例子展示了如何找到一个稀疏矩阵的最小特征值和特征向量。

建立了五点拉普拉斯算子差分算子在65 - 65网格中l形,二维域。

L = numgrid (“L”,65);一个= delsq(左);

确定订单的数量和非零元素。

大小(一个)
ans =1×22945 2945
nnz (A)
ans = 14473

一个是订单2945和14473的矩阵非零元素。

计算最小的特征值和特征向量。

[v d] = eigs (1,“smallestabs”);

分配特征向量的分量在适当的网格点和产生结果的等高线图。

L (L > 0) =全(v (L (L > 0)));x = 1:1/32:1;轮廓(x, x, L, 15)轴广场

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象轮廓。

引用

[1]Amestoy, p R。,T. A. Davis, and I. S. Duff, “An Approximate Minimum Degree Ordering Algorithm,”暹罗《矩阵分析和应用程序4号,卷。17日,1996年10月,页886 - 905。

[2]巴雷特,R。,M. Berry, T. F. Chan, et al.,线性系统的解决方案模板:迭代方法的构建块、暹罗、费城1994人。

[3]戴维斯,助教,Gilbert, J. R., Larimore, S.I., Ng, E., Peyton, B., “A Column Approximate Minimum Degree Ordering Algorithm,”Proc,暹罗会议应用线性代数,1997年10月,29页。

[4]吉尔伯特,约翰·R。,Cleve Moler, and Robert Schreiber, “Sparse Matrices in MATLAB: Design and Implementation,”暹罗j .矩阵肛门。:1号卷。13日,1992年1月,页333 - 356。

[5]Larimore, s . I。一个近似最小程度列排序算法女士论文,计算机和信息科学与工程部门,佛罗里达大学盖恩斯维尔,佛罗里达州1998。

[6]萨阿德,尤瑟夫稀疏线性方程组迭代方法。PWS出版公司,1996。

[7]Karypis,乔治和一些Kumar。“快速和高质量多层次方案划分不规则图形。”暹罗期刊在科学计算。第一卷。20日,1999年,页359 - 392。

相关的话题