主要内容

eigs

特征值和特征向量的子集

描述

例子

d= eigs (一个返回矩阵的六个最大大小特征值的向量一个.当计算所有的特征值时这是最有用的eig计算开销大,例如使用大型稀疏矩阵。

例子

d= eigs (一个k返回k最大幅特征值。

例子

d= eigs (一个kσ返回k的值为特征值σ.例如,eigs (k ' smallestabs ')返回k最小幅特征值。

d= eigs (一个kσ名称,值使用一个或多个名称-值对参数指定其他选项。例如,eigs (k,σ,“宽容”,1 e - 3)调整算法的收敛公差。

例子

d= eigs (一个kσ选择使用结构指定选项。

例子

d= eigs (一个B___解决了广义特征值问题A* v = b * v * d.您可以选择指定kσ选择,或作为附加输入参数的名称-值对。

d= eigs (Afunn___指定函数句柄Afun而不是矩阵。第二个输入n给出了矩阵的大小一个中使用的Afun.您可以选择指定Bkσ选择,或作为附加输入参数的名称-值对。

例子

VD= eigs(___返回对角矩阵D包含主对角线上的特征值,和矩阵V它的列是对应的特征向量。您可以使用前面语法中的任何输入参数组合。

例子

VD国旗= eigs(___也返回一个收敛标志。如果国旗0,则所有特征值收敛。

例子

全部折叠

矩阵A = delsq(numgrid('C',15))是一个对称正定矩阵,其特征值合理地分布在区间(0 8)中。计算六个最大的幅值特征值。

A = delsq(numgrid)“C”、15));d = eigs(A)
d =6×17.8666 7.7324 7.6531 7.5213 7.4480 7.3517

指定第二个输入来计算最大特征值的特定数量。

d = eigs(A,3)
d =3×17.8666 7.7324 7.6531

矩阵A = delsq(numgrid('C',15))是一个对称正定矩阵,其特征值合理地分布在区间(0 8)中。计算最小的5个特征值。

A = delsq(numgrid)“C”、15));d = eigs(A,5,“smallestabs”
d =5×10.1334 0.2676 0.3469 0.4787 0.5520

创建一个1500 × 1500的随机稀疏矩阵,非零元素的近似密度为25%。

N = 1500;A = sprand(n,n,0.25);

求矩阵的LU分解,返回一个排列向量p满足A(p,:) = L*U

[L,U,p] = U (A, U,p)“向量”);

创建一个函数句柄Afun它接受一个向量输入x并使用LU分解的结果,实际上,返回x \

Afun = @(x) U\(L\(x(p)));

计算六个最小幅度特征值eigs函数句柄Afun.第二个输入是的大小一个

d = eigs(Afun,1500,6,“smallestabs”
d =6×1复杂0.1423 + 0.0000i 0.4859 + 0.0000i -0.3323 - 0.3881i -0.3323 + 0.3881i 0.1019 - 0.5381i 0.1019 + 0.5381i

west0479是一个实值479 × 479稀疏矩阵,同时具有实值和复值共轭特征值对。

加载west0479矩阵,然后计算和绘制所有的特征值使用eig.因为特征值是复数,情节自动使用实部作为x坐标,虚部作为y坐标。

负载west0479A = west0479;d = eig(满(A));情节(d,“+”

图中包含一个axes对象。axis对象包含一个类型为line的对象。

特征值沿着实线(x轴)聚集,特别是在原点附近。

eigs有以下几个选项σ它可以挑选出不同类型的最大或最小特征值。计算并绘制出每个可用选项的特征值σ

图绘制(d,“+”)举行la = eigs(A,6;“largestabs”);情节(洛杉矶,“罗”) A = eigs(A,6,“smallestabs”);情节(sa),“去”)举行传奇(所有特征值的最大程度的最小程度的)包含(“实轴”) ylabel (“虚轴”

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象代表所有的特征值,最大幅值,最小幅值。

图绘制(d,“+”)举行ber = eigs(A,4,“bothendsreal”);情节(ber,“r ^”(A,4,)“bothendsimag”);情节(贝,“g ^”)举行传奇(所有特征值的“两端都是真实的”“两端都是虚构的”)包含(“实轴”) ylabel (“虚轴”

图中包含一个axes对象。坐标轴对象包含3个line类型的对象。这些对象代表所有的特征值,两端实数,两端虚数。

图绘制(d,“+”)举行lr = eigs(A,3,“largestreal”);情节(lr,“罗”) sr = eigs(A,3,“smallestreal”);情节(sr,“去”(A,3;“largestimag”“SubspaceDimension”, 45岁);情节(李“m ^”) si = eigs(A,3,“smallestimag”“SubspaceDimension”, 45岁);情节(si,“c ^”)举行传奇(所有特征值的最大的真实”“最小的真实”“最大的想象”“最小的想象”)包含(“实轴”) ylabel (“虚轴”

图中包含一个axes对象。axis对象包含5个类型为line的对象。这些对象代表所有的特征值,最大的实数,最小的实数,最大的虚数,最小的虚数。

创建一个对称正定稀疏矩阵。

A = delsq(numgrid)“C”, 150));

计算6个最小实特征值“smallestreal”,采用Krylov方法使用一个

tic d = eigs(A, 6,“smallestreal”
d =6×10.0013 0.0025 0.0033 0.0045 0.0052 0.0063
toc
运行时间为3.380573秒。

计算相同的特征值“smallestabs”的逆,它采用的是Krylov方法一个

tic dsm = eigs(A, 6,“smallestabs”
dsm =6×10.0013 0.0025 0.0033 0.0045 0.0052 0.0063
toc
运行时间为0.341139秒。

特征值聚集在零附近。的“smallestreal”计算努力收敛于使用一个因为特征值之间的差是如此之小。相反,“smallestabs”选项使用的逆一个的特征值的倒数一个,它们之间的差距大得多,因此更容易计算。这种性能的提高是以分解为代价的一个,这是没有必要的“smallestreal”

计算一个数字附近的特征值σ它几乎等于一个特征值。

矩阵A = delsq(numgrid('C',30))是一个大小为632的对称正定矩阵,其特征值在区间(0 8)中合理均匀分布,但在4.0处有18个特征值重复。为了计算4.0附近的一些特征值,尝试函数调用是合理的4.0 eigs (20).然而,这个调用计算的逆的最大特征值A - 4.0* i,在那里是一个单位矩阵。因为4.0是的特征值一个,这个矩阵是奇异的,因此没有逆矩阵。eigs失败并产生错误消息。的数值σ不能完全等于一个特征值。相反,您必须使用值σ这接近但不等于4.0来找到那些特征值。

计算所有的特征值eig,最接近4 - 1e-6的20个特征值使用eigs比较结果。画出用每种方法计算的特征值。

A = delsq(numgrid)“C”, 30));Sigma = 4 - 1e-6;d = eig(A);D = sort(eigs(A,20,sigma));
情节(d (307:326),“ks”)举行情节(D,k +的)举行传奇(“eig (A)”“eigs(σ),20日”)标题('18 A的重复特征值'

图中包含一个axes对象。标题为18的坐标轴对象A的重复特征值包含两个类型为line的对象。这些对象表示eig(A), eigs(A,20,sigma)。

创建稀疏随机矩阵一个而且B它们的非零元素密度都很低。

B = sprandn(1e3,1e3,0.001) + speye(1e3);B = B'*B;A = sprandn(1e3,1e3,0.005);A = A+A';

求矩阵的Cholesky分解B,使用三个输出返回排列向量年代和测试值p

[R,p,s] = l(B,“向量”);p
P = 0

p是零,B一个对称正定矩阵满足吗B(s,s) = R'*R

计算所涉及的广义特征值问题的六个最大幅特征值和特征向量一个而且R.自R的Cholesky因子是多少B,指定“IsCholesky”作为真正的.此外,由于B(s,s) = R'*R因此R = chol(B(s,s)),使用排列向量年代的价值“CholeskyPermutation”

[V,D,flag] = eigs(A,R,6)“largestabs”“IsCholesky”,真的,“CholeskyPermutation”,年代);国旗
Flag = 0

国旗等于零,所有的特征值都收敛了。

输入参数

全部折叠

输入矩阵,指定为方阵。一个通常,但并不总是,一个大而稀疏的矩阵。

如果一个是对称的,那么eigs在这种情况下使用专门的算法。如果一个对称的,然后考虑使用A = (A+A')/2为了使一个调用前对称eigs.这确保了eigs计算实特征值而不是复特征值。

数据类型:
复数支持:金宝app是的

输入矩阵,指定为大小相同的方阵一个.当B是指定的,eigs解决了广义特征值问题A* v = b * v * d

如果B对称是正定的吗eigs在这种情况下使用专门的算法。如果B对称正定,则考虑使用B = (B+B')/2为了使B调用前对称eigs

一个是标量,可以指定吗B作为一个空矩阵eigs ([], k)解决标准特征值问题,消除之间的歧义B而且k

数据类型:
复数支持:金宝app是的

要计算的特征值的个数,指定为正标量整数。如果k大于大小(2),然后eigs使用最大有效值k = size(A,2)代替。

例子:eigs (2)的两个最大的特征值一个

特征值的类型,指定为表中的值之一。

σ

描述

sigma (R2017a及更早的版本)

标量(实数或复数,包括0)

最接近这个数的特征值σ

没有变化

“largestabs”(默认)

最大的大小。

“lm”

“smallestabs”

最小的大小。一样= 0

“sm”

“largestreal”

最大的真实。

“lr”“拉”

“smallestreal”

最小的真实。

“老”“sa”

“bothendsreal”

两端,用k / 2分别具有最大和最小实部的值(如果从高端多一个)k很奇怪)。

“是”

非对称问题σ也可以是:

σ

描述

sigma (R2017a及更早的版本)

“largestimag”

最大虚部。

“李”如果一个是复杂的。

“smallestimag”

最小虚部。

“如果”如果一个是复杂的。

“bothendsimag”

两端,用k / 2具有最大和最小虚数部分的值(从高端if多一个)k很奇怪)。

“李”如果一个是真实的。

例子:eigs (k, 1)返回k特征值最接近于1。

例子:eigs (k ' smallestabs ')返回k最小幅特征值。

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

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

请注意

不建议使用选项结构来指定选项。请使用名称-值对。

选择字段 描述 名称-值对
issym

对称的Afun矩阵。

“IsFunctionSymmetric”
托尔

收敛宽容。

“宽容”
麦克斯特

最大迭代次数。

“MaxIterations”
p

兰索斯基向量的个数。

“SubspaceDimension”

从向量。

“StartVector”
disp

诊断信息显示级别。

“显示”
失败 输出中非收敛特征值的处理。 “FailureTreatment”
上海浦东发展银行 B对称正定? “IsSymmetricDefinite”
cholB

B乔里斯基因素胆固醇(B)?

“IsCholesky”
permB

指定排列向量permB如果稀疏B真的是胆固醇(B (permB permB))

“CholeskyPermutation”

例子:opts.issym=1,选择。托尔=1e-10创建具有为字段设置的值的结构issym而且托尔

数据类型:结构体

矩阵函数,指定为函数句柄。这个函数y = Afun(x)必须根据σ输入:

  • * x——如果σ是未指定或任何文本选项除“smallestabs”

  • x \——如果σ0“smallestabs”

  • (我)一个σ* \ x——如果σ是一个非零标量(对于标准特征值问题)。

  • (一个σ* B) \ x——如果σ是一个非零标量(对于广义特征值问题)。

例如Afun调用时工作eigsSigma = ' smallstab '

[L,U,p] = lu(A,'vector');Afun = @(x) U\(L\(x(p)));d = eigs(Afun,100,6,'smallestab ')

对于广义特征值问题,加矩阵B详情如下(B不能用函数句柄表示):

d = eigs(Afun,100,B,6,'smallestab ')

一个假设是非对称的,除非“IsFunctionSymmetric”(或opts.issym)则指定相反。设置“IsFunctionSymmetric”真正的确保eigs计算实特征值而不是复特征值。

方法提供附加参数的信息Afun功能,请参阅参数化功能

提示

调用eigs“显示”选项已打开,以查看预期的输出Afun

方阵尺寸一个它由Afun,指定为正标量整数。

名称-值参数

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

例子:d = eigs(A,k,sigma,'Tolerance',1e-10,'MaxIterations',100)放宽收敛公差并使用更少的迭代。
一般选择

全部折叠

收敛公差,指定为逗号分隔对,由“宽容”和一个正实数标量。

例子:s = eigs(A,k,sigma,'公差',1e-3)

算法迭代的最大次数,指定为逗号分隔的对,由“MaxIterations”一个正整数。

例子:d = eigs(A,k,sigma,'MaxIterations',350)

Krylov子空间的最大大小,指定为逗号分隔的对,由“SubspaceDimension”和一个非负整数。的“SubspaceDimension”值必须大于或等于K + 1对于真正的对称问题,和K + 2否则,k是特征值的个数。

推荐值为P >= 2*k,或者对于真正的非对称问题,P >= 2*k+1.如果不指定“SubspaceDimension”值,则默认算法使用20.兰索斯向量。

对于以下问题eigs的值增加,不能收敛“SubspaceDimension”可以改善收敛行为。但是,过多地增加该值会导致内存问题。

例子:d = eigs(A,k,sigma,'SubspaceDimension',25)

初始起始向量,指定为逗号分隔的对,由“StartVector”一个数字向量。

指定不同的随机起始向量的主要原因是希望控制用于生成向量的随机数流。

请注意

eigs使用私有随机数流以可再现的方式选择起始向量。改变随机数种子就可以了影响起始向量。

例子:d = eigs(A,k,sigma,'StartVector',randn(m,1))使用从全局随机数流中提取值的随机起始向量。

数据类型:

非收敛特征值的处理,指定为逗号分隔的对,由“FailureTreatment”其中一个选项是:“replacenan”“保持”,或“下降”

的价值“FailureTreatment”决定了eigs在输出中显示非收敛的特征值。

选项

对产量的影响

“replacenan”

将非收敛特征值替换为值。

“保持”

在输出中包含非收敛特征值。

“下降”

从输出中删除非收敛特征值。这个选项可以导致eigs返回比请求少的特征值。

例子:d = eigs(A,k,sigma,'FailureTreatment','drop')从输出中删除非收敛特征值。

数据类型:字符|字符串

切换诊断信息显示,指定为逗号分隔的对,由“显示”和一个数字或逻辑1真正的)或0).指定的值真正的1在计算过程中打开诊断信息的显示。

选项Afun

全部折叠

对称的Afun矩阵,指定为逗号分隔的对,由“IsFunctionSymmetric”和一个数字或逻辑1真正的)或0).

此选项指定矩阵是否Afun作用于它的输入向量是对称的。指定的值真正的1为了表明eigs应该对对称矩阵使用专门的算法并返回实特征值。

广义特征值问题的选项A* v = b * v * d

全部折叠

Cholesky分解开关B,指定为逗号分隔的对,由“IsCholesky”和一个数字或逻辑1真正的)或0).

此选项指定是否为矩阵的输入B在电话中eigs (A, B, ___)是乔里斯基因素吗R所产生的R = chol(B)

请注意

不使用此选项,如果σ“smallestabs”或者一个数字标量。

Cholesky排列向量,指定为逗号分隔的对,由“CholeskyPermutation”一个数字向量。指定排列向量permB如果稀疏矩阵B在因式分解之前重新排序根据胆固醇(B (permB permB))

的三输出语法胆固醇对于稀疏矩阵直接获取permB[R,p,permB] = chol(B,'vector')

请注意

不使用此选项,如果σ“smallestabs”或者一个数字标量。

对称-正确定性切换B,指定为逗号分隔的对,由“IsSymmetricDefinite”和一个数字或逻辑1真正的)或0).指定真正的1当你知道的时候B是对称正定的,也就是说,它是一个特征值严格为正的对称矩阵。

如果B是否对称正半定(某些特征值为零),则指定“IsSymmetricDefinite”作为真正的1部队eigs使用它在B是对称正定的。

请注意

要使用此选项,的值σ必须是数字或“smallestabs”

输出参数

全部折叠

特征值,作为列向量返回。d根据的值排序不同σ

的价值σ

输出排序

“largestabs”

按大小降序排列

“largestreal”

按实部降序排列

“largestimag”

按虚部降序排列

“smallestabs”

按大小升序排列

“smallestreal”

“bothendsreal”

按实部升序

“smallestimag”

按虚部升序排列

“bothendsimag”

虚数部绝对值降序排列

特征向量,作为矩阵返回。的列V的对角线上对应的特征值D.的形式和规范V取决于输入参数的组合:

  • [V,D] = eigs(A)收益矩阵V,它的列是的右特征向量一个这样A* v = v * d.的特征向量V都是归一化的,所以每个的2范数都是1。

    如果一个是对称的,那么特征向量,V,是标准正交的。

  • [V,D] = eigs(A,B)返回V作为一个矩阵,它的列是广义右特征向量满足A* v = b * v * d.每个特征向量的2范数不一定是1。

    如果B对称正定,那么特征向量在V都是标准化的,所以B-每个的norm为1。如果一个也是对称的,那么特征向量是B正交。

不同的机器,MATLAB的发行版®,或参数(如起始向量和子空间维数)可以产生不同的特征向量,它们在数值上仍然是准确的:

  • 对于实特征向量,特征向量的符号可以改变。

  • 对于复特征向量,特征向量可以乘以任何大小为1的复数。

  • 对于多个特征值,其特征向量可以通过线性组合的方式重新组合。例如,如果一个xλx而且一个yλy,然后一个x+y) =λx+y,所以x+y也是的特征向量一个

特征值矩阵,作为一个对角矩阵返回特征值在主对角线上。

收敛标志,返回为01.的值0表示所有特征值都收敛了。否则,不是所有的特征值都收敛。

使用这个收敛标志输出可以抑制关于收敛失败的警告。

提示

  • eigs使用私有随机数流生成默认的起始向量,以确保跨运行的可再现性。使用设置随机数生成器状态rng在调用之前eigs不影响输出。

  • 使用eigs并不是最有效的方法来找到一些小而密集的矩阵的特征值。对于这类问题,使用它可能会更快eig(全(A)).例如,在一个500 × 500矩阵中找到三个特征值是一个相对较小的问题,很容易处理eig

  • 如果eigs的值,增加Lanczos基向量的个数“SubspaceDimension”.作为辅助选项,调整最大迭代次数,“MaxIterations”,收敛公差,“宽容”,也有助于收敛行为。

兼容性的考虑

全部展开

在R2017b中行为发生了改变

参考文献

斯图尔特G.W.大特征问题的Krylov-Schur算法矩阵分析与应用杂志.2001年第3期第23卷第601-614页。

[2] Lehoucq, r.b., D.C. Sorenson, C. Yang。ARPACK用户指南.费城,宾夕法尼亚州:SIAM, 1998。

扩展功能

另请参阅

||

R2006a之前介绍过