MATLAB中eigs函数用法

目录

语法

说明

示例

稀疏矩阵的最大特征值

稀疏矩阵的最小特征值

使用函数句柄的特征值

特征值的类型

'smallestabs' 与 'smallestreal' 特征值之间的差

接近特征值的 Sigma 值

已置换的 Cholesky 因子的特征值


        eigs函数的功能是特征值和特征向量的子集。

语法

d = eigs(A)
d = eigs(A,k)
d = eigs(A,k,sigma)
d = eigs(A,k,sigma,Name,Value)
d = eigs(A,k,sigma,opts)
d = eigs(A,B,___)
d = eigs(Afun,n,___)
[V,D] = eigs(___)
[V,D,flag] = eigs(___)

说明

        d = eigs(A) 返回一个向量,其中包含矩阵 A 的六个模最大的特征值。当使用 eig 计算所有特征值的计算量很大时(例如对于大型稀疏矩阵来说),这是非常有用的。

        d = eigs(A,k) 返回 k 个模最大的特征值。

        d = eigs(A,k,sigma) 基于 sigma 的值返回 k 个特征值。例如,eigs(A,k,'smallestabs') 返回 k 个模最小的特征值。

        d = eigs(A,k,sigma,Name,Value) 使用一个或多个名称-值对组参数指定其他选项。例如,eigs(A,k,sigma,'Tolerance',1e-3) 将调整算法的收敛容差。

        d = eigs(A,k,sigma,opts) 使用结构体指定选项。

        d = eigs(A,B,___) 解算广义特征值问题 A*V = B*V*D。您可以选择指定 k、sigma、opts 或名称-值对组作为额外的输入参数。

        d = eigs(Afun,n,___) 指定函数句柄 Afun,而不是矩阵。第二个输入 n 可求出 Afun 中使用的矩阵 A 的大小。您可以选择指定 B、k、sigma、opts 或名称-值对组作为额外的输入参数。

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

        [V,D,flag] = eigs(___) 也返回一个收敛标志。如果 flag 为 0,则表示已收敛所有特征值。

示例

稀疏矩阵的最大特征值

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

A = delsq(numgrid('C',15));
d = eigs(A)
d = 6×1

    7.8666
    7.7324
    7.6531
    7.5213
    7.4480
    7.3517

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

d = eigs(A,3)
d = 3×1

    7.8666
    7.7324
    7.6531

稀疏矩阵的最小特征值

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

A = delsq(numgrid('C',15));  
d = eigs(A,5,'smallestabs')
d = 5×1

    0.1334
    0.2676
    0.3469
    0.4787
    0.5520

使用函数句柄的特征值

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

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

        求矩阵的 LU 分解,将返回满足 A(p,:) = L*U 的置换向量 p。

[L,U,p] = lu(A,'vector');

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

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

        使用带有函数句柄 Afun 的 eigs 计算六个模最小的特征值。第二个输入为 A 的大小。

d = eigs(Afun,1500,6,'smallestabs')
d = 6×1 complex

   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 计算并绘制所有特征值。由于特征值为复数,plot 将自动使用实部作为 x 轴坐标,使用虚部作为 y 轴坐标。

load west0479
A = west0479;
d = eig(full(A));
plot(d,'+')

如图所示:

        特征值沿实线(x 轴)形成集群,距离原点特别近。

        eigs 有多个适用于 sigma 的选项,可以挑选不同类型的最大或最小特征值。为 sigma 的每个可用选项计算并绘制一些特征值。

figure
plot(d, '+')
hold on
la = eigs(A,6,'largestabs');
plot(la,'ro')
sa = eigs(A,6,'smallestabs');
plot(sa,'go')
hold off
legend('All eigenvalues','Largest magnitude','Smallest magnitude')
xlabel('Real axis')
ylabel('Imaginary axis')

如图所示:

figure
plot(d, '+')
hold on
ber = eigs(A,4,'bothendsreal');
plot(ber,'r^')
bei = eigs(A,4,'bothendsimag');
plot(bei,'g^')
hold off
legend('All eigenvalues','Both ends real','Both ends imaginary')
xlabel('Real axis')
ylabel('Imaginary axis')

如图所示:

figure
plot(d, '+')
hold on
lr = eigs(A,3,'largestreal');
plot(lr,'ro')
sr = eigs(A,3,'smallestreal');
plot(sr,'go')
li = eigs(A,3,'largestimag','SubspaceDimension',45);
plot(li,'m^')
si = eigs(A,3,'smallestimag','SubspaceDimension',45);
plot(si,'c^')
hold off
legend('All eigenvalues','Largest real','Smallest real','Largest imaginary','Smallest imaginary')
xlabel('Real axis')
ylabel('Imaginary axis')

如图所示:

'smallestabs' 与 'smallestreal' 特征值之间的差

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

A = delsq(numgrid('C', 150));

        使用 'smallestreal' 计算六个最小的实数特征值,它采用了使用 A 的 Krylov 方法。

tic
d = eigs(A, 6, 'smallestreal')
d = 6×1

    0.0013
    0.0025
    0.0033
    0.0045
    0.0052
    0.0063

toc
Elapsed time is 6.102979 seconds.

        使用 'smallestabs' 计算同样的特征值,它采用了使用 A 的倒数的 Krylov 方法。

tic
dsm = eigs(A, 6, 'smallestabs')
dsm = 6×1

    0.0013
    0.0025
    0.0033
    0.0045
    0.0052
    0.0063

toc
Elapsed time is 0.487185 seconds.

        特征值聚集在零附近。'smallestreal' 计算很难使用 A 进行收敛,因为特征值之间的差距非常小。相反,'smallestabs' 选项使用 A 的倒数,也就是 A 的特征值的倒数,它们的差距大得多,所以更容易计算。这种性能改进以分解 A 为代价,使用 'smallestreal' 则不需要进行分解。

接近特征值的 Sigma 值

        计算几乎等于特征值的 sigma 数值附近的特征值。

        矩阵 A = delsq(numgrid('C',30)) 是一个大小为 632 的对称正定矩阵,特征值合理分布在区间 (0 8) 中,但是在 4.0 处有 18 个重复的特征值。要计算 4.0 附近的一些特征值,尝试函数调用 eigs(A,20,4.0) 是合理的。然而,此调用计算 A - 4.0*I 的逆矩阵的最大特征值,其中 I 是单位矩阵。由于 4.0 是 A 的特征值,此矩阵为奇异矩阵,因此没有逆矩阵。eigs 失败并生成错误消息。sigma 的数值不能精确等于特征值。必须使用接近但不等于 4.0 的 sigma 值来求这些特征值。

        使用 eig 计算所有特征值,使用 eigs 计算 20 个最接近 4 - 1e-6 的特征值,然后比较结果。绘制按照每一种方法计算的特征值。

A = delsq(numgrid('C',30)); 
sigma = 4 - 1e-6;
d = eig(A);
D = sort(eigs(A,20,sigma));



plot(d(307:326),'ks')
hold on
plot(D,'k+')
hold off
legend('eig(A)','eigs(A,20,sigma)') 
title('18 Repeated Eigenvalues of A')

如图所示:

已置换的 Cholesky 因子的特征值

        创建稀疏随机矩阵 A 和 B,它们都具有低密度非零元素。

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

        求矩阵 B 的 Cholesky 分解,使用三个输出以返回置换向量 s 并测试值 p。

[R,p,s] = chol(B,'vector');
p
p = 0

        由于 p 为零,因此 B 是满足 B(s,s) = R'*R 的对称正定矩阵。

        计算涉及 A 和 R 的广义特征值问题的六个模最大的特征值和特征向量。由于 R 是 B 的 Cholesky 因子,请将 'IsCholesky' 指定为 true。此外,由于 B(s,s) = R'*R,因此 R = chol(B(s,s)),所以应使用置换向量 s 作为 'CholeskyPermutation' 的值。

[V,D,flag] = eigs(A,R,6,'largestabs','IsCholesky',true,'CholeskyPermutation',s);
flag
flag = 0

        由于 flag 为零,所有特征值均已收敛。

提示

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

  • 要求出小型稠密矩阵的几个特征值,使用 eigs 并不是最有效的方式。对于这些问题,使用 eig(full(A)) 求解可能会更快。例如,求 500×500 矩阵的三个特征值相对容易,使用 eig 即可轻松完成。

  • 对于某个给定矩阵,如果 eigs 无法收敛,可以通过增大 'SubspaceDimension' 值来增加 Lanczos 基向量的数量。作为备用方案,调整最大迭代次数 'MaxIterations' 和收敛容差 'Tolerance' 也有助于改善收敛行为。

参考

[1] Stewart, G.W. "A Krylov-Schur Algorithm for Large Eigenproblems." SIAM Journal of Matrix Analysis and Applications. Vol. 23, Issue 3, 2001, pp. 601–614.

[2] Lehoucq, R.B., D.C. Sorenson, and C. Yang. ARPACK Users' Guide. Philadelphia, PA: SIAM, 1998.

        

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `eigs` 是 MATLAB 一个求解矩阵特征值和特征向量的函数。它可以用于计算稠密或稀疏矩阵的最大或最小的 k 个特征值和对应的特征向量。 `eigs` 函数可以用于许多领域,如图像处理、信号处理、控制系统等。它可以用于计算模态分析、特征提取、降维、过滤和分解问题等。在工程、科学和数学领域,`eigs` 是一个非常实用的函数。 ### 回答2: 在MATLABeigs函数用于计算矩阵的特征值和特征向量。特征值是方阵的数值特征,可以理解为该矩阵的重要指标,而特征向量则是与这些特征值相关联的向量。 eigs函数的一般语法为: [V, D] = eigs(A, k, sigma) 其A是需要计算特征值和特征向量的矩阵,k是要计算的特征值和特征向量的数量,sigma是用于提供特征值的搜索条件。 eigs函数使用了迭代算法来计算最大的k个特征值和相应的特征向量。使用该函数可以获取矩阵A的特征值和特征向量,并在工程和科学计算具有重要的应用。 使用eigs函数可以帮助我们了解矩阵的性质和结构,如对称性、平衡性等。此外,特征值和特征向量也在很多应用发挥着重要作用,如图像处理、信号处理、机器学习和物理建模等领域。 对于大型矩阵,使用eigs函数较eig函数更为高效。通过设置参数k的值,我们可以灵活地选择计算的特征值和特征向量的数量,以满足特定问题的需求。 总之,MATLABeigs函数为我们提供了一种计算方阵特征值和特征向量的有效方法,应用广泛且具有重要的实际意义。 ### 回答3: matlabeigs函数用于计算矩阵的少数特征值和特征向量。它可以用于求解大型稀疏或稠密矩阵的特征值问题。eigs函数返回矩阵的k个最大绝对值的特征值及其对应的特征向量。 eigs函数可用于求解以下类型的问题: 1. 线性特征值问题:给定一个矩阵A,eigs函数可以计算A的k个特征值和对应的特征向量。这对于求解线性系统的模态分析,如结构动力学和电路分析等非常有用。 2. 特征值反问题:给定矩阵的特征值,eigs函数可以求解对应的特征向量。这对于解决图像和信号处理等问题十分有用。 3. 特征值与特征向量的范数限制问题:eigs函数可以设置特征值和特征向量所满足的范数限制。这对于优化问题、控制系统设计等领域非常重要。 在使用eigs函数时,可以通过设置输入参数来控制计算的精度和速度,例如指定求解的模式(如普通模式、对称模式和通用化模式),指定计算的特征值个数等。 总之,matlabeigs函数是一个强大的工具,可以用于解决多种特征值问题。无论是求解线性系统的振动频率,还是进行图像和信号处理,eigs函数都能提供准确和快速的特征值和特征向量计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值