我想用这个:a
问题是我不知道如何用同伦解特征值。
这是我的密码。我想从矩阵A
中得到x1和x2的一些值
from sympy import *
x1, x2, Lambda = symbols('x1 x2 Lambda')
I = eye(2)
A = Matrix([[0, 2], [1, -3]])
equation = Eq(det(Lambda*I-A), 0)
D = solve(equation)
print([N(element, 4) for element in D]) # Eigenvalus in decimal form
print(pretty(D)) # Eigenvalues in exact form
X = Matrix([[x1], [x2]]) # Eigenvectors
T = A*X - D[0]*X # The Ax = %Lambda X with the first %Lambda = D[0]
print(pretty(solve(T, x1, x2)))
symphy有一个非常方便的方法来获得特征值和特征向量:sympy-doc
你的例子只会变成:
方法^{} 和^{} 是这里通常使用的方法。
A.eigenvals()
返回{-sqrt(17)/2 - 3/2: 1, -3/2 + sqrt(17)/2: 1}
,这是一个特征值及其多重性的字典。如果不关心多重性,可以使用list(A.eigenvals().keys())
获得特征值的简单列表。eigenvects
的输出有点复杂,由三个(特征值,这个特征值的多重性,特征空间的基)组成。注意,多重性是algebraic multiplicity,而返回的特征向量数是geometric multiplicity,可能更小。由于某种原因,特征向量返回为单列矩阵。。。对于矩阵,
A.eigenvects()
返回特征值-3/2 + sqrt(17)/2
的特征向量[-2/(-sqrt(17)/2 + 3/2), 1]
,返回特征值-sqrt(17)/2 - 3/2
的特征向量[-2/(3/2 + sqrt(17)/2), 1]
。如果要将特征向量显示为简单的坐标列表,请执行以下操作
将输出
[[-2/(-sqrt(17)/2 + 3/2), 1], [-2/(3/2 + sqrt(17)/2), 1]]
。(注意,这只是为每个特征值选择一个特征向量,这并不总是您想要的)相关问题 更多 >
编程相关推荐