奇异值和向量的子集
矩阵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
用途B
和C
来计算* 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;
的奇异值分解一个
,返回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
- - - - - -要计算的奇异值的数目计算为计算的奇异值数,指定为正标量整数。圣言会
如果满足以下任一条件,返回比请求的更少的奇异值:
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
必须满足以下条件:
Afun (x, notransp)
接受一个向量x
然后返回产品* x
.
Afun (x,“透明”)
接受一个向量x
然后返回产品‘* x
.
仅在以下情况下使用函数句柄σ= '大'
(这是默认值)。
例子:圣言(Afun [1000 - 1200])
n
- - - - - -所用矩阵的大小Afun
矩阵的大小一个
是由Afun
,指定为两个元素大小的向量(mn)
.
指定可选的逗号分隔的对名称,值
论点。的名字
参数名和价值
为对应值。的名字
必须出现在引号内。可以以任意顺序指定多个名称和值对参数name1,value1,...,namen,valuen
.
s =圣言(k,σ,“宽容”,1平台以及MaxIterations, 100)
放松收敛容忍度,使用更少的迭代。
'宽容'
- - - - - -收敛公差1 e-14
(默认)|非负实数收敛公差,指定为逗号分隔对组成'宽容'
和一个非负真正的数字标量。
例子:s =圣言(k,σ,“宽容”,1 e - 3)
“MaxIterations”
- - - - - -最大算法迭代次数300
(默认)|正整数最大算法迭代次数,指定为逗号分隔对组成“MaxIterations”
和一个正整数。
例子:s =圣言(k,σ,MaxIterations, 350)
“SubspaceDimension”
- - - - - -克雷洛夫子空间的最大尺寸马克斯(3 * k, 15)
(默认)|非负整数由逗号分隔的对组成的克雷洛夫子空间的最大大小“SubspaceDimension”
和一个非负整数。的“SubspaceDimension”
值必须大于或等于k + 2
,在那里k
为奇异值的个数。
的问题,圣言会
未能收敛,增加价值“SubspaceDimension”
可以改善收敛性。
的数值将忽略此选项σ
.
例子:s =圣言(k,σ,SubspaceDimension, 25)
“LeftStartVector”
- - - - - -左起始向量左初始起始向量,指定为逗号分隔对组成“LeftStartVector”
和一个数字向量。
你可以指定“LeftStartVector”
或'rightstartvector'
,但不是两者都有。如果两个选项都没有指定,则为米
-经过-n
矩阵一个
,默认值为:
m < n
左初始起始向量设置为randn (m, 1)
m> = n
-右初始起始向量设置为randn (n, 1)
指定不同的随机起始向量的主要原因是控制用于生成向量的随机数流。
圣言会
使用私有随机数流以可重复的方式选择起始向量。改变随机数种子不影响randn
.
例子:s =圣言(k,σ,LeftStartVector, randn (m, 1))
使用从全局随机数流提取值的随机开始向量。
数据类型:双
'rightstartvector'
- - - - - -右起始向量右初始起始向量,指定为逗号分隔对组成'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”
,“保持”
,或“下降”
.
的价值“FailureTreatment”
确定输出中不可旋转的奇异值如何。
选项 |
影响产出 |
---|---|
|
从输出中取出非转换的奇异值,这可能会导致 |
|
将非收敛奇异值替换为 |
|
非收敛奇异值包含在输出中。 |
例子:s =圣言(k,σ,“FailureTreatment”,“下降”)
从输出中移除非收敛的奇异值。
数据类型:char
|字符串
'展示'
- - - - - -切换用于显示诊断信息假
(默认)|真正的
|0
|1
用于显示诊断信息的开关,指定为假
,真正的
,0
,或1
.的值假
或0
关闭显示,而值真正的
或1
打开。
年代
- - - - - -奇异值作为列向量返回的奇异值。奇异值是按递减顺序排列的非负实数。
U
-左奇异向量左奇异向量,返回为矩阵的列。如果一个
是一个米
-经过-n
矩阵,你要求k
奇异值,然后U
是一个米
-经过-k
具有标准正交列的矩阵。
不同的机器,MATLAB版本®,或参数(例如起始向量和子空间维数)可以生成不同的奇异向量,这些奇异向量在数值上仍然是准确的。对应的列U
和V
可以翻转他们的符号,因为这并不影响表达式的值一个= U * * V '
.
年代
- - - - - -奇异值奇异值,以对角矩阵的形式返回。的对角元素年代
为非负奇异值。如果一个
是一个米
-经过-n
矩阵,你要求k
奇异值,然后年代
是k
-经过-k
.
V
-右奇异向量右奇异向量,返回为矩阵的列。如果一个
是一个米
-经过-n
矩阵,你要求k
奇异值,然后V
是一个n
-经过-k
具有标准正交列的矩阵。
不同的机器、MATLAB版本或参数(如起始向量和子空间维度)可以产生不同的奇异向量,但它们在数值上仍然是准确的。对应的列U
和V
可以翻转他们的符号,因为这并不影响表达式的值一个= U * * V '
.
旗帜
——收敛国旗收敛标志,作为标量返回。的值0
表示所有奇异值融合在一起。否则,并非所有的奇异值都会融合在一起。
使用此收敛标志输出将抑制关于收敛失败的警告。
圣言会
使用私有随机数流生成默认的开始向量,以确保跨运行的再现性。使用。设置随机数生成器状态rng
在调用之前圣言会
不影响输出。
使用圣言会
并不是寻找小而密集矩阵的奇异值的最有效的方法。对于这样的问题,使用圣言(全(A))
可能会更快。例如,在一个500 × 500的矩阵中找到三个奇异值是一个相对较小的问题圣言会
很容易处理。
如果圣言会
未能收敛于给定的矩阵,通过增加值来增加Krylov子空间的大小“SubspaceDimension”
.作为次要选项,调整最大迭代次数(“MaxIterations”
)和收敛耐受性('宽容'
)也有助于收敛行为。
增加k
有时可以提高性能,特别是当矩阵有重复的奇异值时。
R2016a行为改变
再现性
打电话圣言会
现在连续多次会产生相同的结果。要改变这种行为:
在R2017a或更早版本中,设置情况
或半
字段的选项结构到一个随机向量。
在R2017b或更高版本中,首选setting“LeftStartVector”
或'rightstartvector'
到一个随机向量。
[1] Baglama, J.和L. Reichel,“增强隐式重启Lanczos双对角化方法”。SIAM科学计算杂志.第27卷,2005年,第19-42页。
[2] Larsen, r.m. "Lanczos Bidiagation化与部分rortherconalization。”奥尔胡斯大学计算机科学系.DAIMI pb - 357, 1998。
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。