圣言会

奇异值和向量的子集

描述

例子

年代= SVDS(一个)返回矩阵的六个最大奇异值的向量一个。当计算所有的奇异值时,这是有用的SVD在计算上是昂贵的,例如对于大型稀疏矩阵。

例子

年代= SVDS(一个,k)返回k最大奇异值。

例子

年代= SVDS(一个,k,σ)返回k基于所述值的奇异值σ。例如,SVDS(A,K, '最小')返回k最小奇异值。

年代= SVDS(一个,k,σ,名称,值)指定与一个或更多个名称 - 值对的参数的附加选项。例如,圣言(k,σ,“宽容”,1 e - 3)调整算法的收敛容忍度。

例子

年代= SVDS(一个,k,σ,选择)指定使用的结构方案。

例子

年代= SVDS(Afun,n,___)指定一个函数句柄Afun代替的矩阵。第二个输入n给出矩阵的大小一个在使用Afun。您可以选择指定k,σ,选择或名称 - 值对作为附加输入参数。

例子

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

例子

(U,年代,V,) =圣言(___)也返回一个收敛标志。如果0,则所有奇异值收敛。

例子

全部折叠

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

A = delsq(numgrid('C'、15));s =圣言(A)
S =6×17.8666 7.7324 7.6531 7.5213 7.4480 7.3517

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

S = SVDS(A,3)
S =3×17.8666 7.7324 7.6531

矩阵A = delsq(numgrid( 'C',15))是一个奇异值在区间(0 8)合理分布的对称正定矩阵。计算5个最小的奇异值。

A = delsq(numgrid('C'、15));S = SVDS(A,5,“最小”)
S =5×10.5520 0.4787 0.3469 0.2676 0.1334

创建稀疏为100×100纽曼矩阵。

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

计算十个最小的奇异值。

SS = SVDS(C,10,“最小”)
SS =10×10.9828 0.9049 0.5625 0.5625 0.4541 0.4506 0.2256 0.1139 0.1139 0

计算10个最小非零奇异值。因为矩阵具有奇异值等于零,则'smallestnz'选择省略了。

snz =圣言(C, 10,'smallestnz')
新西兰统计局=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);

保存Afun在当前目录中,以便它可用于与使用圣言会

函数Y = Afun(X,tflag,B,C,N)如果STRCMP(tflag,'notransp')Y = [B * X(N + 1:结束);C *×(1:N)];其他的* x y = [C”(n + 1:结束);B * x (1: n)];结束

这个函数Afun使用BC来计算* x‘* x(取决于指定的标志),而不是实际形成整个稀疏矩阵A = [0 (n) B;C 0 (n))。这利用了矩阵的稀疏模式来节省计算中的内存* x‘* x

使用Afun计算的10个最大的奇异值一个。通过B,C,n作为附加输入来Afun

s =圣言(@ (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 0 (n)];s =圣言(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并将其存储为一个

负载west0479A = west0479;

计算的奇异值分解一个,返回六个最大的奇异值和相应的奇异向量。指定第四个输出参数来检查奇异值的收敛性。

[U,S,V,CFLAG] = SVDS(A);CFLAG
添加= 0

CFLAG表明所有的奇异值的收敛。奇异值是对角线上的输出矩阵的年代

S = DIAG(S)
S =6×1105* 3.1895 3.1725 3.1695 3.1685 3.1669 0.3038

通过计算的全奇异值分解来检验结果一个。兑换一个到一个完整的矩阵和使用SVD

[U1, S1, V1] =圣言(完整的(A));

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

s2 =诊断接头(S1);semilogy (s2 (1:6),“r”。)举行semilogy(S,“罗”,“MarkerSize”10)标题(“west0479的奇异值”)图例(“圣言”,“圣言”)

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

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

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

到地址收敛问题的最有效的方法是增加通过使用一个更大的值,在计算中使用的Krylov子空间的最大尺寸“SubspaceDimension”。通过传递名字 - 值对执行此操作“SubspaceDimension”与值60

S = SVDS(A,6,“最大”,“SubspaceDimension”、60)
S =6×1104×1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

计算一个近似奇异矩阵的10个最小奇异值。

rng默认格式shortgB = spdiags([repelem([1; 1E-7],[198,2])酮(200,1)],[0 1],200,200);S1 = SVDS(B,10,“最小”)
警告:检测到大量剩余范数。这可能是由于输入矩阵的条件不好(条件号1.0008e+16)。
S1 =10×17.0945 7.0945 7.0945 7.0945 7.0945 7.0945 7.0945 7.0945 7.0945 0.25927 7.0888e-16

警告表明圣言会无法计算正确的奇异值。与故障圣言会是由于最小和第二小的奇异值之间的差距。SVDS(..., '最小')需要反B,从而导致较大的数值误差。

为了进行比较,计算使用精确的奇异值SVD

S = SVD(全(B));S = S(端-9:结束)
S =10×10.14196 0.12621 0.11045 0.094686 0.078914 0.063137 0.047356 0.031572 0.015787 7.0888e-16

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

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

绘制每一行的范数R

rownormR = SQRT(DIAG(R * R'));semilogy(rownormR)保持;semilogy(大小(R, 1), rownormR(结束),“罗”)

在最后一项R几乎为零,这会导致不稳定性在溶液中。

通过设定的最后一排,从破坏的解决方案的好的部分防止该条目R要精确为零。

R(端,:) = 0;

使用圣言会找到的10个最小奇异值R。结果相媲美SVD

SR = SVDS(R,10,“最小”)
SR =10×10.14196 0.12621 0.11045 0.094686 0.078914 0.063137 0.047356 0.031572 0.015787

为了计算的奇异向量B使用该方法,使用变换的左和右奇异向量还有置换向量p

[U,S,V] = SVDS(R,20,“年代”);U = Q * U;V(P,:) = V;

输入参数

全部折叠

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

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

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

  • k大于min(大小(A))

  • σ= ' smallestnz 'k比的非零奇异值的数量多一个

如果k是不是太大了圣言会与最大有效值取代它k

例:圣言(2)返回的两个最大的奇异值一个

键入奇异值,指定为这些值之一。

选项 描述

“最大”(默认)

最大的奇异值

“最小”

最小奇异值

'smallestnz'

最小的非零奇异值

纯量

最接近标量的奇异值

例:SVDS(A,K, '最小')计算k最小奇异值。

例:圣言(k, 100)计算k最接近奇异值One hundred.

数据类型:|烧焦|

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

请注意

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

选择字段 描述 名称 - 值对
托尔

收敛公差

'公差'
麦克斯特

最大迭代次数

“MaxIterations”
p

Krylov子空间的最大大小

“SubspaceDimension”
U0

左起始向量

“LeftStartVector”
V0

权初始启动矢量

'RightStartVector'
disp

诊断信息显示级别

'显示'
失败 在输出nonconverged奇异值的处理 'FailureTreatment'

请注意

圣言会忽略选项p当使用数值标量移位时σ

例:opts.tol = 1E-6,opts.maxit = 500创建与用于字段设置值的结构托尔麦克斯特

数据类型:结构体

矩阵功能,指定为函数句柄。这个函数Afun必须满足以下条件:

  • Afun(X, 'notransp')接受一个向量x并返回产品* x

  • Afun(X, '运输')接受一个向量x并返回产品‘* x

请注意

仅在以下情况下使用函数句柄西格玛=“最大”(这是默认值)。

例:圣言(Afun [1000 - 1200])

矩阵的大小一个用于Afun,指定为两元件大小的矢量(mn)

名称-值对的观点

的可选逗号分隔对名称,值参数。名称参数名称和价值为对应值。名称必须出现在引号内。可以按任意顺序指定多个名称和值对参数名1,值1,...,NameN,值N

例:S = SVDS(A,K,西格玛, '容差',1E-10, 'MaxIterations',100)放宽收敛容忍度并使用更少的迭代。

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

例:s =圣言(k,σ,“宽容”,1 e - 3)

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

例:s =圣言(k,σ,MaxIterations, 350)

Krylov子空间的最大尺寸,指定为逗号分隔的一对组成的“SubspaceDimension”一个非负整数。的“SubspaceDimension”值必须大于或等于k + 2,其中k是奇异值的数量。

的问题,圣言会不收敛,保值增值“SubspaceDimension”可以改善收敛行为。

的数值将忽略此选项σ

例:s =圣言(k,σ,SubspaceDimension, 25)

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

你可以指定“LeftStartVector”'RightStartVector',但不是两者都有。如果两个选项都未指定,则为-通过-n矩阵一个,默认为:

  • m < n-左侧初始初始向量设置为randn (m, 1)

  • 米> = N-右初始初始向量设置为randn (n, 1)

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

请注意

圣言会选择使用专用随机数流中可再现的方式的起始载体。更改随机数种子做影响…的使用randn

例:s =圣言(k,σ,LeftStartVector, randn (m, 1))使用从全局随机数流提取值的随机起始向量。

数据类型:

右初始起始向量,指定为逗号分隔对所组成的'RightStartVector'和一个数值向量。

你可以指定“LeftStartVector”'RightStartVector',但不是两者都有。如果两个选项都未指定,则为-通过-n矩阵一个,默认为:

  • m < n-左侧初始初始向量设置为randn (m, 1)

  • 米> = N-右初始初始向量设置为randn (n, 1)

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

请注意

圣言会选择使用专用随机数流中可再现的方式的起始载体。更改随机数种子做影响…的使用randn

例:s =圣言(k,σ,RightStartVector, randn (n - 1))使用从全局随机数流提取值的随机起始向量。

数据类型:

nonconverged奇异值的处理,指定为逗号分隔的一对组成的'FailureTreatment'其中一个选择是:“replacenan”,“保持”, 要么'下降'

的价值'FailureTreatment'确定奇异值如何nonconverged显示在输出。

选项

影响到输出

'下降'

Nonconverged奇异值从输出,这可导致在去除圣言会比请求返回较少的奇异值。该值是的数值默认σ

“replacenan”

Nonconverged奇异值被替换值。此值是默认的,只要σ不是数字。

“保持”

Nonconverged奇异值包括在输出中。

例:s =圣言(k,σ,“FailureTreatment”,“下降”)从输出中移除不收敛的奇异值。

数据类型:烧焦|

切换诊断信息显示,指定为,真正的,0, 要么1。的值0关闭显示,而值真正的1打开它。

输出参数

全部折叠

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

左奇异向量,返回为矩阵的列。如果一个是一个-通过-n矩阵,你要求k奇异值,然后U是一个-通过-k标准正交列的矩阵。

不同的机器,MATLAB版本®或参数(如初始向量和子空间维数)可以产生不同的奇异向量,这些奇异向量在数值上仍然是精确的。对应的列UV可以翻转它们的符号,因为这不会影响表达式的值一个= U * * V '

奇异值,返回为对角矩阵。的对角线元素年代为非负奇异值。如果一个是一个-通过-n矩阵,你要求k奇异值,然后年代k-通过-k

右奇异向量,作为一个矩阵的列返回。如果一个是一个-通过-n矩阵,你要求k奇异值,然后V是一个n-通过-k标准正交列的矩阵。

不同的机器、MATLAB的释放或参数(如初始向量和子空间维数)可以产生不同的奇异向量,这些奇异向量在数值上仍然是精确的。对应的列UV可以翻转它们的符号,因为这不会影响表达式的值一个= U * * V '

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

使用该收敛标志输出禁止有关失败的收敛警告。

提示

  • 圣言会生成使用专用随机数流,以确保在运行再现默认起始载体。设置使用随机数生成器状态rng在调用之前圣言会不影响输出。

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

  • 如果圣言会收敛失败对于给定的矩阵,通过增加的值增加了Krylov子空间的大小“SubspaceDimension”。作为次要选项,调整最大迭代次数(“MaxIterations”)和收敛容差('公差')也可以帮助收敛行为。

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

兼容性的考虑

展开全部

R2016a改变了行为

参考

扩充隐式重新启动了兰佐斯双对角化方法。科学计算杂志。2005年第27卷第19-42页

[2] Larsen, r.m. "兰索斯双对角化与部分reorthogonalization。奥胡斯大学计算机科学系。DAIMI PB-357,1998年。

扩展功能

另请参阅

|

主题

之前介绍过的R2006a