Tôi có ma trận chiều tùy thuộc vào vector tham số .H ( → k ) → k
Bây giờ, các thường trình eigenvalue trả về các giá trị riêng không theo thứ tự cụ thể (chúng thường được sắp xếp), nhưng tôi muốn theo dõi các giá trị riêng dưới dạng các hàm trơn tru của . Vì các giá trị riêng không được trả về theo bất kỳ thứ tự cụ thể nào, chỉ cần theo dõi cho một số chỉ mục cụ thể sẽ trả về tập hợp các dòng không trơn tru, như được hiển thị dưới hình ảnh dưới đây→ k E i i ∈ { 1 , . . , n }
Ý tưởng của tôi để theo dõi các dòng liên tục là sử dụng eigenvector. Cụ thể, đối với hai điểm gần và vector riêng nên xấp xỉ trực giao để trong đó và là một số hoán vị. Sau đó, tôi sẽ sử dụng hoán vị đã cho để sắp xếp lại các giá trị riêng và do đó theo dõi các đường trơn.→ k +d → k vi( → k )⋅vj( → k +d → k )~δpipjpi,pj∈π({1,...,N})π
Tôi nói cách khác, tôi sẽ theo dõi sự liên tục của người bản địa.
Tuy nhiên, tôi gặp phải một số vấn đề với thói quen số. Tại một tập hợp nhỏ các điểm tôi sử dụng, một vài hàm riêng tại các điểm gần đó không gần như là trực giao. Sự nghi ngờ đầu tiên của tôi là những người bản địa đó tương ứng với một giá trị riêng bị thoái hóa, nhưng điều đó không phải lúc nào cũng đúng.
Là điều như vậy được phép xảy ra. Hoặc, có thể đảm bảo rằng các thói quen số trả về các hàm riêng liên tục? Thường trình tôi sử dụng là numpy.linalg.eigh, một giao diện cho zheevd từ LAPACK.
(Các nhà vật lý trong số các bạn sẽ nhận ra rằng tôi đang nói về cấu trúc ban nhạc)
numpy.linalg.svd
để tạo eigenvector của bạn. Ít nhất là trong Matlab, thói quen cơ bản để svd
luôn trả về giá trị riêng và hàm riêng theo thứ tự giảm dần.