Uma matriz ortogonal é uma matriz quadrada com entradas reais cujas colunas e linhas são vetores unitários ortogonais (ou seja, vetores ortonormais).
Isso significa que M ^ TM = I, onde I é a matriz de identidade e ^ T significa transposição da matriz.
Observe que isso é ortogonal e não "ortogonal especial", portanto o determinante de M pode ser 1 ou -1.
O objetivo desse desafio não é a precisão da máquina; portanto, se M ^ TM = I estiver dentro de quatro casas decimais, tudo ficará bem.
A tarefa é escrever código que pega um número inteiro positivo n > 1
e gera uma matriz ortogonal aleatória n por n . A matriz deve ser escolhida aleatoriamente e uniformemente dentre todas as n por n matrizes ortogonais. Nesse contexto, "uniforme" é definido em termos da medida de Haar, que requer essencialmente que a distribuição não mude se multiplicada por qualquer matriz ortogonal livremente escolhida. Isso significa que os valores da matriz serão valores de ponto flutuante no intervalo de -1 a 1.
A entrada e a saída podem ser de qualquer forma que você achar conveniente.
Por favor, mostre um exemplo explícito do seu código em execução.
Você não pode usar nenhuma função de biblioteca existente que crie matrizes ortogonais. Esta regra é um pouco sutil, então vou explicar mais. Essa regra proíbe o uso de qualquer função existente que receba alguma (ou nenhuma) entrada e produza uma matriz de tamanho de pelo menos n por n que é garantidamente ortogonal. Como exemplo extremo, se você quiser a matriz de identidade n por n, precisará criar você mesma.
Você pode usar qualquer biblioteca gerador de números aleatórios padrão para escolher números aleatórios de sua escolha.
Seu código deve ser concluído dentro de alguns segundos por n < 50
.
diag
? Cria uma matriz diagonal que é de fato ortogonal, mas nem sempre ortonormal.
diag
, tudo bem.