Z czego korzysta LAPACK

9

Procedura QR LAPACK przechowuje Q jako reflektory Householdera. Skaluje wektor odbicia pomocą , więc pierwszy element wyniku staje się , więc nie trzeba go przechowywać. I przechowuje osobny wektor , który zawiera potrzebne współczynniki skali. Zatem macierz reflektorów jest taka:v1/v11τ

H=IτvvT,

gdzie nie jest znormalizowane. Natomiast w podręcznikach matryca reflektorów jestv

H=I2vvT,

gdzie jest znormalizowane.v

Dlaczego skala LAPACK z , zamiast normalizowania go?v1/v1

Potrzebne miejsce jest takie samo (zamiast , należy zapisać ), a następnie zastosowanie można wykonać szybciej, ponieważ nie ma potrzeby mnożenia przez (mnożenie przez w wersji podręcznika można zoptymalizować, jeśli zamiast prostej normalizacji, jest skalowane przez ).τv1Hτ2v2/v

(Powodem mojego pytania jest to, że piszę procedurę QR i SVD i chciałbym poznać przyczynę tej decyzji, czy muszę ją przestrzegać, czy nie)

geza
źródło

Odpowiedzi:

7

To zablokowany wariant Householder-QR napędza ten projekt. Jeśli spojrzysz na książkę Goluba i Van Loana (rozdział 5.2 lub więcej), mówią o tym, jak k-iteracje algorytmu mogą być blokowane razem poprzez gromadzenie poszczególnych reflektorów w reflektorze rangi w postaci , gdzie zarówno i są macierzami „o wysokim chuście” o rozmiarze . Ten algorytm działa więcej, ale w praktyce jest szybszy, ponieważ jest bogaty w wywołania gemm (). Niestety, marnowanie pamięci jest marnotrawione z powodu konieczności niezależnego reprezentowania iI+WYTWYn×kWY

W późniejszym artykule (cytowanym poniżej) Van Loan opisuje bardziej wydajną „symetryczną” strukturę danych, odbłyśnik blokowy w postaci . Tutaj wciąż jest , ale wymóg flop / storage dla formowania został wyeliminowany poprzez wprowadzenie , małej górnej trójkątnej macierzy. Chociaż potrzeba pomnożenia przez wprowadza niewielką ilość dodatkowej pracy, zazwyczaj jest to zysk netto, ponieważ .I+YTYTYn×kWTk×kTk<<n

W LAPACK, niezablokowany algorytm jest tak naprawdę ograniczającym przypadkiem algorytmu blokowego, aż do wyboru symboli (co prowadzi nas do , małej wersji Trójkąt ).k1τ1×1T.

Cytowanie: Schreiber, Robert i Charles Van Loan. „Wydajna dla przechowywania reprezentacja WY dla produktów transformacji Householder”. SIAM Journal on Scientific and Statistics Computing 10.1 (1989): 53-57.

rchilton1980
źródło
Dziękuję za odpowiedź! Nie rozumiem tegoτ jest po prostu 1×1rozmiar T. W cytowanej pracy, w algorytmie 5,Y jest v, i T.wynosi -2. Tak więc kończy się ona wersją podręcznika, a nie wersją LAPACK. Czy coś mi umknęło?
geza
2

Nie musisz przechowywać τ, możesz ponownie obliczyć go z pozostałej części wektora. (Możesz ponownie obliczyćv1 z innych pozycji również w znormalizowanej wersji, ale jest to wyraźnie niestabilne obliczenie z powodu tych odejmowań).

W rzeczywistości możesz ponownie użyć dolnej trójkątnej części R przechować v2,...vn, aby faktoryzacja została obliczona w pełni na miejscu. Lapack bardzo dba o te lokalne wersje algorytmów.

Federico Poloni
źródło