Sebuah matriks ortogonal adalah matriks persegi dengan entri nyata yang kolom dan baris yang ortogonal vektor satuan (yaitu, vektor ortonormal).
Ini berarti bahwa M ^ TM = I, di mana I adalah matriks identitas dan ^ T menandakan transposisi matriks.
Perhatikan bahwa ini adalah ortogonal bukan "ortogonal khusus" sehingga penentu M dapat 1 atau -1.
Tujuan dari tantangan ini bukanlah presisi mesin, jadi jika M ^ TM = I berada dalam 4 tempat desimal yang akan baik-baik saja.
Tugasnya adalah menulis kode yang mengambil bilangan bulat positif n > 1
dan mengeluarkan matriks ortogonal acak n . Matriks harus dipilih secara acak dan seragam dari semua n oleh n matriks ortogonal. Dalam konteks ini, "seragam" didefinisikan dalam hal ukuran Haar, yang pada dasarnya mensyaratkan bahwa distribusi tidak berubah jika dikalikan dengan matriks ortogonal yang dipilih secara bebas. Ini berarti nilai-nilai matriks akan menjadi nilai floating point dalam rentang -1 hingga 1.
Input dan output dapat berupa bentuk apa pun yang Anda rasa nyaman.
Tolong tunjukkan contoh eksplisit dari menjalankan kode Anda.
Anda tidak dapat menggunakan fungsi pustaka yang ada yang membuat matriks ortogonal. Aturan ini sedikit halus sehingga saya akan menjelaskan lebih banyak. Aturan ini melarang penggunaan fungsi apa pun yang ada yang mengambil beberapa (atau tidak ada) input dan output matriks ukuran setidaknya n oleh n yang dijamin ortogonal. Sebagai contoh ekstrem, jika Anda ingin matriks identitas n demi n, Anda harus membuatnya sendiri.
Anda dapat menggunakan pustaka pembangkit nomor acak standar apa pun untuk memilih nomor acak yang Anda pilih.
Kode Anda harus selesai paling lama beberapa detik untuk n < 50
.
diag
? Ini menciptakan matriks diagonal yang memang ortogonal tetapi tidak selalu ortonormal.
diag
harus ok.