Sắp xếp lại một ma trận thông thường để chặn dạng đường chéo


8

Có một thuật toán để sắp xếp lại một ma trận thành dạng đường chéo khối, cho rằng ma trận là đường chéo khối trong tự nhiên nhưng được chọn ngẫu nhiên với sự lựa chọn cơ bản không khôn ngoan?

Cụ thể, có mô-đun python nào cho việc này không?


2
Bạn có muốn "sắp xếp lại" ma trận bằng hoán vị hoặc thay đổi cơ sở không?
Christian Clason

1
Ban đầu tôi có nghĩa là hoán vị cơ sở mà tôi nghĩ là dễ thực hiện. Trường hợp thay đổi cơ sở có thể được thực hiện bằng cách lấy một số đối số vật lý nếu ma trận là Hamilton nhưng đối với một số ma trận chung, nó sẽ khá khó.
Máy

Câu trả lời:


7

Là ma trận thưa thớt hay dày đặc? Có đối xứng không?

Tôi giả sử bằng cách "sắp xếp lại", bạn có nghĩa là hoán vị các mục, thay vì áp dụng một số phép biến đổi tương tự tổng quát hơn cho ma trận. Trong trường hợp đó, bạn có thể nghĩ về ma trận dưới dạng biểu đồ; hai đỉnh , của đồ thị này được kết nối nếu . Nếu ma trận không đối xứng, thì các cạnh được định hướng, nhưng đó là cùng một ý tưởng.A i j A i j0n×nMộtTôijMộtTôij0

Thực tế là ma trận của bạn là đường chéo khối (sắp xếp lại) có nghĩa là đồ thị không được kết nối và việc tìm các đỉnh nào sẽ nằm trong một khối với nhau để tìm các thành phần được kết nối của biểu đồ. Bạn có thể làm điều này với một tìm kiếm đầu tiên . Vì thứ tự đảo ngược Cuthill-McKee của ma trận về cơ bản là tìm kiếm đầu tiên, nên bạn có thể tìm mã Python của ai đó để đặt hàng RCM và sử dụng trực tiếp hoặc sửa đổi nó cho mục đích của bạn.


Cảm ơn! Giả sử ma trận là thưa thớt và đối xứng (ẩn sĩ).
Máy

3

Mỗi ma trận là khối chéo trong một lựa chọn cơ bản khôn ngoan - đây được gọi là dạng bình thường của Jordan và cơ sở được tạo thành từ các hàm riêng tổng quát của nó. Nếu ma trận đối xứng, cơ sở này được tạo thành từ các hàm riêng và bạn có thể tính toán nó bằng cách sử dụng thuật toán QR . SciPy cung cấp mô-đun linalg.qrđể tính toán phân tách QR cần thiết. Mặt khác, bạn có thể sử dụng phân tách giá trị số ít , có thể được tính bằng cách sử dụng linalg.svd.


2
Sử dụng mẫu Jordan bình thường là một ý tưởng thực sự tồi vì nó không ổn định về số lượng . Một lựa chọn tốt hơn sẽ là phân tách Schur , ổn định về số lượng, với chi phí sắp xếp lại ma trận của bạn thành một hình tam giác trên.
Geoff Oxberry

Tất nhiên, và tôi đã không đề xuất tính toán nó ngoại trừ các ma trận đối xứng, nơi nó trùng khớp với phân tách Schur (và nó có thể được tính toán ổn định bằng thuật toán QR). Đối với các ma trận không đối xứng chung, tôi không biết cách tiếp cận tốt hơn để chéo hóa một ma trận so với SVD.
Christian Clason

2
Và đó là một điểm tốt. Tôi sẽ không nói rằng SVD "chéo" một ma trận. Mặc dù nó mang lại một phép phân tách có chứa ma trận đường chéo, nhưng đường chéo thường được sử dụng để chỉ một phép biến đổi tương tự (hoặc phép phân tách dựa trên sự biến đổi / thay đổi cơ sở như vậy) dẫn đến ma trận đường chéo (hoặc khối chéo). SVD không phải là một phép biến đổi tương tự, mặc dù nó là một phép phân tách đặc biệt hữu ích.
Geoff Oxberry

Điểm lấy (và theo nghĩa đó, không phải mọi ma trận đều có thể chéo). Tôi cũng sẽ chỉ ra rằng đường chéo bằng một phép biến đổi tương tự không đơn nhất có thể rất không ổn định.
Christian Clason
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.