Giá trị riêng của ma trận nhỏ


8

Tôi đang viết một thư viện số nhỏ cho các ma trận 2x2, 3x3 và 4x4 (thực, không đối xứng).

Rất nhiều văn bản phân tích số rất khuyến khích chống lại tính toán gốc của đa thức đặc trưng và khuyến nghị sử dụng thuật toán QR dịch chuyển kép. Tuy nhiên, kích thước của ma trận khiến tôi đặt câu hỏi liệu có hay không chỉ đơn giản là tính toán đa thức đặc trưng và tìm ra các gốc có thể đủ cho việc này. Tôi đã tìm thấy câu trả lời này trên StackExchange hỗ trợ điều này, nhưng tôi biết rằng các lỗi trong các hệ số đa thức có thể tạo ra các số không chính xác của đa thức (và do đó các giá trị riêng khác nhau). Mặt khác, phương trình chỉ là bậc bốn và chúng ta có các công thức phân tích cho các gốc đa thức vì vậy chúng ta không nên đi quá xa.

Những ưu và nhược điểm của việc sử dụng đa thức đặc trưng để có được giá trị riêng cho trường hợp này là gì?

Câu trả lời:


12

Điều đầu tiên cần lưu ý là sự tương ứng giữa tìm gốc rễ của một đa thức ( bất kỳ đa thức) và tìm kiếm các giá trị riêng của một ma trận tùy ý thực sự trực tiếp, và đó là một chủ đề phong phú, thấy Pseudozeros của đa thức và pseudospectra của ma trận đồng bằng Toh và Trefethen và các tài liệu tham khảo ở đó.

Về cơ bản, trường hợp 2 × 2 là tầm thường và công thức chuẩn, là số lượng ổn định và chính xác, miễn là yếu tố quyết định được đánh giá một cách chính xác-công thức trực tiếp sẽ không chính xác khi , nhưng có một công thức chính xác do Kahan sử dụng FMA ( https://hal.inria.fr/ensl-00649347v1/document ).

x1=bsign(b)Δ2a,x2=c/(ax1),Δ=det(b2a2cb)
Δb24ac

Không có tương đương trực tiếp như vậy ngay cả đối với đa thức bậc ba. ( Chỉnh sửa: xem liên kết đến phương pháp của Kahan bên dưới trong nhận xét của CADJunkie. Điều này có thể sai. ) Công thức trực tiếp không phải lúc nào cũng ổn định về số lượng (trái với giả định của bạn, tôi nghĩ vậy) và nó không thể được ổn định về mặt số như cũ cách như công thức bậc hai bằng cách chèn các dấu hiệu đúng ở đâu đó. Bạn có thể thử đánh giá nó với độ chính xác cao hơn, ví dụ với số học bản địa kép. Nhưng các cách tiếp cận làm việc trực tiếp trên đa thức là khá phức tạp. Ví dụ: ( https://doi.org/10.1145/2699468 , cũng hoạt động trên đa thức bậc bốn), bạn có thể sử dụng phương pháp của Newton với một phỏng đoán đầu tiên được tính toán trước, nhưng nó thực sự khá phức tạp và tốc độ thậm chí không lớn lắm .

Các công thức rõ ràng cho đa thức bậc 4 cũng không phải lúc nào cũng ổn định về số. Các đa thức là khó nhất có nguồn gốc không phổ biến (nhỏ hoặc gần nhau, khác nhau về độ lớn), nhưng thậm chí kiểm tra mã của bạn trên một vài tỷ đa thức hoàn toàn ngẫu nhiên thường có thể phát hiện ra các lỗi số.

Một điều gây tò mò liên quan đến điều này là Jenkins-Traub, một cách phổ biến tốt để tìm ra các gốc đa thức, thực sự là một thuật toán eigenvalue (lặp đi lặp lại) được ngụy trang.

Tôi có thể nói rằng bằng chứng của các công thức, theo một cách nào đó, là sai lệch: nó lừa bạn nghĩ rằng bởi vì công thức có dạng đóng có nghĩa là nó rẻ hơn / dễ dàng hơn. Tôi thực sự khuyên bạn nên thực sự kiểm tra / điểm chuẩn này trên một số dữ liệu thử nghiệm. Điều đó không phải là sự thật: việc xác định gốc của các đa thức bậc nằm trong một yếu tố số nguyên nhỏ gây khó khăn cho toàn bộ vấn đề xác định giá trị riêng của một ma trận nhỏ và các thói quen thư viện chuẩn cho các giá trị riêng mạnh hơn nhiều và được thử nghiệm tốt. Vì vậy, bằng cách giảm vấn đề eigenvalue nhỏ thành vấn đề gốc đa thức mức độ thấp, bạn không nhất thiết phải đơn giản hóa nó.3

Những ưu và nhược điểm của việc sử dụng đa thức đặc trưng để có được giá trị riêng cho trường hợp này là gì?

Tôi nghĩ rằng con lừa chính là giả định này mà bạn thực hiện:

Mặt khác, phương trình chỉ là bậc bốn và chúng ta có các công thức phân tích cho các gốc đa thức vì vậy chúng ta không nên đi quá xa.

bởi vì một công thức ở dạng đóng và phân tích, điều đó có nghĩa là nó dễ / rẻ / chính xác, không nhất thiết phải đúng. Nó có thể đúng với dữ liệu cụ thể mà bạn có thể có, nhưng theo như tôi biết thì nó không đúng.

PS Toàn bộ sự khác biệt giữa dạng đóng và dạng không đóng thực sự rất khó hiểu với số học máy tính: bạn có thể nghĩ rằng trong một công thức khối là một dạng đóng, nhưng theo như số học máy tính có liên quan, đó chỉ là một hàm hợp lý gần đúng khác, nó có thể nhanh hơn, nhưng không khác biệt cơ bản, với hàm hợp lý gần đúng xác định kết quả của thuật toán eigenvalue.cos()


Cảm ơn bạn đã trả lời tuyệt vời. Một chút về giá trị bản địa và gốc poly được kết nối là mới đối với tôi. Tôi thấy rằng các giải pháp dạng đóng không nhất thiết phải tốt hơn khi xử lý số học máy tính. Tôi đã lên kế hoạch sử dụng một bộ giải đa phương bậc hai và bậc ba mà Kahan đã viết về ( people.eecs.ber siêu.edu / ~ wkahan / Math128 / Cicic.pdf ) và chuyển đổi tứ phân thành một khối bằng cách sử dụng hệ số Descartes cho các giải pháp của tôi. Bạn có đề nghị thực hiện thuật toán QR hoặc cách tiếp cận đã nêu của tôi không?
CADJunkie

@CADJunkie Thật tuyệt, cảm ơn bạn, tôi không biết Kahan đã viết điều đó, tôi sẽ đọc nó sau. Thật khó để đề xuất như thế này, thay vào đó, cách tốt hơn để giải quyết những câu hỏi này là thực hiện các ý tưởng, sau đó kiểm tra và đánh giá chúng và đi với những điểm chuẩn đó, điều đó dứt khoát hơn nhiều. Hiệu suất là rất khó để dự đoán như thế này, trước khi nhìn thấy kết quả. Nhưng ít nhất hãy đảm bảo so sánh với tất cả các bộ giải eigenvalue thư viện tiêu chuẩn.
Kirill

@CADJunkie Dựa trên những gì Kahan viết, trường hợp khối cũng có thể được thực hiện tốt hơn trực tiếp. Giả sử rằng, tôi nghĩ những gì tôi đã viết là ổn đối với các bộ tứ và cao hơn.
Kirill

1

Sử dụng thuật toán QR là cách tốt hơn. Tôi nghĩ rằng tốt nhất là sử dụng một thuật toán phù hợp nhất cho nhiệm vụ trong tay.

Trên thực tế, ngay cả khi bạn đang cố gắng tính toán gốc của đa thức, mà không có ý định sử dụng chúng làm giá trị riêng của ma trận, thì thường nên tạo Ma trận đồng hành cho đa thức đó và giải quyết các giá trị riêng của ma trận đó. (nghĩa là thực hiện quy trình ngược lại với những gì bạn đang xem xét.) Quá trình này cực kỳ mạnh mẽ, nhưng không hiệu quả về mặt tính toán. Một thuật toán cụ thể cho nhiệm vụ tìm kiếm gốc đa thức (ví dụ, Jenkins-Traub, Phương pháp Laguerre, v.v.) sẽ hiệu quả hơn. Và ngay cả khi bạn sử dụng một trong những phương pháp này, vẫn có thể có một số trường hợp hình thành Ma trận đồng hành và tính toán giá trị bản địa của nó vẫn cho kết quả tốt hơn.

Ngoài ra, như Kirill đã chỉ ra, không có cách nào để tận dụng các giải pháp dạng đóng cho đa thức bậc 3 hoặc bậc 4. Tôi đã xem xét điều này vài năm trước khi viết bản dịch thuật toán Jenkins-Traub. Đối với các kết quả bằng số, tốt nhất vẫn là viết một thuật toán từ dưới lên dưới dạng một bộ giải rời rạc và bỏ qua các giải pháp dạng đóng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.