Рассмотрим эту матрицу:
[.6, .7]
[.4, .3]
Это матрица цепи Маркова;в столбцах каждая сумма равна 1. Это может представлять распределение населения, коэффициенты перехода и т. д.
Чтобы получить население в равновесии, возьмите собственные значения и собственные векторы ...
Из вольфрам альфа,Собственные значения и соответствующие им собственные векторы:
l1 = 1, v1 = [4/7, 1]
l2 = -1/10, v2 = [-1,1]
Для популяции в состоянии равновесия возьмите собственный вектор, соответствующий собственному значению 1, и масштабируйте его так, чтобы общее значение = 1.
Vector = [7/4, 1]
Total = 11/4
Итак, умножьте вектор на 4/11 ...
4/11 * [7/4, 1] = [7/11, 4/11]
Поэтому в состоянии равновесия первое государство имеет 7/11 населения, а другое - 4/11.
Если вы возьмете нужный собственный вектор, [7/4, 1]
и l2 нормализует его (так что все квадратичные значения суммируют до 1), вы получите примерно [.868, .496]
.
Все в порядке.Но когда вы получаете собственные векторы из питона ...
mat = np.array([[.6, .7], [.4, .3]])
vals, vecs = np.linalg.eig(mat)
vecs = vecs.T #(because you want left eigenvectors)
Один из собственных векторов, которые он выделяет, - это [.868, .496], для l2 нормированных.Теперь вы можете довольно легко снова масштабировать его, так что сумма каждого значения равна 1 (вместо суммы КВАДРАТА каждого значения) равной 1 ... просто сделайте вектор * 1 / сумма (вектор).Но есть ли способ пропустить этот шаг?Зачем добавлять вычислительные расходы в мой сценарий, когда каждый раз, когда я делаю это, нужно суммировать вектор?Можете ли вы заставить numpy, scipy и т. Д. Выплевывать нормализованный вектор l1 вместо нормализованного вектора l2?Кроме того, является ли это правильным использованием терминов l1 и l2 ...?
Примечание: я видел предыдущие вопросы, спрашивающие, как получить устойчивые состояния Маркова таким образом.У меня другой вопрос, я спрашиваю, как сделать так, чтобы он выдал себя за выпуклый вектор, нормализованный так, как я хочу, и я объясняю свои аргументы, включив марковскую часть.