Một ma trận trực giao là một ma trận vuông với các mục thực có cột và hàng là các vectơ đơn vị trực giao (tức là vectơ trực giao).
Điều này có nghĩa là M ^ TM = I, trong đó I là ma trận danh tính và ^ T biểu thị hoán vị ma trận.
Lưu ý rằng đây là trực giao không phải là "trực giao đặc biệt" nên định thức của M có thể là 1 hoặc -1.
Mục tiêu của thử thách này không phải là độ chính xác của máy nên nếu M ^ TM = I đến trong 4 chữ số thập phân thì sẽ ổn.
Nhiệm vụ là viết mã lấy một số nguyên dương n > 1
và đưa ra một ma trận n trực giao ngẫu nhiên theo n ma trận . Ma trận nên được chọn ngẫu nhiên và thống nhất từ tất cả n bởi n ma trận trực giao. Trong bối cảnh này, "thống nhất" được định nghĩa theo phương pháp Haar, về cơ bản đòi hỏi phân phối không thay đổi nếu nhân với bất kỳ ma trận trực giao nào được chọn tự do. Điều này có nghĩa là các giá trị của ma trận sẽ là các giá trị dấu phẩy động trong phạm vi -1 đến 1.
Đầu vào và đầu ra có thể là bất kỳ hình thức nào bạn thấy thuận tiện.
Vui lòng hiển thị một ví dụ rõ ràng về mã của bạn đang chạy.
Bạn không được sử dụng bất kỳ chức năng thư viện hiện có nào tạo ra ma trận trực giao. Quy tắc này là một chút tinh tế vì vậy tôi sẽ giải thích thêm. Quy tắc này cấm sử dụng bất kỳ chức năng hiện có nào trong một số (hoặc không) đầu vào và đưa ra một ma trận có kích thước ít nhất là n bởi n được đảm bảo là trực giao. Một ví dụ cực đoan, nếu bạn muốn ma trận danh tính n by n, bạn sẽ phải tự tạo nó.
Bạn có thể sử dụng bất kỳ thư viện trình tạo số ngẫu nhiên tiêu chuẩn nào để chọn số ngẫu nhiên bạn chọn.
Mã của bạn sẽ hoàn thành trong vòng tối đa vài giây n < 50
.
diag
? Nó tạo ra một ma trận đường chéo thực sự trực giao nhưng không phải lúc nào cũng trực giao.
diag
nên sẽ ổn.