Eine orthogonale Matrix ist eine quadratische Matrix mit reellen Einträgen, deren Spalten und Zeilen orthogonale Einheitsvektoren (dh orthonormale Vektoren) sind.
Dies bedeutet, dass M ^ TM = I ist, wobei I die Identitätsmatrix ist und ^ T die Matrixtransposition bedeutet.
Es ist zu beachten, dass dies orthogonal und nicht "speziell orthogonal" ist, so dass die Determinante von M 1 oder -1 sein kann.
Das Ziel dieser Herausforderung ist nicht die Maschinengenauigkeit. Wenn also M ^ TM = I innerhalb von 4 Dezimalstellen liegt, ist dies in Ordnung.
Die Aufgabe besteht darin, Code zu schreiben, der eine positive ganze Zahl nimmt n > 1
und eine zufällige orthogonale n mal n-Matrix ausgibt . Die Matrix sollte zufällig und gleichmäßig aus allen n x n orthogonalen Matrizen ausgewählt werden. In diesem Zusammenhang wird "einheitlich" als Haar-Maß definiert, das im Wesentlichen erfordert, dass sich die Verteilung nicht ändert, wenn sie mit einer frei gewählten orthogonalen Matrix multipliziert wird. Dies bedeutet, dass die Werte der Matrix Gleitkommawerte im Bereich von -1 bis 1 sind.
Die Eingabe und Ausgabe kann jede Form sein, die Sie für bequem halten.
Bitte zeigen Sie ein explizites Beispiel für die Ausführung Ihres Codes.
Sie dürfen keine vorhandene Bibliotheksfunktion verwenden, die orthogonale Matrizen erstellt. Diese Regel ist etwas subtil, daher werde ich mehr erklären. Diese Regel verbietet die Verwendung einer vorhandenen Funktion, die einige (oder keine) Eingaben aufnimmt und eine Matrix mit einer Größe von mindestens n mal n ausgibt, die garantiert orthogonal ist. Wenn Sie als extremes Beispiel die n x n-Identitätsmatrix verwenden möchten, müssen Sie sie selbst erstellen.
Sie können jede Standardbibliothek für Zufallszahlengeneratoren verwenden, um Zufallszahlen Ihrer Wahl auszuwählen.
Ihr Code sollte innerhalb von höchstens ein paar Sekunden abgeschlossen sein n < 50
.
diag
? Es wird eine diagonale Matrix erzeugt, die zwar orthogonal, aber nicht immer orthonormal ist.
diag
sollten also in Ordnung sein.