Wszyscy znamy wiele metod obliczeniowych do rozwiązania standardowego układu liniowego
Jestem jednak ciekawy, czy istnieją jakieś „standardowe” metody obliczeniowe do rozwiązania bardziej ogólnego (skończonego wymiaru) układu liniowego formy
gdzie, powiedzmy, jest macierzą , jest macierzą , a jest operatorem liniowym przenoszącym macierze do macierzy , co nie wymaga wektoryzacji macierze , tj. konwertując wszystko do standardowej postaci A x = b .
Pytam o to, że trzeba rozwiązać następujące równanie dla :
gdzie jest 2d transformacją radonową, jej przyległością, a zarówno i są tablicami 2d (obrazy). Możliwe jest wektoryzowanie tego równania, ale jest to uciążliwe, szczególnie jeśli przejdziemy do 3D.
Mówiąc bardziej ogólnie, co o tablic? Na przykład, rozwiązywanie gdzie i są tablicami 3D (w pewnym momencie będę musiał to zrobić z transformacją Radona).
Dzięki z wyprzedzeniem i jeśli czujesz taką potrzebę, możesz wysłać mnie do innego StackExchange.
linear-algebra
icurays1
źródło
źródło
Odpowiedzi:
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.x y
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∗ x y
źródło
linop_test.m
procedurę z tego powodu. Pakiet ten obsługuje również macierze, tablice i produkty kartezjańskie w przestrzeniach wektorowych.Jak się okazuje, ponieważ mój układ jest symetryczny i dodatnio określony (ponieważ mój operator liniowy jest zapisany jako ), gradient sprzężony można dostosować w celu iteracyjnego rozwiązania tego typu równania. Jedyną modyfikacją jest obliczanie produktów wewnętrznych - tzn. Typowe obliczenia produktów wewnętrznych w CG wyglądają jak lub . W zmodyfikowanej wersji używamy produktu wewnętrznego Frobenius, który można obliczyć, sumując wpisy produktu Hadamarda (punktowo). To znaczyR∗R+λI rTkrk pTkApk
Podejrzewam, że przejdzie to dobrze po uaktualnieniu do tablic 3D, chociaż jeszcze nie widziałem produktu wewnętrznego Frobenius zdefiniowanego na tablicach 3D (będę działał przy założeniu, że znów mogę po prostu zsumować produkt punktowy).
Nadal byłbym zainteresowany bardziej ogólnymi metodami, jeśli ktoś o nich wie!
źródło