Oui, vous avez raison et cela fonctionnera bien lorsque vous passerez à la 3D. La partie la plus simple, vraiment, est le produit intérieur --- il suffit de faire un produit scalaire standard sur l'équivalent, R n dérouléRn⟨y,x⟩≜Re(yHx)
Une chose à laquelle vous devez faire attention lorsque vous implémentez CG (ou des approches itératives similaires) avec des opérateurs linéaires généraux est d'implémenter correctement l' adjoint de votre opérateur linéaire. Autrement dit, les gens obtiennent souvent correctement, mais commettent une erreur en mettant en œuvre .y=F(x)z=F∗(y)
Je recommande d'implémenter un test simple qui tire parti de l'identité suivante: pour tout et conforme ,
Donc, ce que vous faites est de générer des valeurs aléatoires de et , de les exécuter à travers vos opérations directes et adjointes, respectivement, et de calculer les deux produits internes ci-dessus. Assurez-vous qu'ils correspondent à une précision raisonnable et répétez plusieurs fois.xy
⟨y,F(x)⟩=⟨F∗(y),x⟩.
xy
EDIT: que faites-vous si votre opérateur linéaire est supposé être symétrique? Eh bien, vous devez également vérifier cette symétrie. Utilisez donc le même test, notant simplement que --- appliquez la même opération à et . Bien sûr, l'OP a à la fois un opérateur asymétrique et un opérateur symétrique à gérer ...F=F∗xy