主要内容

圣言会

奇异值和向量的子集

描述

例子

年代=圣言(一个返回六大矩阵奇异值的向量一个.当计算所有单个值时都很有用圣言会是计算方式昂贵的,例如用大稀疏矩阵。

例子

年代=圣言(一个k返回k最大的奇异值。

例子

年代=圣言(一个kσ返回k的值为奇异值σ.例如,圣言(k“最小”)返回k最小的奇异值。

年代=圣言(一个kσ名称,价值使用一个或多个名称-值对参数指定其他选项。例如,圣言(k,σ,“宽容”,1 e - 3)调整算法的收敛公差。

例子

年代=圣言(一个kσ选择使用结构指定选项。

例子

年代=圣言(好玩儿n___指定函数句柄。好玩儿而不是矩阵。第二个输入n给出矩阵的大小一个中使用的好玩儿.您可以选择指定kσ选择,或名称-值对作为额外的输入参数。

例子

U年代V) =圣言(___返回左奇异向量U,对角矩阵年代奇异值和右奇异向量V.您可以在以前的语法中使用任何输入参数组合。

例子

U年代V国旗) =圣言(___也返回收敛标志。如果国旗0,然后所有的奇异值都融合在一起。

例子

全部收缩

矩阵一个= delsq (numgrid (' C ', 15))是一个对称正定矩阵,其单数值在间隔(0 8)中合理分布。计算六个最大的奇异值。

一个= delsq (numgrid (“C”、15));s =圣言(A)
s =6×17.8666 7.7324 7.6531 7.5213 7.4480 7.3517

指定第二个输入以计算最大奇异值的特定数量。

s =圣言(3)
s =3×17.8666 7.7324 7.6531

矩阵一个= delsq (numgrid (' C ', 15))是一个对称正定矩阵,其奇异值在区间(0 8)内分布合理。

一个= delsq (numgrid (“C”、15));s =圣言(5“最小”
s =5×10.5520 0.4787 0.3469 0.2676 0.1334

创建一个稀疏的100 × 100 Neumann矩阵。

C =画廊(“纽曼”, 100);

计算十个最小的奇异值。

党卫军=圣言(C, 10,“最小”
党卫军=10×10.9828 0.9049 0.5625 0.5625 0.4541 0.4506 0.2256 0.1139 0.1139

计算10个最小的非零奇异值。因为矩阵有一个等于零的奇异值“smallestnz”选择省略了。

SNZ = SVDS(C,10,“smallestnz”
snz =10×10.9828 0.9828 0.9049 0.5625 0.5625 0.4541 0.4506 0.2256 0.1139 0.1139

创建两个矩阵来表示稀疏矩阵中的右上和左下非零块。

n = 500;B =兰德(500);C =兰德(500);

节省好玩儿在当前目录中,以便可以使用圣言会

功能y = Afun (x, tflag, B, C, n)如果比较字符串(tflag“notransp”) y = [B*x(n+1:end)];C * x (1: n)];别的* x y = [C”(n + 1:结束);B * x (1: n)];结束

功能好玩儿使用BC要计算斧头或者‘* x(取决于指定的标志),而不是实际形成整个稀疏矩阵A = [0 (n) B;C 0 (n)).利用矩阵的稀疏性模式,在计算时节省内存斧头‘* x

好玩儿计算的10个最大奇异值一个.通过BC, 和n作为好玩儿

s = svds(@(x,tflag)afun(x,tflag,b,c,n),[1000 1000],10)
S = 250.3248 249.9914 12.7627 12.7232 12.6988 12.6608 12.6166 12.5643 12.5419 12.4512

直接计算的10个最大奇异值一个来比较结果。

A = [0 (n) B;c zeros(n)];s = SVDS(A,10)
S = 250.3248 249.9914 12.7627 12.7232 12.6988 12.6608 12.6166 12.5643 12.5419 12.4512

West0479.是一个实值479 × 479稀疏矩阵。该矩阵具有少量大奇异值和大量小奇异值。

加载West0479.并将其存储为一个

负载West0479.一个= west0479;

的奇异值分解一个,返回六个最大的奇异值和相应的奇异载体。指定第四个输出参数以检查奇异值的融合。

[U, V,添加]=圣言();添加
cflag = 0.

添加表示所有奇异值收敛。奇异值在输出矩阵的对角线上年代

s =诊断接头(s)
s =6×1105× 3.1895 3.1725 3.1695 3.1685 3.1669 0.3038

通过计算完全奇异值分解来检查结果一个.转换一个完整的矩阵和使用圣言会

[U1,S1,V1] = SVD(满(a));

画出的最大的六个奇异值一个计算圣言会圣言会使用对数刻度。

S2 = DIAG(S1);半机(S2(1:6),“r”。) 抓住semilogy(年代,“罗”'Markersize',10)标题(' west0479的奇异值')传说(“圣言”'svds'

图中包含一个轴对象。标题奇异值为west0479的axis对象包含2个类型为line的对象。这些对象表示svd, svds。

创建稀疏对角线矩阵并计算六个最大的奇异值。

A = diag(sparse([1e4*ones(1,8) 1e4:-1:1]));s =圣言(A)
警告:6个请求的奇异值中只有2个收敛。不收敛的奇异值为NaN。
s =6×1104×1.0000 0.9999南楠楠

圣言会算法产生一个警告,因为执行了最大的迭代次数,但不能满足公差。

最有效的解决收敛问题的方法是使用更大的值来增加计算中使用的Krylov子空间的最大尺寸“SubspaceDimension”.通过传入名称-值对来实现吗“SubspaceDimension”值为60

s =圣言(6“最大”“SubspaceDimension”,60)
s =6×1104× 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

计算几乎奇异矩阵的10个最小的奇异值。

rng.默认的格式短缺B = spdiags ([repelem ([1;1 e],[2] 198年)(200,1)],[0,1],200年,200年);s1 =圣言(B 10“最小”
警告:检测到大残留范数。这可能是由于输入矩阵的条件不好(条件号为1.0008e+16)。
s1 =10×17.0945 7.0945 7.0945 7.0945 7.0945 7.0945 7.0945 7.0945 0.2593 0.0000

警告表明圣言会无法计算出合适的奇异值。的失败圣言会是由于最小奇异值和第二最小奇异值之间的差距。圣言(…,“最小”)需要倒置B,会导致很大的数值误差。

为了比较,使用圣言会

s =圣言(完整的(B));s = s (end-9:结束)
s =10×10.1420 0.1262 0.1105 0.0947 0.0789 0.0631 0.0474 0.0316 0.0158 0.0000

为了重现这个计算圣言会,做QR分解B.三角矩阵的奇异值R是一样的吗B

(Q, R, p) = qr (B, 0);

画出每一行的范数R

rownormR =√诊断接头(R * R '));semilogy (rownormR);semilogy(大小(R, 1), rownormR(结束),“罗”

图中包含一个轴对象。轴对象包含2个类型的物体。

最后一项R接近于零,这导致了溶液的不稳定性。

通过设置的最后一行来防止这个条目破坏解决方案的好的部分R完全为零。

R (,) = 0;

圣言会求10个最小的奇异值R.结果与通过获得的结果相当圣言会

sr =圣言(R, 10日“最小”
sr =10×10.1420 0.1262 0.1105 0.0947 0.0789 0.0631 0.0474 0.0316 0.0158 0

计算的奇异向量B利用该方法对左右奇异向量进行变换和置换向量p

(U, V) =圣言(R, 20日“年代”);U = Q *;: V (p) = V;

输入参数

全部收缩

输入矩阵。一个通常(但不总是)是一个大型稀疏矩阵。

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

要计算的奇异值的数目,指定为正标量整数。圣言会如果满足这些条件中的任一条件,则返回比请求的奇数值更少:

  • kmin(大小(A))

  • σ= ' smallestnz 'k的非零奇异值的个数是否大于一个

如果k是不是太大了圣言会将其替换为的最大有效值k

例子:SVDS(A,2)的两个最大的奇异值一个

奇异值的类型,指定为这些值之一。

选项 描述

“最大”(默认)

最大奇异值

“最小”

最小的奇异值

“smallestnz”

最小的非零奇异值

标量

最接近标量的奇异值

例子:圣言(k“最小”)计算k最小的奇异值。

例子:圣言(k, 100)计算k最接近于100.

数据类型:|字符|字符串

选项结构,指定为包含该表中的一个或多个字段的结构。

请注意

不建议使用options结构来指定选项。请使用名称-值对。

选择字段 描述 名称-值对

融合公差

“宽容”
麦克斯特

最大迭代次数

“MaxIterations”
p

krylov子空间的最大大小

“SubspaceDimension”
情况

左起始向量

“LeftStartVector”

右起始向量

“RightStartVector”
DISP.

诊断信息显示级别

“显示”
失败 输出非收敛奇异值的处理 “FailureTreatment”

请注意

圣言会忽略了选项p使用数字标量班时σ

例子:选择。托= 1e-6, opts.maxit = 500创建一个为字段设置值的结构麦克斯特

数据类型:塑造

矩阵函数,指定为函数句柄。功能好玩儿必须满足以下条件:

  • Afun (x, notransp)接受一个向量x并返回产品斧头

  • Afun (x,“透明”)接受一个向量x并返回产品‘* x

请注意

仅在案例中使用功能处理σ= '大'(这是默认值)。

例子:SVDS(AFUN,[1000 1200])

矩阵的大小一个是由好玩儿,指定为两个元素大小的向量(mn)

名称-值参数

指定可选的逗号分隔的对名称,价值参数。的名字参数名和价值是相应的价值。的名字必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:s =圣言(k,σ,“宽容”,1平台以及MaxIterations, 100)放松收敛容忍度,使用更少的迭代。

收敛公差,指定为逗号分隔对组成“宽容”和一个非负的实数标量。

例子:s = svds(a,k,sigma,'容忍',1e-3)

最大算法迭代次数,指定为逗号分隔对“MaxIterations”一个正整数。

例子:s = svds(a,k,sigma,'maxtorations',350)

由逗号分隔的对组成的克雷洛夫子空间的最大大小“SubspaceDimension”和一个非负整数。的“SubspaceDimension”值必须大于或等于K + 2,在那里k为奇异值的个数。

对于问题在哪里圣言会收敛失败,增加的值“SubspaceDimension”可以改善收敛性。

的数值将忽略此选项σ

例子:s = svds(a,k,sigma,'subspacedimension',25)

左起始向量,指定为逗号分隔对组成“LeftStartVector”和一个数字向量。

您可以指定“LeftStartVector”或者“RightStartVector”,但不是两者都有。如果两个选项都没有指定,则为——- - - - - -n矩阵一个,默认值为:

  • M - 左初始启动向量设置为Randn(M,1)

  • m > = n-右初始起始向量设置为Randn(n,1)

指定不同的随机起始向量的主要原因是控制用于生成向量的随机数流。

请注意

圣言会使用私有随机数流以可重复的方式选择起始向量。改变随机数种子影响这种使用randn

例子:s = svds(a,k,sigma,'leftstartvector',Randn(M,1))使用从全局随机数流中绘制值的随机启动向量。

数据类型:

右初始起始向量,指定为逗号分隔对组成“RightStartVector”和一个数字向量。

您可以指定“LeftStartVector”或者“RightStartVector”,但不是两者都有。如果两个选项都没有指定,则为——- - - - - -n矩阵一个,默认值为:

  • M - 左初始启动向量设置为Randn(M,1)

  • m > = n-右初始起始向量设置为Randn(n,1)

指定不同的随机起始向量的主要原因是控制用于生成向量的随机数流。

请注意

圣言会使用私有随机数流以可重复的方式选择起始向量。改变随机数种子影响这种使用randn

例子:s =圣言(k,σ,RightStartVector, randn (n - 1))使用从全局随机数流中绘制值的随机启动向量。

数据类型:

处理非收敛奇异值,指定为逗号分隔对组成“FailureTreatment”其中一个选择是'封造''保持',或“下降”

的价值“FailureTreatment”确定如何在输出中显示非收敛奇异值。

选项

对输出的影响

“下降”

从输出中去除非收敛奇异值,会导致圣言会返回比请求的更少的奇异值。这个值是数值值的默认值σ

'封造'

将非收敛奇异值替换为值。无论何时,此值都是默认值σ不是数字。

'保持'

非收敛奇异值包含在输出中。

例子:s =圣言(k,σ,“FailureTreatment”,“下降”)从输出中删除非转换的奇异值。

数据类型:字符|字符串

切换用于诊断信息显示,指定为真的0,或1.的值或者0关闭显示,而值真的或者1打开。

输出参数

全部收缩

作为列向量返回的奇异值。奇异值是按递减顺序排列的非负实数。

左奇异向量,返回为矩阵的列。如果一个是一个——- - - - - -n矩阵和您要求k奇异值,然后U是一个——- - - - - -k矩阵具有正常柱。

不同的机器,matlab释放®或者或参数(例如起始向量和子空间尺寸)可以产生仍然是数值准确的不同奇异矢量。对应的列UV可以翻转标志,因为这不会影响表达的值a = u * s * v'

奇异值,以对角矩阵的形式返回。的对角元素年代为非负奇异值。如果一个是一个——- - - - - -n矩阵和您要求k奇异值,然后年代k——- - - - - -k

正确的奇异载体,作为矩阵的列返回。如果一个是一个——- - - - - -n矩阵和您要求k奇异值,然后V是一个n——- - - - - -k矩阵具有正常柱。

不同的机器、MATLAB版本或参数(如起始向量和子空间维度)可以产生不同的奇异向量,但它们在数值上仍然是准确的。对应的列UV可以翻转标志,因为这不会影响表达的值a = u * s * v'

收敛标志,作为标量返回。的值0表示所有奇异值收敛。否则,不是所有的奇异值都收敛。

使用此收敛标志输出将抑制关于收敛失败的警告。

提示

  • svdsketch.当你事先不知道要用什么等级时有用吗圣言会,但是你知道SVD的近似应该满足什么公差。

  • 圣言会使用私有随机数流生成默认的开始向量,以确保跨运行的再现性。使用。设置随机数生成器状态rng.在调用之前圣言会不影响输出。

  • 使用圣言会并不是寻找小而密集矩阵的奇异值的最有效的方法。对于这样的问题,使用SVD(全(a))可能会更快。例如,在一个500 × 500的矩阵中找到三个奇异值是一个相对较小的问题圣言会很容易处理。

  • 如果圣言会对于给定的矩阵,如果不能收敛,则通过增大的值来增大Krylov子空间的大小“SubspaceDimension”.作为辅助选项,调整最大迭代次数(“MaxIterations”)和收敛容差(“宽容”)也有助于收敛行为。

  • 增加k有时可以提高性能,特别是当矩阵有重复的奇异值时。

兼容性考虑因素

全部展开

R2016a行为改变

参考文献

[1] Baglama,J.和L. Reichel,“毫无隐含地重新启动Lanczos Bidiagalization方法。”SIAM科学计算杂志.卷。27,2005,第19-42页。

[2] Larsen,R. M.“带部分重正交化的Lanczos双对角化。奥胡斯大学计算机科学部.DAIMI pb - 357, 1998。

扩展功能

另请参阅

||

主题

在R2006A之前介绍