如何求具有同伦矩阵的特征值和特征向量?

2024-05-20 10:10:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用这个: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)))

Tags: lambdainform密码系统prettyelementmatrix
2条回答

symphy有一个非常方便的方法来获得特征值和特征向量:sympy-doc

你的例子只会变成:

from sympy import *
A = Matrix([[0, 2], [1, -3]])
print(A.eigenvals())  #returns eigenvalues and their algebraic multiplicity
print(A.eigenvects())  #returns eigenvalues, eigenvects

方法^{}^{}是这里通常使用的方法。

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]

如果要将特征向量显示为简单的坐标列表,请执行以下操作

[list(tup[2][0]) for tup in A.eigenvects()]

将输出[[-2/(-sqrt(17)/2 + 3/2), 1], [-2/(3/2 + sqrt(17)/2), 1]]。(注意,这只是为每个特征值选择一个特征向量,这并不总是您想要的)

相关问题 更多 >