【问题标题】:calculating the eigenvector from a complex eigenvalue in opencv从opencv中的复杂特征值计算特征向量
【发布时间】:2015-05-13 09:42:11
【问题描述】:

我正在尝试在 opencv 中计算 4x4 矩阵的特征向量。
为此我首先根据这个公式计算特征值:

Det( A - lambda * identity matrix ) = 0

来自wiki on eigenvalues and eigenvectors
解决这个问题后,它给了我 4 个看起来像这样的特征值:

0.37789 + 1.91687i
0.37789 - 1.91687i
0.412312 + 1.87453i
0.412312 - 1.87453i

从这 4 个特征值中,我取最高值,我想用这个公式:

( A - lambda * identity matrix ) v = 0

我尝试将原始矩阵 A 与 opencv 函数“eigen()”一起使用,但这并没有给我想要的结果。
我也尝试过使用 RREF(缩减行梯形),但是我不知道如何处理复杂的特征值。

所以我的问题是,你将如何计算这个特征向量?

我将我的数据插入wolframalpha 以查看我的结果应该是什么。

【问题讨论】:

  • “没有给我我正在寻找的结果”,这是什么意思?你得到什么结果?您是否尝试自己解方程,还是仅通过eigen()
  • 如果您只需要最高特征值及其对应的特征向量,则可以选择使用power iteration
  • @tobi303 eigen() 将始终返回:[-0.50, -0.50, -0.50, 0.50; 0.50、0.50、-0.50、0.50; -0.50、0.50、0.50、0.50; -0.50, 0.50, -0.50, -0.50] 只有 +/- 会有所不同。我将检查功率迭代,看看这是否是我正在寻找的

标签: c++ opencv complex-numbers eigenvector eigenvalue


【解决方案1】:

Opencv 已经有了计算特征值和特征向量的功能,cv::eigen()。我建议使用它而不是自己编写算法。

blog 很好,它解释了如何在 c、c++ 和 python 中执行此操作。

【讨论】:

  • 感谢您的回答,但您可能已经阅读 cv::eigen() 并没有给出我正在寻找的答案,因为它总是返回具有不同矩阵的大致相同的向量。
【解决方案2】:

所以我使用Eigen library 中的“ComplexEigenSolver”解决了这个问题。

//create a multichannel matrix
Mat a_com = Mat::zeros(4,4,CV_32FC2);
for(int i = 0; i<4; i++)
{
    for(int j = 0; j<4; j++)
    {
        a_com.at<Vec2f>(i,j)[0] = a.at<double>(i,j);
        a_com.at<Vec2f>(i,j)[1] = 0;
    }
}

MatrixXcf eigenA;
cv2eigen(a_com,eigenA); //convert OpenCV to Eigen
ComplexEigenSolver<MatrixXcf> ces;
ces.compute(eigenA);
cout << "The eigenvalues of A are:\n" << ces.eigenvalues() << endl;
cout << "The matrix of eigenvectors, V, is:\n" << ces.eigenvectors() << endl;

这给了我以下输出(这或多或少是我正在寻找的):

The eigenvalues of A are:
(0.3951,-1.89571)
(0.3951,1.89571)
(0.3951,1.89571)
(0.3951,-1.89571)
The matrix of eigenvectors, V, is:
(-0.704546,0)            (-5.65862e-009,-0.704546)     (-0.064798,-0.0225427)      (0.0167534,0.0455606)
(-2.22328e-008,0.707107)   (0.707107,-1.65536e-008)    (0.0206999,-0.00474562)    (-0.0145628,-0.0148895)
(-6.07644e-011,0.0019326) (0.00193259,-4.52426e-011)   (-0.706729,6.83797e-005)    (-0.000121153,0.706757)
(-1.88954e-009,0.0600963)  (0.0600963,-1.40687e-009)      (0.00200449,0.703827)     (-0.70548,-0.00151068)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    相关资源
    最近更新 更多