【发布时间】:2014-02-20 19:42:47
【问题描述】:
我有一个矩阵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 在我看来不合适。我做错了什么??
谢谢,
克里斯
【问题讨论】:
-
v1Unit 不是单位向量(如果这是您需要的)。通过除以长度(元素平方和的平方根)得到的单位向量。另外,如果 s 只是单位向量,为什么不直接调用它呢?
-
恐爪龙,谢谢!我不知道...
-
deinonychusaur 有什么建议吗?
-
s=vl[:,1]/sqrt(sum(vl[:,1]**2)) 像这样?旅鼠给了我!
-
您有参考资料可供我参考吗?
标签: python numpy linear-algebra eigenvector