奇异值和向量的子集
矩阵一个= 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)];结束
功能好玩儿
使用B
和C
要计算斧头
或者‘* x
(取决于指定的标志),而不是实际形成整个稀疏矩阵A = [0 (n) B;C 0 (n))
.利用矩阵的稀疏性模式,在计算时节省内存斧头
和‘* x
.
用好玩儿
计算的10个最大奇异值一个
.通过B
,C
, 和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')
创建稀疏对角线矩阵并计算六个最大的奇异值。
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(结束),“罗”)
最后一项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是的
k
- - - - - -要计算的奇异值的数目要计算的奇异值的数目,指定为正标量整数。圣言会
如果满足这些条件中的任一条件,则返回比请求的奇数值更少:
k
比min(大小(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])
n
- - - - - -所用矩阵的大小好玩儿
矩阵的大小一个
是由好玩儿
,指定为两个元素大小的向量(mn)
.
指定可选的逗号分隔的对名称,价值
参数。的名字
参数名和价值
是相应的价值。的名字
必须出现在引号内。您可以以任何顺序指定多个名称和值对参数Name1, Value1,…,的家
.
s =圣言(k,σ,“宽容”,1平台以及MaxIterations, 100)
放松收敛容忍度,使用更少的迭代。
宽容
- - - - - -融合公差1 e-14
(默认)|非负实数收敛公差,指定为逗号分隔对组成“宽容”
和一个非负的实数标量。
例子:s = svds(a,k,sigma,'容忍',1e-3)
MaxIterations
- - - - - -算法迭代的最大次数300
(默认)|正整数最大算法迭代次数,指定为逗号分隔对“MaxIterations”
一个正整数。
例子:s = svds(a,k,sigma,'maxtorations',350)
SubspaceDimension
- - - - - -krylov子空间的最大大小最大(3 * K,15)
(默认)|非负整数由逗号分隔的对组成的克雷洛夫子空间的最大大小“SubspaceDimension”
和一个非负整数。的“SubspaceDimension”
值必须大于或等于K + 2
,在那里k
为奇异值的个数。
对于问题在哪里圣言会
收敛失败,增加的值“SubspaceDimension”
可以改善收敛性。
的数值将忽略此选项σ
.
例子:s = svds(a,k,sigma,'subspacedimension',25)
LeftStartVector
- - - - - -左起始向量左起始向量,指定为逗号分隔对组成“LeftStartVector”
和一个数字向量。
您可以指定“LeftStartVector”
或者“RightStartVector”
,但不是两者都有。如果两个选项都没有指定,则为米
——- - - - - -n
矩阵一个
,默认值为:
M
Randn(M,1)
m > = n
-右初始起始向量设置为Randn(n,1)
指定不同的随机起始向量的主要原因是控制用于生成向量的随机数流。
请注意
圣言会
使用私有随机数流以可重复的方式选择起始向量。改变随机数种子不影响这种使用randn
.
例子:s = svds(a,k,sigma,'leftstartvector',Randn(M,1))
使用从全局随机数流中绘制值的随机启动向量。
数据类型:双
RightStartVector
- - - - - -右起始向量右初始起始向量,指定为逗号分隔对组成“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
.的值假
或者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.
在调用之前圣言会
不影响输出。
使用圣言会
并不是寻找小而密集矩阵的奇异值的最有效的方法。对于这样的问题,使用SVD(全(a))
可能会更快。例如,在一个500 × 500的矩阵中找到三个奇异值是一个相对较小的问题圣言会
很容易处理。
如果圣言会
对于给定的矩阵,如果不能收敛,则通过增大的值来增大Krylov子空间的大小“SubspaceDimension”
.作为辅助选项,调整最大迭代次数(“MaxIterations”
)和收敛容差(“宽容”
)也有助于收敛行为。
增加k
有时可以提高性能,特别是当矩阵有重复的奇异值时。
R2016a行为改变
再现性
调用圣言会
现在连续多次会产生相同的结果。要改变这种行为:
在R2017a或更早版本中,设置情况
或者半
选项结构的字段为随机向量。
在R2017b或更高版本中,首选setting“LeftStartVector”
或者“RightStartVector”
到一个随机向量。
[1] Baglama,J.和L. Reichel,“毫无隐含地重新启动Lanczos Bidiagalization方法。”SIAM科学计算杂志.卷。27,2005,第19-42页。
[2] Larsen,R. M.“带部分重正交化的Lanczos双对角化。”奥胡斯大学计算机科学部.DAIMI pb - 357, 1998。
backgroundPool
或使用并行计算工具箱™加速代码螺纹池
.这个函数完全支持基于线程的环境。金宝app有关更多信息,请参见在线程环境中运行MATLAB函数.
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。