【问题标题】:Find all eigenvalues and eigenvectors of the given matrix in C在 C 中找到给定矩阵的所有特征值和特征向量
【发布时间】:2022-11-24 07:11:46
【问题描述】:

我需要编写需要计算对称矩阵的所有特征值和特征向量的 SVD 算法,所以我问你是否有任何一个可以指出对他们的计算有用的代码。在纸上做起来很简单,但在代码方面,事情就变得困难了。

谢谢。

【问题讨论】:

  • 似乎您已经有了算法/伪代码?您介意将其与问题一起发布吗?
  • 计算矩阵的特征值和特征向量的算法是一个非常高级的数学主题,我真的建议您查看像 intel-mkl 或 CBLAS 这样的库或任何其他实现它们的库,您自己将花费几个月的时间结果会很糟糕,而且有 PHD 的人已经为你完成了工作并把它们放在了那些库中。
  • 特别是对称矩阵的 QR 方法对您的情况很有用,但您必须找到一个数学库来实现它并与您的代码库一起使用。
  • 我需要在不使用大学项目库的情况下从头开始实现代码。关于如何进行的任何建议?

标签: c algorithm eigenvalue svd eigenvector


【解决方案1】:

你没有展示任何算法(甚至没有提到你正在使用的算法)所以我们必须猜测一切。

很久以前,我看到一个迭代(和简单)的算法,它允许你通过将矩阵应用于它来获得最大的特征值(及其相应的特征向量),并将向量缩放到规范化的大小(例如,使其规范 1.0或缩放它使 1.0 成为第一个组件,等等)

这可以让你得到最大的特征值和特征向量(可以证明这个序列使所有其他特征向量的分量越来越小,最后消失,只剩下最大特征值的特征向量)

现在,您必须计算一个矩阵投影,它使该向量无效(通过从单位矩阵中减去该向量的分量)并将结果矩阵乘以原始矩阵。您将拥有一个矩阵,该矩阵使最大特征值的特征向量无效,并像原始矩阵一样留下所有内容。然后你重复这个过程(这不能给你相同的向量,因为现在特征向量在矩阵的内核中)重复这个过程 dim-1 次,你将得到矩阵的所有特征向量/特征值。

作为矩阵对称保证你有良好的行为。

您将必须决定如何规范化您的向量,从什么向量开始(随机向量是一个很好的机会)使用多少次迭代(随着特征值越来越接近,收敛速度越来越慢)

将您的代码放在问题中,以便我们为您提供帮助。

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 2017-10-21
    • 2013-05-15
    • 2019-04-27
    • 2022-06-14
    • 1970-01-01
    相关资源
    最近更新 更多