直交行列は、行と列の直交単位ベクトル(すなわち、正規直交ベクトル)は、実際のエントリを有する正方行列です。
これは、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
ません。