Prostopadłe macierz jest macierzą kwadratową prawdziwych pozycji których kolumny i rzędy prostopadłych wektor jednostkowy (tj wektorów ortonormalnych).
Oznacza to, że M ^ TM = I, gdzie I jest macierzą tożsamości, a ^ T oznacza transpozycję macierzy.
Zauważ, że jest to ortogonalny, a nie „specjalny ortogonalny”, więc wyznacznikiem M może być 1 lub -1.
Celem tego wyzwania nie jest precyzja maszyny, więc jeśli M ^ TM = I do 4 miejsc po przecinku, będzie dobrze.
Zadanie polega na napisaniu kodu, który przyjmuje dodatnią liczbę całkowitą n > 1
i generuje losową prostopadłą macierz n na n . Macierz powinna być losowo i jednolicie wybrana ze wszystkich n przez n macierzy ortogonalnych. W tym kontekście „jednolity” jest definiowany w kategoriach miary Haara, która zasadniczo wymaga, aby rozkład nie zmieniał się, jeśli zostanie pomnożony przez dowolną dowolnie wybraną macierz ortogonalną. Oznacza to, że wartości macierzy będą wartościami zmiennoprzecinkowymi z zakresu od -1 do 1.
Dane wejściowe i wyjściowe mogą mieć dowolną formę, którą uznasz za dogodną.
Pokaż wyraźny przykład działającego kodu.
Nie możesz używać żadnej istniejącej funkcji bibliotecznej, która tworzy macierze ortogonalne. Ta zasada jest trochę subtelna, więc wyjaśnię więcej. Ta reguła zabrania używania dowolnej istniejącej funkcji, która pobiera niektóre (lub nie) dane wejściowe i generuje macierz wielkości co najmniej n na n, która jest gwarantowana jako ortogonalna. Jako skrajny przykład, jeśli chcesz macierzy tożsamości n na n, będziesz musiał ją stworzyć sam.
Możesz użyć dowolnej standardowej biblioteki generatora liczb losowych do wyboru wybranych liczb losowych.
Twój kod powinien zakończyć się w ciągu najwyżej kilku sekund n < 50
.
diag
? Tworzy macierz diagonalną, która jest rzeczywiście ortogonalna, ale nie zawsze ortonormalna.
diag
powinny być w porządku.