圣言会

奇异值和向量的子集

描述

例子

年代=圣言(一个返回由矩阵的6个最大奇异值组成的向量一个.这在计算所有的奇异值时很有用圣言会在计算上很昂贵,比如对于大型稀疏矩阵。

例子

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

例子

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

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

例子

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

例子

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

例子

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

例子

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

例子

全部折叠

矩阵a = 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 = svds(a,3)
S =3×17.8666 7.7324 7.6531

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

一个= delsq (numgrid (“C”、15));s = svds(a,5,“最小”
S =5×10.5520 0.4787 0.3469 0.2676 0.1334

创建稀疏100乘100个neumann矩阵。

C =画廊('neumann',100);

计算十个最小的奇异值。

党卫军=圣言(C, 10,“最小”
党卫军=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”
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);

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

函数y = afun(x,tflag,b,c,n)如果Strcmp(Tflag,“notransp”) y = [B*x(n+1:end)];C * x (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个最大奇异值一个.通过BC,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;

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

[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

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

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

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

s2 =诊断接头(S1);semilogy (s2 (1:6),“r”。)举行半径(s,“罗”“MarkerSize”10)标题(' west0479的奇异值')传说(“圣言”“圣言”

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

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默认的格式shortgB =斯芬奇([Repelem([1; 1; 1E-7],[198,2])(200,1)],[01],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 7.0945 0.25927 7.088e -16

警告指出圣言会未能计算适当的奇异值。失败了圣言会是因为最小和第二最小奇异值之间的间隙。圣言(…,“最小”)需要反B,这导致大量的数值误差。

为了比较,计算精确的奇异值圣言会

s = svd(full(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是一样的吗B

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

画出每一行的范数R

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

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

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

r(结束,:) = 0;

使用圣言会找到10个最小的奇异值R.结果可与由圣言会

sr =圣言(R, 10日“最小”
sr =10×10.14196 0.12621 0.11045 0.094686 0.078914 0.063137 0.047356 0.031572 0.015787 0

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

[u,s,v] = svds(r,20,“年代”);U = Q *;: V (p) = V;

输入参数

全部折叠

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

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

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

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

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

如果k是不是太大了圣言会用最大有效值替换它k

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

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

选项 描述

“最大”(默认)

最大的奇异值

“最小”

最小奇异值

“smallestnz”

最小的非零奇异值

标量

最接近标量的奇异值

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

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

数据类型:|char|字符串

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

请注意

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

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

收敛公差

'宽容'
max

最大迭代次数

“MaxIterations”
p

克雷洛夫子空间的最大尺寸

“SubspaceDimension”
情况

左起始向量

“LeftStartVector”

右起始向量

'rightstartvector'
disp

诊断信息显示级别

'展示'
失败 处理输出中的非重复奇异值 “FailureTreatment”

请注意

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

例子:Opts.Tol = 1E-6,Opts.maxit = 500创建一个具有为字段设置值的结构托尔max

数据类型:结构体

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

  • Afun (x, notransp)接受一个向量x然后返回产品* x

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

请注意

仅在以下情况下使用函数句柄σ= '大'(这是默认值)。

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

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

名称-值对的观点

指定可选的逗号分隔的对名称,值论点。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数name1,value1,...,namen,valuen

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

收敛公差,指定为逗号分隔对组成'宽容'和一个非负真正的数字标量。

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

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

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

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

的问题,圣言会未能收敛,增加价值“SubspaceDimension”可以改善收敛性。

的数值将忽略此选项σ

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

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

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

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

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

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

请注意

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

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

数据类型:

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

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

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

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

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

请注意

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

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

数据类型:

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

的价值“FailureTreatment”确定输出中不可旋转的奇异值如何。

选项

影响产出

“下降”

从输出中取出非转换的奇异值,这可能会导致圣言会返回比请求的更少的奇异值。这个值是数值值的默认值σ

“replacenan”

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

“保持”

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

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

数据类型:char|字符串

用于显示诊断信息的开关,指定为真正的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的矩阵中找到三个奇异值是一个相对较小的问题圣言会很容易处理。

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

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

兼容性的考虑

全部展开

R2016a行为改变

参考

[1] Baglama, J.和L. Reichel,“增强隐式重启Lanczos双对角化方法”。SIAM科学计算杂志.第27卷,2005年,第19-42页。

[2] Larsen, r.m. "Lanczos Bidiagation化与部分rortherconalization。奥尔胡斯大学计算机科学系.DAIMI pb - 357, 1998。

扩展功能

另请参阅

|

主题

之前介绍过的R2006a