我有一个矩阵T
:
[ 0.2 0.4 0.4]
[ 0.8 0.2 0. ]
[ 0.8 0. 0.2]
我想把它乘以一个lhs行向量(s1,s2,s3),并将乘积表达式设置为对应的rhs列向量的元素,这样它就会是
vl * T = s( ..., ..., ...)
这相当于求解三个线性方程,从中可以求解高达比例因子的特征向量元素。将元素之和设置为1,就得到了单位特征向量。
例如,首先,将lhs行向量乘以矩阵的第一列,并将乘积设置为s1,即可得到方程0.2 x s1+0.8 x s2+0.8 x s3=s1。
另外两个方程是通过将lhs行向量乘以矩阵的第二列和第三列,并将乘积分别设置为s2和s3而获得的。求解这三个方程会得到s1、s2和s3之间的相对值。将这些元素的总和设置为1,将得到单位特征向量元素。
我想用python做这件事,下面是我的尝试:
>>> import numpy as np
>>> from scipy.linalg import eig
>>> np.set_printoptions(precision=4)
>>> T = np.mat("0.2 0.4 0.4;0.8 0.2 0.0;0.8 0.0 0.2")
>>> np.set_printoptions(precision=4)
>>> w, vl, vr = eig(T, left=True)
>>> vlUnit = vl[:,1]/sum(vl[:,1])
>>> s = vlUnit
>>> s
array([ 7.3543e+15, -3.6772e+15, -3.6772e+15])
所以我知道vl
和VlUnit
都是类型numpy.array
,T
是矩阵
我也看不懂s
的结果。
我转换了,它的7354300000000000, -3677200000000000, 3677200000000000
在我看来不对劲。我做错了什么??
谢谢,
Chris
这应该为您提供v1单位向量:
v1Unit = np.linalg.norm(v1[:, 1])