You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中借助Eigen库计算左特征向量?

用Eigen计算矩阵的左特征向量

左特征向量的定义是满足 ( vX = \lambda v ) 的行向量 ( v ),其中 ( \lambda ) 是对应的特征值。利用线性代数性质,这个等式等价于 ( X^T v^T = \lambda v^T )——也就是说左特征向量的转置,就是原矩阵转置后的右特征向量。基于这个性质,你可以用Eigen按以下步骤计算左特征向量:

具体实现步骤

  • 对原矩阵做转置操作:Eigen::MatrixXd X_T = X.transpose();
  • 用EigenSolver求解转置矩阵的特征值和右特征向量:Eigen::EigenSolver<Eigen::MatrixXd> X_T_eigen(X_T);
  • 将转置矩阵的右特征向量矩阵整体转置,得到原矩阵的左特征向量矩阵(每行对应一个左特征向量):Eigen::MatrixXd left_eigenvectors = X_T_eigen.eigenvectors().transpose();

完整示例代码

#include <Eigen/Dense>
#include <iostream>

int main() {
    // 示例矩阵
    Eigen::MatrixXd X(2, 2);
    X << 1, 2,
         3, 4;

    // 原矩阵的右特征向量(常规计算)
    Eigen::EigenSolver<Eigen::MatrixXd> X_eigen(X);
    std::cout << "右特征向量:\n" << X_eigen.eigenvectors() << "\n\n";

    // 计算左特征向量
    Eigen::MatrixXd X_T = X.transpose();
    Eigen::EigenSolver<Eigen::MatrixXd> X_T_eigen(X_T);
    Eigen::MatrixXd left_eigenvectors = X_T_eigen.eigenvectors().transpose();

    std::cout << "左特征向量:\n" << left_eigenvectors << "\n";
    std::cout << "对应特征值:\n" << X_T_eigen.eigenvalues() << "\n";

    return 0;
}

注意事项

  • 转置矩阵的特征值和原矩阵的特征值完全一致,所以直接使用转置矩阵求解器的eigenvalues()即可,无需额外处理。
  • Eigen返回的特征向量矩阵默认按列存储右特征向量,转置后就会得到按行存储的左特征向量,每个行向量对应一个特征值。

内容的提问来源于stack exchange,提问作者Gwaine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:55:02