gpt4 book ai didi

matlab - 为什么 eigs( 'lm' ) 比 eigs ('sm' 快得多)

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:52 25 4
gpt4 key购买 nike

我使用 eigs 计算较大(数万)的稀疏方阵的特征向量。我想要的是最小的一组特征向量。但是

eigs(A, 10, 'sm')      % Note: A is the matrix

运行很慢。

但是,使用 eigs(A, 10, 'lm') 可以相对更快地给出答案。正如我所尝试的那样,用 eigs(A, 10, 'lm') 中的 A_width 替换 10 以便这包括所有特征向量,并没有解决这个问题,因为这使得它和使用 'sm' 一样慢。

所以,我想知道为什么计算最小向量(使用“sm”)比计算最大向量慢得多?

顺便说一句,如果您对如何将 eigs 与“sm”一起使用与“lm”一样快,请告诉我。

最佳答案

几乎所有标准 eigs 函数中使用的算法都是 Lanczos algorithm 的(一些变体) .它是迭代的,第一次迭代给你最大的特征值。这几乎可以解释您所做的每一个观察:

  1. 最大的特征值采用最少的迭代次数,
  2. 最小的特征值采用最大的迭代次数,
  3. 所有特征值也采用最大迭代次数。

有一些技巧可以通过实际使 eigs 成为另一个问题的最大特征值来“欺骗”eigs 来计算最小的特征值。这通常通过移位参数来完成。略过the Matlab documentation for eigs ,我看到他们有一个 sigma 参数,这可能对您有帮助。请注意,如果矩阵适合内存,同一文档建议使用正确的 eig,因为 eigs 有其数字怪癖。

关于matlab - 为什么 eigs( 'lm' ) 比 eigs ('sm' 快得多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com