奇异值和向量的子集
矩阵A = delsq(numgrid('C',15))
是一个奇异值在区间(0 8)合理分布的对称正定矩阵。计算6个最大奇异值。
A = delsq(numgrid(“C”、15));s = svds(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);
计算10个最小的奇异值。
ss = svds(C,10,“最小”)
党卫军=10×10.9828 0.9049 0.5625 0.5625 0.4541 0.4506 0.2256 0.1139 0.1139 0
计算10个最小的非零奇异值。由于矩阵有一个奇异值等于0,所以“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);
保存Afun
在当前目录中,以便可以使用圣言会
.
函数y = Afun(x,tflag,B,C,n)如果比较字符串(tflag“notransp”) y = [B*x(n+1:结束);C * x (1: n)];其他的y = [C'*x(n+1:end);B * x (1: n)];结束
这个函数Afun
使用B
而且C
都要计算* x
或‘* x
(取决于指定的标志)而不实际形成整个稀疏矩阵A =[零(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 =[零(n) B;C 0 (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
并将其存储为一个
.
负载west0479A = west0479;
计算的奇异值分解一个
,返回六个最大奇异值和相应的奇异向量。指定第四个输出参数以检查奇异值的收敛性。
[U,S,V,cflag] = svds(A);添加
Cflag = 0
添加
表示所有奇异值都收敛。奇异值在输出矩阵的对角线上年代
.
s = diag(s)
s =6×1105× 3.1895 3.1725 3.1695 3.1685 3.1669 0.3038
的全奇异值分解,检验结果一个
.转换一个
到一个完整的矩阵并使用圣言会
.
[U1,S1,V1] = svd(满(A));
的六个最大奇异值一个
计算圣言会
而且圣言会
使用对数刻度。
s2 = diag(S1);semilogy (s2 (1:6),“r”。)举行在semilogy(年代,“罗”,“MarkerSize”10)标题(“west0479的奇异值”)传说(“圣言”,“圣言”)
创建一个稀疏对角矩阵并计算六个最大的奇异值。
A = diag(稀疏([1e4*ones(1,8) 1e4:-1:1]));s = svds(A)
警告:请求的6个奇异值中只有2个收敛。不收敛的奇异值为NaN。
s =6×1104× 1.0000 0.9999楠楠楠楠
的圣言会
算法产生一个警告,因为执行了最大迭代次数,但不能满足公差。
解决收敛问题最有效的方法是通过使用更大的值来增加计算中使用的克雷洛夫子空间的最大大小“SubspaceDimension”
.通过传入名称-值对来做到这一点吗“SubspaceDimension”
值为60
.
s = svds(A,6,“最大”,“SubspaceDimension”、60)
s =6×1104× 1.0000 1.0000 1.0000 1.0000 1.0000
计算一个近似奇异矩阵的10个最小奇异值。
rng默认的格式shortgB = spdigs ([1;1 e],[2] 198年)(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 0.2593 0.0000
该警告表明圣言会
无法计算正确的奇异值。失败的是圣言会
是由于最小奇异值和次小奇异值之间的差距。圣言(…,“最小”)
需要反转B
,这将导致较大的数值误差。
为了进行比较,请使用圣言会
.
s = svd(full(B));S = S (end-9:end)
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
和for一样吗B
.
[Q,R,p] = qr(B,0);
的每一行的范数R
.
rownormR =√(diag(R*R'));semilogy (rownormR)在;semilogy(size(R, 1), rownormR(end),“罗”)
最后一项R
接近于零,这导致溶液不稳定。
的最后一行,防止该条目破坏解决方案的良好部分R
等于零。
R(end,:) = 0;
使用圣言会
求最小的10个奇异值R
.所得结果与圣言会
.
sr = svds(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,S,V] = svds(R,20,“年代”);U = q *U;V(p,:) = V;
一个
- - - - - -输入矩阵输入矩阵。一个
是典型的(但不总是)大而稀疏的矩阵。
数据类型:双
复数支持:金宝app是的
k
- - - - - -要计算的奇异值的数目要计算的奇异值数,指定为正标量整数。圣言会
如果满足以下任一条件,返回的奇异值比要求的要少:
k
大于min(大小(A))
Sigma = ' smallstnz '
而且k
大于的非零奇异值的个数一个
如果k
太大了吗圣言会
的最大有效值替换它k
.
例子:圣言(2)
的两个最大奇异值一个
.
σ
- - - - - -奇异值的类型“最大”
(默认)|“最小”
|“smallestnz”
|标量奇异值的类型,指定为这些值之一。
选项 | 描述 |
---|---|
|
最大奇异值 |
|
最小奇异值 |
|
最小非零奇异值 |
标量 |
最接近标量的奇异值 |
例子:圣言(k“最小”)
计算k
最小奇异值。
例子:圣言(k, 100)
计算k
最接近的奇异值One hundred.
.
数据类型:双
|字符
|字符串
选择
- - - - - -选择结构选项结构,指定为包含此表中的一个或多个字段的结构。
请注意
不建议使用options结构来指定选项。请改用名称-值对。
选择字段 | 描述 | 名称-值对 |
---|---|---|
托尔 |
收敛公差 |
“宽容” |
麦克斯特 |
最大迭代次数 |
“MaxIterations” |
p |
克雷洛夫子空间的最大大小 |
“SubspaceDimension” |
情况 |
左起始向量 |
“LeftStartVector” |
半 |
右起始向量 |
“RightStartVector” |
disp |
诊断信息显示级别 |
“显示” |
失败 |
输出中非收敛奇异值的处理 | “FailureTreatment” |
请注意
圣言会
忽略选项p
当使用数值标量移位时σ
.
例子:选择。托尔= 1e-6, opts.maxit = 500
创建一个为字段设置值的结构托尔
而且麦克斯特
.
数据类型:结构体
Afun
- - - - - -矩阵函数矩阵函数,指定为函数句柄。这个函数Afun
必须满足这些条件:
Afun (x, notransp)
接受一个向量x
然后返回乘积* x
.
Afun (x,“透明”)
接受一个向量x
然后返回乘积‘* x
.
请注意
仅在以下情况下使用函数句柄σ = '最大'
(这是默认值)。
例子:圣言(Afun [1000 - 1200])
n
- - - - - -使用的矩阵的大小Afun
矩阵大小一个
这是由Afun
,指定为两个元素大小的向量(mn)
.
的可选逗号分隔对名称,值
参数。的名字
参数名称和价值
对应的值。的名字
必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
s = svds(A,k,sigma,'公差',1e-10,'MaxIterations',100)
放松收敛容差并使用更少的迭代。
宽容
- - - - - -收敛公差1 e-14
(默认)|非负实标量收敛容差,指定为由逗号分隔的对组成“宽容”
和一个非负实数标量。
例子:s = svds(A,k,sigma,'公差',1e-3)
MaxIterations
- - - - - -算法迭代的最大次数300
(默认)|正整数算法迭代的最大次数,指定为逗号分隔的对,由“MaxIterations”
一个正整数。
例子:s = svds(A,k,sigma,'MaxIterations',350)
SubspaceDimension
- - - - - -克雷洛夫子空间的最大大小马克斯(3 * k, 15)
(默认)|非负整数克雷洛夫子空间的最大大小,指定为由逗号分隔的对组成“SubspaceDimension”
和一个非负整数。的“SubspaceDimension”
Value必须大于或等于K + 2
,在那里k
是奇异值的个数。
对于以下问题圣言会
的值增大,收敛失败“SubspaceDimension”
可以改善收敛行为。
的数值将忽略此选项σ
.
例子:s = svds(A,k,sigma,'SubspaceDimension',25)
LeftStartVector
- - - - - -左起始向量左初始起始向量,指定为逗号分隔的对,由“LeftStartVector”
和一个数值向量。
你可以指定“LeftStartVector”
或“RightStartVector”
,但不是两者都有。如果没有指定任何选项,则对于米
——- - - - - -n
矩阵一个
,默认为:
M < n
-左起始矢量设置为randn (m, 1)
M >= n
-右起始矢量设置为randn (n, 1)
指定不同的随机起始向量的主要原因是为了控制用于生成向量的随机数流。
请注意
圣言会
使用私有随机数流以可重复的方式选择起始向量。改变随机数种子可以不影响这种使用randn
.
例子:s = svds(A,k,sigma,'LeftStartVector',randn(m,1))
使用从全局随机数流中抽取值的随机起始向量。
数据类型:双
RightStartVector
- - - - - -右起始向量右初始起始向量,指定为逗号分隔的对,由“RightStartVector”
和一个数值向量。
你可以指定“LeftStartVector”
或“RightStartVector”
,但不是两者都有。如果没有指定任何选项,则对于米
——- - - - - -n
矩阵一个
,默认为:
M < n
-左起始矢量设置为randn (m, 1)
M >= n
-右起始矢量设置为randn (n, 1)
指定不同的随机起始向量的主要原因是为了控制用于生成向量的随机数流。
请注意
圣言会
使用私有随机数流以可重复的方式选择起始向量。改变随机数种子可以不影响这种使用randn
.
例子:s = svds(A,k,sigma,'RightStartVector',randn(n,1))
使用从全局随机数流中抽取值的随机起始向量。
数据类型:双
FailureTreatment
- - - - - -非收敛奇异值的处理“replacenan”
|“保持”
|“下降”
非收敛奇异值的处理,指定为由逗号分隔的对组成“FailureTreatment”
其中一个选项是:“replacenan”
,“保持”
,或“下降”
.
的价值“FailureTreatment”
确定在输出中如何显示非收敛奇异值。
选项 |
对产量的影响 |
---|---|
|
从输出中删除非收敛奇异值,这可能导致 |
|
非收敛奇异值替换为 |
|
输出中包括非收敛奇异值。 |
例子:s = svds(A,k,sigma,'FailureTreatment','drop')
从输出中移除非收敛的奇异值。
数据类型:字符
|字符串
显示
- - - - - -切换诊断信息显示假
(默认)|真正的
|0
|1
诊断信息显示的切换,指定为假
,真正的
,0
,或1
.的值假
或0
关闭显示,而值真正的
或1
打开它。
年代
-奇异值奇异值,作为列向量返回。奇异值是按递减顺序列出的非负实数。
U
-左奇异向量左奇异向量,作为矩阵的列返回。如果一个
是一个米
——- - - - - -n
矩阵,你要求k
那么,奇异值U
是一个米
——- - - - - -k
具有标准正交列的矩阵。
不同的机器,MATLAB版本®,或参数(如起始向量和子空间维度)可以产生不同的奇异向量,这些奇异向量在数值上仍然是准确的。中的对应列U
而且V
可以翻转它们的符号,因为这并不影响表达式的值A = u * s * v '
.
年代
-奇异值奇异值,作为对角矩阵返回。的对角线元素年代
为非负奇异值。如果一个
是一个米
——- - - - - -n
矩阵,你要求k
那么,奇异值年代
是k
——- - - - - -k
.
V
-右奇异向量右奇异向量,作为矩阵的列返回。如果一个
是一个米
——- - - - - -n
矩阵,你要求k
那么,奇异值V
是一个n
——- - - - - -k
具有标准正交列的矩阵。
不同的机器、MATLAB版本或参数(如起始向量和子空间维度)可以产生不同的奇异向量,它们在数值上仍然是准确的。中的对应列U
而且V
可以翻转它们的符号,因为这并不影响表达式的值A = u * s * v '
.
国旗
-收敛标志收敛标志,作为标量返回。值为0
表示所有奇异值都收敛。否则,不是所有奇异值都收敛。
使用此收敛标志输出将抑制关于收敛失败的警告。
svdsketch
当你事先不知道用什么等级来指定时有用吗圣言会
,但是你知道SVD的近似应该满足什么公差。
圣言会
使用私有随机数流生成默认起始向量,以确保跨运行的可再现性。使用设置随机数生成器状态rng
在调用之前圣言会
不影响输出。
使用圣言会
不是寻找小而密集矩阵的少数奇异值的最有效方法。对于这类问题,使用圣言(全(A))
可能会快一点。例如,在一个500 × 500矩阵中找到三个奇异值是一个相对较小的问题圣言会
易于处理。
如果圣言会
的值,从而增加Krylov子空间的大小“SubspaceDimension”
.作为次要选项,调整最大迭代次数(“MaxIterations”
)和收敛公差(“宽容”
)也有助于收敛行为。
增加k
有时可以提高性能,特别是当矩阵有重复的奇异值时。
R2016a的行为发生了变化
再现性
调用圣言会
现在连续多次产生相同的结果。要改变这种行为:
在R2017a或更早版本中,设置情况
或半
字段的选项结构转换为随机向量。
在R2017b或更高版本中,首选设置“LeftStartVector”
或“RightStartVector”
到一个随机向量。
[1] Baglama, J.和L. Reichel,“增强隐式重启Lanczos双对角化方法”。SIAM科学计算杂志.Vol. 27, 2005, pp. 19-42。
r.m.拉森。”双对角化和部分正交化。”奥胡斯大学计算机科学系“,.Daimi pb-357, 1998。
backgroundPool
或使用并行计算工具箱™加速代码ThreadPool
.这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
Sie haben eine geänderte版本dieses Beispiels。Möchten Sie dieses Beispiel mit Ihren Änderungen öffnen?
你的身体和身体之间的联系MATLAB-Befehl
Führen Sie den Befehl durch Eingabe in das MATLAB-Befehlsfenster aus。web浏览器unterstützen keine MATLAB-Befehle。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。