Ya, Anda sudah benar, dan itu memang akan berfungsi dengan baik ketika Anda meningkatkan ke 3-D. Bagian yang paling mudah, sebenarnya, adalah produk dalam --- lakukan saja produk titik standar pada vektor yang setara, ekuivalen . Karena Anda mungkin menyimpan data secara bersamaan, Anda dapat melakukannya di tempat. Ini bahkan bekerja dengan ruang vektor yang kompleks --- perlakukan saja nilai-nilai kompleks sebagai pasangan nilai nyata. Itu karena untuk CG Anda memerlukan produk dalam nyata .Rn⟨y,x⟩≜Re(yHx)
Satu hal yang Anda harus berhati-hati ketika Anda menerapkan CG (atau pendekatan berulang serupa) dengan operator linier umum adalah menerapkan adjoint operator linier Anda dengan benar. Artinya, orang sering mendapatkan benar, tetapi melakukan kesalahan dengan mengimplementasikan .y=F(x)z=F∗(y)
Saya sarankan menerapkan tes sederhana yang memanfaatkan identitas berikut: untuk setiap dan sesuai ,
Jadi yang Anda lakukan adalah menghasilkan nilai acak dan , menjalankannya masing-masing melalui operasi forward dan adjoint Anda, dan menghitung dua produk dalam di atas. Pastikan mereka cocok dengan presisi yang masuk akal, dan ulangi beberapa kali.xy
⟨y,F(x)⟩=⟨F∗(y),x⟩.
xy
EDIT: apa yang Anda lakukan jika operator linier Anda seharusnya simetris? Nah, Anda juga perlu memverifikasi simetri itu. Jadi gunakan tes yang sama, hanya mencatat bahwa --- terapkan operasi yang sama untuk dan . Tentu saja, OP memiliki operator asimetris dan simetris untuk menangani ...F=F∗xy