Rn⟨y,x⟩≜Re(yHx)
Jedną z rzeczy, na które musisz uważać, wdrażając CG (lub podobne podejścia iteracyjne) z ogólnymi operatorami liniowymi, jest prawidłowe zaimplementowanie połączenia operatora liniowego. Oznacza to, że ludzie często mają rację , ale popełniają błąd, implementując .y=F(x)z=F∗(y)
Zalecam wdrożenie prostego testu, który wykorzystuje następującą tożsamość: dla każdego zgodnego i ,
Więc co zrobić, to generuje losowe wartości i , uruchom je za pośrednictwem swoich operacjach typu forward i adjoint, odpowiednio, i obliczyć dwa produkty wewnętrzne powyżej. Upewnij się, że pasują z odpowiednią dokładnością, i powtórz kilka razy.xy
⟨y,F(x)⟩=⟨F∗(y),x⟩.
xy
EDYCJA: co robisz, jeśli twój operator liniowy ma być symetryczny? Musisz także zweryfikować tę symetrię. Więc korzystać z tego samego testu, po prostu zauważając, że --- zastosować tę samą operację i . Oczywiście, OP ma zarówno operatora asymetrycznego, jak i symetrycznego do obsługi ...F=F∗xy