Другой метод состоит в том, чтобы вычислить ядро вашей матрицы за вычетом единичной матрицы. Это может или не может быть быстрее, чем использование итерации мощности, как объяснил Карл, в зависимости от размера матрицы и других собственных значений. Степень итерации лучше, когда матрица становится больше, а второе собственное значение отодвигается от единицы.
Идея состоит в том, чтобы переписать Ax = x как Ax - x = 0. Затем использовать это Ix = x, где I обозначает единичную матрицу. Таким образом, Ax - x = 0 эквивалентно Ax - Ix = 0 или (A-I) x = 0. Таким образом, ваш собственный вектор x лежит в ядре (или нулевом пространстве) A-I.
На этой странице учебника объясняется, как вычислить ядро матрицы с использованием Eigen. Немного непроверенный код:
MatrixXf M;
/* initialize M */
FullPivLU<MatrixXf> lu_decomp(M);
VectorXf x = lu_decomp.kernel().col(0);
/* x now contains the vector you want */
Вы можете обнаружить, что ядро пусто. Это означает, что либо матрица на самом деле не стохастическая, либо вам необходимо адаптировать порог (см. Ссылку, приведенную выше).