もう 1 つの方法は、行列のカーネルから単位行列を引いたものを計算することです。これは、行列のサイズと他の固有値に応じて、カールによって説明されているべき乗反復を使用するよりも高速である場合とそうでない場合があります。行列が大きくなり、2 番目の固有値が 1 から遠ざかると、ベキ反復はより適切になります。
アイデアは、Ax = x を Ax - x = 0 に書き換えることです。次に、その Ix = x を使用します。ここで、I は単位行列を示します。したがって、Ax - x = 0 は Ax - Ix = 0 または (AI) x = 0 と同等です。したがって、固有ベクトル x は AI のカーネル (またはヌル空間) にあります。
このチュートリアル ページでは、Eigen を使用して行列のカーネルを計算する方法について説明します。テストされていないコード:
MatrixXf M;
/* initialize M */
FullPivLU<MatrixXf> lu_decomp(M);
VectorXf x = lu_decomp.kernel().col(0);
/* x now contains the vector you want */
カーネルが空であることがわかる場合があります。これは、マトリックスが実際には確率論的ではないか、しきい値を調整する必要があることを意味します (上記のリンク先のページを参照)。