奇异值和向量的子集
矩阵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
使用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;
计算的奇异值分解一个
,返回六个最大的奇异值和相应的奇异向量。指定第四个输出参数来检查奇异值的收敛性。
[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
- - - - - -要计算的奇异值的数目奇异值来计算,指定为正标量整数的数目。圣言会
如果满足这些条件之一,返回比请求更少的奇异值:
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
必须满足以下条件:
Afun(X, 'notransp')
接受一个向量x
并返回产品* x
。
Afun(X, '运输')
接受一个向量x
并返回产品‘* x
。
仅在以下情况下使用函数句柄西格玛=“最大”
(这是默认值)。
例:圣言(Afun [1000 - 1200])
n
- - - - - -使用的矩阵大小Afun
矩阵的大小一个
用于Afun
,指定为两元件大小的矢量(mn)
。
的可选逗号分隔对名称,值
参数。名称
参数名称和价值
为对应值。名称
必须出现在引号内。可以按任意顺序指定多个名称和值对参数名1,值1,...,NameN,值N
。
S = SVDS(A,K,西格玛, '容差',1E-10, 'MaxIterations',100)
放宽收敛容忍度并使用更少的迭代。
'公差'
- - - - - -收敛公差1E-14
(默认)|非负实标收敛容差,指定为逗号分隔的一对组成的'公差'
和非负实数值标量。
例:s =圣言(k,σ,“宽容”,1 e - 3)
“MaxIterations”
- - - - - -算法最大迭代次数300
(默认)|正整数算法迭代的最大次数,指定为逗号分隔对所组成的“MaxIterations”
和一个正整数。
例:s =圣言(k,σ,MaxIterations, 350)
“SubspaceDimension”
- - - - - -Krylov子空间的最大大小马克斯(3 * k, 15)
(默认)|非负整数Krylov子空间的最大尺寸,指定为逗号分隔的一对组成的“SubspaceDimension”
一个非负整数。的“SubspaceDimension”
值必须大于或等于k + 2
,其中k
是奇异值的数量。
的问题,圣言会
不收敛,保值增值“SubspaceDimension”
可以改善收敛行为。
的数值将忽略此选项σ
。
例:s =圣言(k,σ,SubspaceDimension, 25)
“LeftStartVector”
- - - - - -左起始向量左初始起动矢量,指定为逗号分隔的一对组成的“LeftStartVector”
和一个数值向量。
你可以指定“LeftStartVector”
或'RightStartVector'
,但不是两者都有。如果两个选项都未指定,则为米
-通过-n
矩阵一个
,默认为:
m < n
-左侧初始初始向量设置为randn (m, 1)
米> = N
-右初始初始向量设置为randn (n, 1)
指定不同的随机起始向量的主要原因是为了控制用于生成向量的随机数流。
圣言会
选择使用专用随机数流中可再现的方式的起始载体。更改随机数种子做不影响…的使用randn
。
例:s =圣言(k,σ,LeftStartVector, randn (m, 1))
使用从全局随机数流提取值的随机起始向量。
数据类型:双
'RightStartVector'
- - - - - -权初始启动矢量右初始起始向量,指定为逗号分隔对所组成的'RightStartVector'
和一个数值向量。
你可以指定“LeftStartVector”
或'RightStartVector'
,但不是两者都有。如果两个选项都未指定,则为米
-通过-n
矩阵一个
,默认为:
m < n
-左侧初始初始向量设置为randn (m, 1)
米> = N
-右初始初始向量设置为randn (n, 1)
指定不同的随机起始向量的主要原因是为了控制用于生成向量的随机数流。
圣言会
选择使用专用随机数流中可再现的方式的起始载体。更改随机数种子做不影响…的使用randn
。
例:s =圣言(k,σ,RightStartVector, randn (n - 1))
使用从全局随机数流提取值的随机起始向量。
数据类型:双
'FailureTreatment'
- - - - - -不收敛奇异值的处理“replacenan”
|“保持”
|'下降'
nonconverged奇异值的处理,指定为逗号分隔的一对组成的'FailureTreatment'
其中一个选择是:“replacenan”
,“保持”
, 要么'下降'
。
的价值'FailureTreatment'
确定奇异值如何nonconverged显示在输出。
选项 |
影响到输出 |
---|---|
|
Nonconverged奇异值从输出,这可导致在去除 |
|
Nonconverged奇异值被替换 |
|
Nonconverged奇异值包括在输出中。 |
例:s =圣言(k,σ,“FailureTreatment”,“下降”)
从输出中移除不收敛的奇异值。
数据类型:烧焦
|串
'显示'
- - - - - -切换诊断信息显示假
(默认)|真正的
|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矩阵中找到三个奇异值是一个相对较小的问题SVD
很容易处理。
如果圣言会
收敛失败对于给定的矩阵,通过增加的值增加了Krylov子空间的大小“SubspaceDimension”
。作为次要选项,调整最大迭代次数(“MaxIterations”
)和收敛容差('公差'
)也可以帮助收敛行为。
增加k
有时可以提高性能,特别是当矩阵具有重复奇异值时。
R2016a改变了行为
再现性
调用圣言会
连续多次现在产生相同的结果。要改变这种行为:
在R2017a或更早时,设置U0
或V0
字段的期权结构到一个随机向量。
在R2017b或更高版本中,首选设置“LeftStartVector”
或'RightStartVector'
到一个随机向量。
扩充隐式重新启动了兰佐斯双对角化方法。科学计算杂志。2005年第27卷第19-42页
[2] Larsen, r.m. "兰索斯双对角化与部分reorthogonalization。”奥胡斯大学计算机科学系。DAIMI PB-357,1998年。
您点击了对应于以下MATLAB命令的链接:
在MATLAB命令窗口中输入它运行的命令。Web浏览器不支持MATLAB的命令。万博1manbetx
您也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。