Tôi đang cố gắng tính giá trị riêng của ma trận phức hợp tượng trưng M
của kích thước 3x3
. Trong một số trường hợp, eigenvals()
hoạt động hoàn hảo. Ví dụ: mã sau:Tính toán các giá trị riêng biệt tượng trưng với sympy
import sympy as sp
kx = sp.symbols('kx')
x = 0.
M = sp.Matrix([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
M[0, 0] = 1.
M[0, 1] = 2./3.
M[0, 2] = 2./3.
M[1, 0] = sp.exp(1j*kx) * 1./6. + x
M[1, 1] = sp.exp(1j*kx) * 2./3.
M[1, 2] = sp.exp(1j*kx) * -1./3.
M[2, 0] = sp.exp(-1j*kx) * 1./6.
M[2, 1] = sp.exp(-1j*kx) * -1./3.
M[2, 2] = sp.exp(-1j*kx) * 2./3.
dict_eig = M.eigenvals()
trả lại cho tôi 3 giá trị riêng biệt biểu tượng phức tạp của M
. Tuy nhiên, khi tôi đặt x=1.
, tôi nhận được lỗi sau:
raise MatrixError("Could not compute eigenvalues for {}".format(self))
Tôi cũng đã cố gắng để tính toán giá trị riêng như sau:
lam = sp.symbols('lambda')
cp = sp.det(M - lam * sp.eye(3))
eigs = sp.solveset(cp, lam)
nhưng nó sẽ trả về cho tôi một ConditionSet
trong mọi trường hợp, ngay cả khi eigenvals()
thể thực hiện công việc.
Có ai biết cách giải quyết đúng vấn đề về giá trị riêng này không, với bất kỳ giá trị nào của x
?
Cảm ơn rất nhiều sự giúp đỡ của bạn. Có vẻ như vấn đề của tôi xuất phát từ việc sử dụng 1j thay vì sp.I, nhưng việc sử dụng Rational chắc chắn sẽ giúp bạn! Vấn đề được giải quyết cho tôi, nhưng vẫn còn có một vấn đề với bản địa của SymPy ... – Azlof
Tôi đã đơn giản hóa ví dụ của bạn và đăng [dưới dạng vấn đề SymPy] (https://github.com/sympy/sympy/issues/13340) – FTP
Vấn đề được giải quyết trên github.Đối với những người quan tâm, bản sửa lỗi đã được đẩy vào nhánh chủ của SymPy. Cảm ơn Michelle! – Azlof