Tôi muốn tạo ra các ma trận bán xác định ngẫu nhiên dương. Tôi đang tìm kiếm một thuật toán hoặc tốt hơn là thực hiện đơn giản thuật toán trong C, MATLAB, java hoặc bất kỳ ngôn ngữ nào.Một thuật toán đơn giản để tạo ra các ma trận dương-semidefinite
Trả lời
- tạo ma trận ngẫu nhiên
- nhân nó bằng cách chuyển vị riêng của nó
- bạn đã có được một ma trận bán xác định dương.
Ví dụ mã (Python):
from scipy import random, linalg
matrixSize = 10
A = random.rand(matrixSize,matrixSize)
B = numpy.dot(A,A.transpose())
print 'random positive semi-define matrix for today is', B
Nếu bạn có thể tạo ra một ma trận ngẫu nhiên trong ngôn ngữ của bạn lựa chọn, sau đó bằng cách sử dụng các tài sản đó một ma trận nhân với chuyển vị của nó là tích cực bán definte, bạn có thể tạo ra một dương matix bán xác định ngẫu nhiên
Trong Matlab nó sẽ là đơn giản như
% Generate a random 3x3 matrix
A = rand(3,3)
% Multiply by its tranpose
PosSemDef = A'*A
Bạn cần phải rõ ràng về định nghĩa của bạn về "ngẫu nhiên". Các ràng buộc của bạn trên ma trận kết quả là gì? Bạn có muốn các hệ số được thống nhất hoặc phân phối bình thường không? Bạn có muốn các giá trị riêng có phân phối cụ thể không? (Vv)
Có một số cách để tạo ra tích cực semidefinite ma trận M, bao gồm:
- Cho một ma trận tùy ý A, tính M = A T A (xây dựng một Cholesky decomposition)
- Cho một ma trận S chéo tùy ý với mục chéo không âm, và một ma trận trực giao Q có cùng kích thước, tính M = QSQ T (xây dựng một singular value decomposition)
Vì lý do số tôi có thể chọn phương pháp thứ hai bằng cách tạo ma trận đường chéo với các thuộc tính mong muốn, sau đó tạo Q làm thành phần của một số Householder reflections (tạo một vectơ ngẫu nhiên v, tỷ lệ với chiều dài đơn vị, H = I - 2vv T); Tôi nghi ngờ bạn muốn sử dụng K * N trong đó N là kích thước của ma trận M, và K là một số từ 1,5-3 (tôi đoán về điều này) để đảm bảo rằng nó có đủ mức độ tự do.
Bạn cũng có thể tạo ma trận trực giao Q bằng cách sử dụng Givens rotations: chọn 2 giá trị khác biệt từ 1 đến N và tạo vòng xoay Givens về cặp trục đó, với góc được phân bố đồng đều từ 0 đến 2 * pi. Sau đó, lấy K * N trong số này (cùng một lý do như đoạn trên) và thành phần của chúng tạo ra Q.
chỉnh sửa: Tôi muốn đoán (không chắc chắn) nếu bạn có hệ số được tạo độc lập và được phân phối bình thường, sau đó ma trận như một toàn thể sẽ được "thường phân phối" (bất cứ điều gì có nghĩa là). Đó là sự thật cho vectơ, ít nhất. (N biến ngẫu nhiên Gaussian được tạo độc lập, một cho mỗi thành phần, cung cấp cho bạn một vector ngẫu nhiên Gaussian) Điều này không đúng đối với các thành phần phân bố đồng nhất.
Phương pháp dựa trên phân tích Cholesky chỉ hoạt động với các ma trận _dense_. Cấp, một ma trận Householder ngẫu nhiên sẽ nói chung là dày đặc là tốt, do đó, điều tương tự có thể được nói cho phương pháp dựa trên SVD. – ocramz
Phân bố tự nhiên trên ma trận bán kết dương dương là Wishart distributions.
A '* A sẽ cung cấp ma trận semidefite dương iff và chỉ khi A bị thiếu cấp.Vì vậy, các câu trả lời đã nêu ở trên và sao chép từ wikipedia không phải là sự thật. Để tính toán ma trận semidefinite dương đơn giản, hãy lấy bất kỳ m vuông chữ nhật nào bằng ma trận n (m < n) và nhân nó với vị trí của nó. I E. nếu B là m theo n ma trận, với m < n, thì B '* B là ma trận bán kết. Tôi hi vọng cái này giúp được.
Nếu A có xếp hạng đầy đủ, AA 'vẫn còn dương tính nửa tích cực. Nếu A có m hàng và n cột, thì AA 'có thứ hạng * nhiều nhất * m. –
Vâng, tuyên bố của bạn không đúng Alex. Các eignevalues của A'A luôn giống như của AA '. Vì vậy, nếu A là ma trận vuông có xếp hạng đầy đủ, thì cả A'A và AA 'đều là đối xứng vuông và có xếp hạng đầy đủ. Đơn giản chỉ cần đặt: Nếu A có xếp hạng đầy đủ, thì AA 'KHÔNG THỂ là semidefinite. Nó phải là xác định dương. –
Một ma trận xác định dương xác định là cực dương semidefinite. –
- 1. Thuật toán ma trận skew
- 2. Viết một ma trận Triplet đơn giản vào một tệp?
- 3. Cách tạo một thuật toán Gradient Descent đơn giản
- 4. tạo ra một ma trận tam giác
- 5. Thuật toán cho phép nhân ma trận dạng bậc hai với ma trận thô
- 6. Thuật toán giả ngẫu nhiên đơn giản
- 7. Tối ưu hóa một thuật toán tìm kiếm đơn giản
- 8. Thuật toán mã hóa đơn giản
- 9. Có cách nào đơn giản để đảo ngược ma trận tam giác (trên hoặc dưới) không?
- 10. Độ phức tạp của thuật toán nhân ma trận
- 11. Các vấn đề với thuật toán phụ thuộc đơn giản
- 12. Thuật toán để đơn giản hóa bề mặt 3D?
- 13. Liên kết cho các thuật toán trò chơi đơn giản
- 14. Vượt qua các ma trận đơn giản tức là. cv :: Mat cho các hàm trong OpenCV2.4
- 15. Thuật toán đơn giản nhất để thoát khỏi một ký tự đơn lẻ là gì?
- 16. Một cách thích hợp để tạo ma trận trong C++
- 17. Gợi ý các thuật toán đơn giản nhất cho một số thao tác Biểu đồ
- 18. Tìm một thuật toán hiệu quả cho một hoạt động ma trận
- 19. Thuật toán đơn giản để tạo dây chuyền trong Đề án?
- 20. Tính toán ma trận hiệp phương sai
- 21. Thuật toán băm hình ảnh nhanh và đơn giản
- 22. Thuật toán thu gom rác đơn giản để thử nghiệm với một thông dịch viên đơn giản là gì?
- 23. Thuật toán đếm số lần xuất hiện của ma trận bên trong một lớn hơn
- 24. Thuật toán khác biệt của từ đơn giản
- 25. thuật toán cho số chỉ số của ma trận tam giác hệ số
- 26. Thuật toán đề xuất/đề xuất đơn giản
- 27. Thuật toán để hoàn thành ma trận dữ liệu bị lỗi
- 28. Thuật toán tạo ra một câu đố Zebra/Einstein
- 29. Phép toán Boolean trên ma trận scipy.sparse
- 30. Tại sao Matlab có thể so sánh một ma trận trống với ma trận đơn?
Bạn có chắc chắn không? Theo Wikipedia, bạn có thể tạo ra một ma trận xác định dương (không bán xác định, nhưng vẫn) bằng cách nhân một ma trận L với chuyển vị của nó, trong đó L là ma trận tam giác dưới có tất cả các phần tử đường chéo + ve. Điều này cho thấy rằng một ma trận ngẫu nhiên sẽ không hoạt động nói chung. –
Từ Wikipedia: "Đối với bất kỳ ma trận A nào, ma trận A * A là semidefinite dương," Liên kết: http://en.wikipedia.org/wiki/Positive-definite_matrix#Negative-definite.2C_semidefinite_and_indefinite_matrices – chillysapien
Ah, bạn khá đúng, cảm ơn cho chillysapien đó. Tôi phải giải thích sai số lượng. +1. –