Rozwiązanie systemu z aktualizacją po przekątnej małego stopnia

9

Załóżmy, że mam oryginalny duży, rzadki układ liniowy: . Teraz nie mam ponieważ A jest zbyt duże, aby uwzględnić czynnik lub jakikolwiek rozkład , ale zakładam, że mam rozwiązanie z rozwiązaniem iteracyjnym.ZAx0=b0ZA-1ZAx0

Teraz chcę zastosować małą aktualizację rangi do przekątnej A (zmień kilka wpisów po przekątnej): gdzie jest macierzą diagonalną z głównie 0 na przekątnej i kilka niezerowych wartości. Gdybym miał , byłbym w stanie skorzystać z formuły Woodbury i zastosować aktualizację odwrotności. Jednak nie mam tego dostępnego. Czy jest coś, co mogę zrobić oprócz rozwiązania całego systemu od nowa? Czy jest jakiś sposób, że mógłbym wymyślić warunek wstępny który jest łatwy \ łatwiejszy do odwrócenia, taki jak , tak że wszystko, co musiałbym zrobić, jeśli mam to zastosować(ZA+re)x1=b0reZA-1M.M.ZA1ZA0x0M.-1 a metoda iteracyjna byłaby zbieżna w kilku / kilku iteracjach?

Costis
źródło
Zaczynasz od dobrego warunku wstępnego ZAi chcesz wiedzieć, jak to zaktualizować? Jaką rangą jest aktualizacja? (Ranga1000 aktualizacja jest „mała” w porównaniu do macierzy wielkości 109ale nie małe pod względem liczby iteracji.)
Jed Brown
ZA jest mniej więcej wielkości 106 do 107, a aktualizacja zawiera <1000 (prawdopodobnie <100) elementów. Używam diagonalnego typu warunku wstępnego dla A, który działa naprawdę dobrze, więc aktualizacja byłaby trywialna, ale zastanawiałem się, czy jest coś lepszego, co mogę zrobić, niż rozwiązać nowy system od zera.
Costis
2
Rozwiązanie jednego systemu niewiele o tym mówi. Jeśli rozwiążesz ten sam system wiele razy, odwrotna mapa na tych wektorach (i / lub powiązanych przestrzeniach Kryłowa) daje pewne informacje, które można wykorzystać do przyspieszenia konwergencji. Ile systemów rozwiązujesz w każdym przypadku?
Jed Brown
Obecnie rozwiązuję tylko jeden RHS (b wektor) z każdym ZA macierz przed modyfikacją ZA.
Costis

Odpowiedzi:

4
  1. Zapisz w kolumnach dwóch macierzy b i C wszystkie wektory bj do której zastosowałeś macierz w poprzednich iteracjach i wynikach cj=Abj.

  2. Dla każdego nowego systemu (A+D)x=b (lub Ax=b, co jest przypadkiem szczególnym D=0), w przybliżeniu rozwiązuje nadmiernie określony układ liniowy (C+DB)yb, np. wybierając podzbiór wierszy (ewentualnie wszystkie) i stosując metodę gęstego najmniejszego kwadratu. Zauważ, że tylko wybrana częśćC+DBmusi zostać złożony; więc jest to szybka operacja!

  3. Położyć x0=By. Jest to dobre wstępne przybliżenie, od którego można rozpocząć iterację rozwiązywania(A+D)x=b. W przypadku konieczności przetworzenia dalszych systemów, użyj produktów wektora macierzy w tej nowej iteracji, aby rozszerzyć macierzeB i C w powstałym podsystemie.

Jeśli macierze B i C nie pasują do głównej pamięci, przechowuj Bna dysku i wcześniej wybierz podzbiór wierszy. Pozwala to zachować w centrum odpowiednią częśćB i C potrzebne do utworzenia systemu najmniejszych kwadratów i następnego x0 można obliczyć za pomocą jednego przejścia B przy niewielkim wykorzystaniu pamięci podstawowej.

Wiersze powinny być wybrane w taki sposób, aby w przybliżeniu odpowiadały zgrubnej dyskretyzacji pełnego problemu. Wystarczy pięć razy więcej wierszy niż całkowita liczba oczekiwanych mnożników wektorów macierzy.

Edycja: Dlaczego to działa? Z założenia macierzeB i C są powiązane przez C=AB. Jeśli podprzestrzeń obejmuje wszystkie kolumnyB zawiera dokładny wektor rozwiązania x (rzadka, ale prosta sytuacja) x ma formę x=By dla niektórych y. Podstawiając to do definicji równaniax daje równanie (C+DB)y=b. Tak więc w tym przypadku powyższy proces stanowi punkt wyjściax0=By=x, które jest dokładnym rozwiązaniem.

Zasadniczo nie można się spodziewać x leżeć w przestrzeni kolumny B, ale generowany punkt początkowy będzie punktem w tej najbliższej przestrzeni cloumn x, w metodzie określonej przez wybrane wiersze. Dlatego prawdopodobnie będzie to rozsądne przybliżenie. W miarę przetwarzania większej liczby systemów przestrzeń kolumn rośnie, a przybliżenie prawdopodobnie ulegnie znacznej poprawie, dzięki czemu można mieć nadzieję, że zbierze się coraz mniej iteracji.

Edycja2: Informacje o wygenerowanej podprzestrzeni: Jeśli każdy układ rozwiązuje się metodą Kryłowa, wektory użyte do uzyskania punktu początkowego dla drugiego układu obejmują podprzestrzeń Kryłowa pierwszej prawej strony. W ten sposób można uzyskać dobre przybliżenie, ilekroć ta podprzestrzeń Kryłowa zawiera wektor zbliżony do rozwiązania drugiego układu. Zasadniczo wektory użyte do uzyskania punktu wyjścia dla(k+1)System obejmuje obszar zawierający podprzestrzeń Kryłowa pierwszego k prawe boki.

Arnold Neumaier
źródło
Dzięki, prof. Neumaier. Spróbuję tego. Czy mógłbyś mi krótko wyjaśnić, jak to działa?
Costis
A co jeśli chcę rozwiązać ten sam system dla wielu różnych wektorów RHS? to znaczyAx0=b0, Ax1=b1, Ax2=b2itp. Czy są jakieś informacje, których mogę użyć z poprzednich rozwiązań, aby przyspieszyć kolejne?
Costis
@Costis: Rozwiązanie z tą samą matrycą to tylko szczególny przypadek D=0ogólnego problemu. Pierwsze pytanie patrz edycja.
Arnold Neumaier
@Costis: Dodałem trochę więcej szczegółów do kroku 2. - Jeśli napiszesz aplikację, prześlij mi preprint.
Arnold Neumaier
Dziękuję za wyjaśnienie! Dlaczego nie mogę po prostu rozwiązać tego przesadnie określonego systemu(C+DB)ybstosując podejście oparte na faktoryzacji QR i używając wszystkich wierszy zamiast tylko podzbioru? Wydaje mi się, że wraz ze wzrostem liczby kolumn C i B być może będę musiał pozbyć się niektórych wierszy, aby przyspieszyć działanie. Jasne, napiszę opis systemu i wyślę go e-mailem. Właściwie uważam, że można opracować schemat aplikacji, który może działać lepiej niż najbardziej ogólny przypadek. Dzięki!
Costis