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