主要内容

圣言会

奇异值的子集和向量

描述

例子

年代=圣言(一个)返回一个向量的六个最大的奇异值矩阵一个。这在计算时很有用的所有奇异值圣言会计算昂贵,例如大型稀疏矩阵。

例子

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

例子

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

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

例子

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

例子

年代=圣言(Afun,n,___)指定一个函数处理Afun而不是一个矩阵。第二个输入n给出了矩阵的大小一个中使用的Afun。您可以选择性地指定k,σ,选择作为额外的输入参数,或者名称-值对。

例子

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

例子

(U,年代,V,国旗)=圣言(___)还返回一个收敛的旗帜。如果国旗0聚合,那么所有的奇异值。

例子

全部折叠

矩阵一个= 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年-诺伊曼稀疏矩阵。

C =画廊(“纽曼”,100);

计算十最小奇异值。

党卫军=圣言(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 =圣言(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)];其他的* x y = [C”(n + 1:结束);B * x (1: n)];结束

这个函数Afun使用BC来计算* x‘* x(根据指定的标志)没有形成整个稀疏矩阵一个= [0 B (n);C 0 (n))。这利用矩阵的稀疏模式节省内存的计算* x‘* x

使用Afun计算的十大奇异值一个。通过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

直接计算的十大奇异值一个比较结果。

一个= [0 B (n);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并将其存储为一个

负载west0479一个= west0479;

计算的奇异值分解一个,返回六大奇异值和对应的奇异向量。检查指定第四个输出参数奇异值的收敛性。

[U, V,添加]=圣言();添加
添加= 0

添加表明所有的奇异值聚集。奇异值是输出矩阵的对角线上年代

s =诊断接头(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”。)举行semilogy(年代,“罗”,“MarkerSize”10)标题(“west0479奇异值”)传说(“圣言”,“圣言”)

图包含一个坐标轴对象。标题奇异值的坐标轴对象west0479包含2线类型的对象。这些对象代表圣,圣言。

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

=诊断接头(稀疏([1 e4的* (8)1 e4: 1:1)));s =圣言(A)
警告:只有2的6所请求的奇异值聚集。奇异值南不收敛。
s =6×1104×1.0000 - 0.9999南南南南

圣言会算法产生一个警告以来的最大迭代数进行但不能宽容的实现。

解决收敛问题的最有效的方法是增加的最大大小维子空间中使用的计算通过使用一个更大的值“SubspaceDimension”。这通过在名称-值对吗“SubspaceDimension”的价值60

s =圣言(6“最大”,“SubspaceDimension”、60)
s =6×1104×1.0000 1.0000 1.0000 1.0000 1.0000 1.0000

计算10近奇异矩阵的最小奇异值。

rng默认的格式shortgB = spdiags ([repelem ([1;1 e],[2] 198年)(200,1)],[0,1],200年,200年);s1 =圣言(B 10“最小”)
警告:侦测到大型残留标准。这可能是因为糟糕的条件输入矩阵条件数1.0008 e + 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(结束),“罗”)

图包含一个坐标轴对象。坐标轴对象包含2线类型的对象。

最后一个条目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大于min(大小(A))

  • σ= ' smallestnz 'k比非零奇异值的数量大吗一个

如果k太大呢圣言会替换的最大有效值k

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

指定类型的奇异值,这些值。

选项 描述

“最大”(默认)

最大奇异值

“最小”

最小奇异值

“smallestnz”

最小非零奇异值

标量

奇异值最接近一个标量

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

例子:圣言(k, 100)计算k奇异值接近One hundred.

数据类型:|字符|字符串

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

请注意

使用结构的选项来指定选项不推荐。使用名称-值对。

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

收敛公差

“宽容”
麦克斯特

最大迭代次数

“MaxIterations”
p

维子空间的最大大小

“SubspaceDimension”
情况

离开初始向量

“LeftStartVector”

开始正确的初始向量

“RightStartVector”
disp

诊断信息显示水平

“显示”
失败 治疗nonconverged奇异值的输出 “FailureTreatment”

请注意

圣言会忽略了选项p当使用一个数字标量的转变σ

例子:选择。托尔= 1e-6, opts.maxit = 500创建一个结构设置的字段值托尔麦克斯特

数据类型:结构体

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

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

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

请注意

使用功能处理的情况σ= '大'(这是默认的)。

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

矩阵的大小一个所使用的Afun双元素大小,指定为一个向量(mn)

名称-值参数

指定可选的逗号分隔条名称,值参数。的名字参数名称和吗价值相应的价值。的名字必须出现在引号。您可以指定几个名称和值对参数在任何顺序Name1, Value1,…,的家

例子: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))使用一个随机向量开始吸引全球随机数流值。

数据类型:

治疗nonconverged奇异值,指定为逗号分隔组成的“FailureTreatment”其中一个选项:“replacenan”,“保持”,或“下降”

的价值“FailureTreatment”决定nonconverged奇异值显示在输出中。

选项

对输出的影响

“下降”

Nonconverged奇异值从输出,从而导致圣言会返回奇异值少于要求。这个值是默认的数值σ

“replacenan”

Nonconverged奇异值替换值。这个值是默认的时候σ不是数字。

“保持”

Nonconverged奇异值包含在输出中。

例子:s =圣言(k,σ,“FailureTreatment”,“下降”)删除nonconverged奇异值的输出。

数据类型:字符|字符串

切换显示的诊断信息,指定为,真正的,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表明所有奇异值聚集。否则,不是所有的奇异值聚集。

使用这种收敛国旗输出抑制警告收敛失败。

提示

  • svdsketch是有用的,当你不知道提前等级指定用什么圣言会,但你知道宽容的近似计算应该满足。

  • 圣言会使用私人随机数生成默认的初始向量流以确保在运行再现性。设置随机数字生成器使用状态rng在调用之前圣言会不影响输出。

  • 使用圣言会并不是最有效的方式找到一些奇异值小、密度矩阵。对于这样的问题,使用圣言(全(A))可能会更快。例如,发现三个矩阵奇异值在500 - 500年是一个相对较小的问题圣言会很容易处理。

  • 如果圣言会不能收敛为给定的矩阵,增加维子空间的大小增加的价值“SubspaceDimension”。作为二次选择,调整的最大迭代数(“MaxIterations”)和收敛公差(“宽容”)也可以帮助收敛行为。

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

兼容性的考虑

全部展开

行为改变R2016a

引用

[1]Baglama, j·l·Reichel“增强隐式地重启兰索斯Bidiagonalization方法。”暹罗期刊在科学计算。27卷,2005年,页到。

[2]拉森,r . m .”兰索斯与部分reorthogonalization Bidiagonalization。计算机科学部门,奥尔胡斯大学。DAIMI pb - 357, 1998。

扩展功能

另请参阅

||

主题

之前介绍过的R2006a