Ортогональна матриця являє собою квадратну матрицю з речовими елементами , чиї стовпці і рядки є ортогональні орти (тобто ортонормального вектори).
Це означає, що M ^ TM = I, де I - матриця тотожності, а ^ T означає матричне переміщення.
Зауважимо, що це ортогональне, а не "особливе ортогональне", тому визначник M може бути 1 або -1.
Мета цього завдання не є машинною точністю, тому якщо M ^ TM = I в межах 4 знаків після коми, це буде добре.
Завдання полягає в тому, щоб записати код, який приймає додатне ціле число n > 1
і виводить випадкову ортогональну n по матриці n . Матриця повинна бути обрана випадковим чином і рівномірно з усіх n n ортогональних матриць. У цьому контексті "рівномірний" визначається з точки зору міри Хаар, яка по суті вимагає, щоб розподіл не змінювався, якщо помножити на будь-яку вільно обрану ортогональну матрицю. Це означає, що значення матриці будуть значеннями з плаваючою комою в діапазоні від -1 до 1.
Введення та вихід можуть бути в будь-якій формі, яку вам зручно.
Покажіть явний приклад запущеного коду.
Ви не можете використовувати будь-яку функцію бібліотеки, яка створює ортогональні матриці. Це правило трохи тонке, тому я поясню докладніше. Це правило забороняє використовувати будь-яку існуючу функцію, яка займає деякий (або ні) вхід і виводить матрицю розміром принаймні n на n, яка гарантовано є ортогональною. Як крайній приклад, якщо ви хочете матрицю тотожності n за n, вам доведеться створити її самостійно.
Ви можете використовувати будь-яку стандартну бібліотеку генераторів випадкових чисел для вибору випадкових чисел на ваш вибір.
Ваш код має заповнитись не пізніше ніж за кілька секунд n < 50
.
diag
? Він створює діагональну матрицю, яка справді є ортогональною, але не завжди ортонормальною.
diag
повинно бути нормально.