MN12: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
mNie podano opisu zmian
Przykry (dyskusja | edycje)
Linia 179: Linia 179:
-->
-->
   
   
<div class="thumb tright"><div><flash>file=householderidea.swf</flash><div.thumbcaption>Odbicie Househodera</div></div></div>
<div class="thumb tright"><div><flash>file=Wektor.swf</flash><div.thumbcaption>Odbicie Househodera</div></div></div>


Załóżmy dla uproszczenia, że <math>\displaystyle \| e\|_2=1</math>.  
Załóżmy dla uproszczenia, że <math>\displaystyle \| e\|_2=1</math>.  
Linia 229: Linia 229:
dodajemy liczby tych samych znaków. Ponadto pierwsza współrzędna  
dodajemy liczby tych samych znaków. Ponadto pierwsza współrzędna  
wektora <math>\displaystyle H x</math> jest równa <math>\displaystyle -\| x\|_2</math> dla <math>\displaystyle x_1\ge 0</math>, oraz  
wektora <math>\displaystyle H x</math> jest równa <math>\displaystyle -\| x\|_2</math> dla <math>\displaystyle x_1\ge 0</math>, oraz  
<math>\displaystyle +\| x\|_2</math> dla <math>\displaystyle x_1<0</math>.  
<math>\displaystyle +\| x\|_2</math> dla <math>\displaystyle x_1<0</math>.
 
 
==Rozkład QR==
==Rozkład QR==



Wersja z 17:33, 4 wrz 2006

Nadokreślone układy równań liniowych

Zajmiemy się zadaniem wygładzania liniowego, nazywanym też liniowym zadaniem najmniejszych kwadratów. Jest ono uogólnieniem zadania rozwiązywania kwadratowych układów równań liniowych do przy\-pa\-dku, gdy układ jest nadokreślony.

Jest to praktycznie bardzo często pojawiające się zadanie (pewien jego wariant rozwiązują np. nasze przenośne odbiorniki GPS), a autorem pierwszego rozwiązania był nie kto inny jak sam wielki Gauss.

Carl Friedrich Gauss
Zobacz biografię

Układ normalny

Niech A będzie daną macierzą o m wierszach i n kolumnach, Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle A\inR^{m\times n}} , taką, że

mn=rank(A),

albo równoważnie, taką że jej wektory kolumny są liniowo niezależne. Niech także dany będzie wektor Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle b\inR^m} . Jasne jest, że wtedy układ równań Ax=b nie zawsze ma rozwiązanie - mówimy, że układ jest nadokreślony.

Zadanie wygładzania liniowego polega na znalezieniu wektora Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle x^*\inR^n} , który minimalizuje wektor residualny r=bAx w normie drugiej, tzn.

Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle \| b\,-\,A x^*\|_2\,=\,\min_{ x\inR^n} \| b\,-\,A x\|_2. }

Przykład

Przypuśćmy, że dla pewnej funkcji Parser nie mógł rozpoznać (nieznana funkcja „\toR”): {\displaystyle \displaystyle f:[a,b]\toR} obserwujemy jej wartości fi (dokładne lub zaburzone) w punktach ti, 1im. Funkcję tą chcielibyśmy przybliżyć inną funkcją w należącą do pewnej n wymiarowej przestrzeni liniowej W, np. przestrzeni wielomianów stopnia mniejszego niż n. Jakość przybliżenia mierzymy wielkością

i=1m(fiw(ti))2.

Wybierając pewną bazę (wj)j=1n w W i rozwijając w w tej bazie, w(t)=j=1ncjwj(t), sprowadzamy problem do minimalizacji

i=1m(fij=1ncjwj(ti))2

względem cj, a więc do zadania wygładzania liniowego. Rzeczywiście, kładąc Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle A=(a_{i,j})\inR^{m\times n}} z ai,j=wj(ti), b=(fi)i=1m i x=(cj)j=1n, wielkość (Uzupelnic: unorm ) jest równa bAx22.

Lemat

Zadanie wygładzania liniowego ma jednoznaczne rozwiązanie x*, które spełnia układ równań

ATAx=ATb.

Zauważmy, że jeśli macierz A jest kwadratowa, m=n, to rozwiązaniem jest x*=A1b i residuum jest zerem. Zadanie wygładzania liniowego jest więc uogólnieniem rozwiązywania kwadratowych układów równań liniowych.

Równanie (Uzupelnic: unormal ) nazywa się układem normalnym. Może ono nam sugerować sposób rozwiązania zadania wygładzania liniowego. Wystarczy bowiem pomnożyć macierz AT przez A i rozwiązać układ normalny. Zauważmy ponadto, że macierz ATA jest symetryczna i dodatnio określona, bo (ATA)T=ATA i dla x0 mamy xT(ATA)x=(Ax)T(Ax)=Ax2>0, przy czym ostatnia nierówność wynika z faktu, że kolumny macierzy A są liniowo niezależne i dlatego Ax0. Przy mnożeniu AT przez A wystarczy więc obliczyć tylko elementy na głównej przekątnej i pod nią, a do rozwiązania równania z macierzą ATA można zastosować algorytm Banachiewicza-Choleskiego opisany w U. Uzupelnic: BC . Jak łatwo się przekonać, koszt takiego algorytmu wynosi n2(k+n/3), przy czym dominuje koszt mnożenia obliczenia macierzy ATA.

Ma on jednak pewne wady. Mnożenie macierzy powoduje w flν powstanie "po drodze" dodatkowych błędów, które mogą nawet zmienić rząd macierzy. Na przykład, dla macierzy

A=(1111ϵϵϵϵ)

mamy

ATA=(1+ϵ211111+ϵ211111+ϵ211111+ϵ2).

Jeśli ϵ2<ν to flν(1+ϵ2)=1, co implikuje rank(flν(ATA))=1, podczs gdy rank(flν(A))=4.

Poniżej przedstawimy inną metodę rozwiązywania zadania wygładzania liniowego, która oparta jest na specjalnych przekształceniach zwanych odbiciami Householdera.

Odbicia Householdera

Dla danego wektora Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle w\inR^m} o normie w2=wTw=1, odbicie (macierz) Householdera zdefiniowane jest jako

H=I2wwT.

Zauważmy, że

Hx=x2(wTx)w,

a ponieważ (wTx)w=(x,w)2w jest rzutem prostopadłym x na kierunek wektora w ((,)2 oznacza iloczyn skalarny), to Hx jest odbiciem lustrzanym wektora x względem hiperpłaszczyzny (wymiaru m1) prostopadłej do w.

Odbicia Householdera są przekształceniami nieosobliwymi spełniającymi

H1=H=HT.

Rzeczywiście, ponieważ w ma normę jednostkową, mamy

H2=(I2wwT)2=I4wwT+4w(wTw)wT=I,

oraz

HT=(I2wwT)T=I2(wT)TwT=I.

W szczególności H jest więc przekształceniem ortogonalnym, H1=HT, czyli nie zmienia długości wektora,

Hx2=(Hx)T(Hx)=xT(HTH)x=xTx=x2.

Odbicia Householdera zastosujemy do przeprowadzenia danego wektora x0 na kierunek innego niezerowego wektora, powiedzmy e, tzn.

Hx=(I2wwT)x=αe.


<flash>file=Wektor.swf</flash><div.thumbcaption>Odbicie Househodera

Załóżmy dla uproszczenia, że e2=1. Aby wyznaczyć H zauważmy, że

w=xαe2(wTx),

a ponieważ α=±x2 i w2=1 to

w=xx2exx2e2.

W szczególności, jeśli e=e1 jest pierwszym wersorem to powyższe wzory dają

H=IuuTγ,

gdzie

ui={x1x2i=1,xi2im,

oraz

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned \gamma &= \frac 12\| u\|_2^2\,=\, \frac 1 2\Big((x_1\mp\| x\|_2)^2+\sum_{i=2}^m x_i^2\Big) \\ &= \frac 1 2 \Big(\sum_{i=1}^m x_i^2\,+\,\| x\|_2^2\,\mp\, 2 x_1\|x\|_2\Big) \,=\,\|x\|_2^2\,\mp\,x_1 \|x\|_2. \endaligned}

Otrzymaliśmy dwa odbicia Householdera przekształcające dany wektor x na kierunek pierwszego wersora, w zależności od wybranego znaku przy x2. Ustalimy ten znak na plus gdy x10, oraz na minus gdy x1<0, co pozwoli na obliczenie u1 i γ z małym błędem względem w flν. Wtedy bowiem mamy

u1={x1+x2x10,x1x2x1<0,

oraz γ=x22+|x1|x2, czyli zawsze dodajemy liczby tych samych znaków. Ponadto pierwsza współrzędna wektora Hx jest równa x2 dla x10, oraz +x2 dla x1<0.

Rozkład QR

Odbić Householdera można użyć do rozkładu macierzy Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle A\inR^{m\times n}} na iloczyn ortogonalno-trójkątny.

Niech A=(a1,a2,,an), gdzie aj są wektorami-kolumnami macierzy A. Wybierzmy pierwsze odbicie Householdera H1=Imu1u1T/γ1 tak, aby przekształcało pierwszy wektor-kolumnę macierzy A na kierunek e1. Efektem pomnożenia macierzy A z lewej strony przez H1 będzie wtedy macierz

A(1)=(a1(1),,an(1))=(H1a1,,H1an),

w której pierwsza kolumna a1(1) ma niezerową tylko pierwszą współrzędną. W następnym kroku wybieramy drugie przekształcenie Householdera H¯2=Im1v2v2T/γ2 wymiaru m1 tak, aby przeprowadzało wektor (ai,2(1))i=2m na kierunek pierwszego wersora w Rm1. Rozszerzając Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle v_2\inR^{m-1}} do wektora Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle u_2\inR^m} przez dodanie zera jako pierwszej współrzędnej, u2=(0,v2)T, otrzymujemy przekształcenie (macierz) Householdera H2=Imu2u2T/γ2 w Rm postaci

H2=(10T0H¯2).

Pomnożenie macierzy A(1) z lewej strony przez H2 spowoduje teraz wyzerowanie drugiej kolumny macierzy pod elementem a2,2(1), przy czym pierwszy wiersz i pierwsza kolumna pozostaną niezmienione. Postępując tak dalej n razy (albo n1 razy gdy m=n) otrzymujemy

HnHn1H2H1A=R,

gdzie Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle R\inR^{m\times n}} jest uogólnioną macierzą trójkątną górną, tzn. ri,j=0 dla i>j. Stąd, podstawiając Q=H1H2Hn, dostajemy rozkład macierzy na iloczyn ortogonalno-trójkątny

A=QR.

Rzeczywiście, macierz Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle Q\inR^{m\times m}} jest ortogonalna, bo

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned Q^{-1} &= (H_1H_2\cdots H_n)^{-1}\,=\, H_n^{-1}\cdots H_2^{-1}H_1^{-1} \\ &= H_n^T\cdots H_2^TH_1^T \,=\, (H_1H_2\cdots H_n)^T\,=\,Q^T. \endaligned}

Dyspunując rozkładem (Uzupelnic: orttr ) zadanie wygładzania liniowego można rozwiązać następująco. Ponieważ mnożenie przez macierz ortogonalną nie zmienia normy drugiej wektora, mamy

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned \| r\|_2 &= \| b-A x\|_2\;=\;\| b-QR x\|_2 \\ &= \|Q(Q^T b-R x)\|_2 \;=\;\| c-R x\|_2, \endaligned}

gdzie c=QTb=HnH2H1b. Rozbijając wektor c na c=(cI,cII)T, gdzie Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle c_I\inR^n} i Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle c_{II}\inR^{m-n}} , oraz macierz R na

R=(RI0),

gdzie Parser nie mógł rozpoznać (nieznana funkcja „\inR”): {\displaystyle \displaystyle R_I\inR^{n\times n}} jest macierzą trójkątną górną, a 0 jest macierzą zerową wymiaru (mn)×n, otrzymujemy

r22=cIRIx22+cII22.

Rozwiązanie x* zadania wygładzania jest więc rozwiązaniem układu liniowego trójkątnego,

x*=RI1cI,

oraz r*2=bAx*2=cII2.

Zastanówmy się nad praktyczną realizacją tego algorytmu. Każde z kolejnych przekształceń Householdera Hk wyznaczamy przez obliczenie γk oraz współrzędnych wektora uk. Wektor ten ma tylko mk+1 współrzędnych niezerowych, a ponadto uk,i=ai,k(k1) dla k+1im. Dzięki takiej reprezentacji Hk, mnożenia Hkx możemy dla dowolnego x realizować według wzoru

(Hkx)i=xisuk,i,

gdzie s=ukTx/γk.

Uwzględnizjąc obecność zerowych elementów w uk, przejście od macierzy A(k1) do A(k) kosztuje rzędu 4(mk+1)(nk) operacji arytmetycznych i obliczenie jednego pierwiastka kwadratowego. Cały rozkład A=QR kosztuje więc rzędu (dla dużych m i n)

k=1n4(mk+1)(nk)43n3+2n2(mn)=2n2(mn/3)

operacji arytmetycznych i n pierwiastków kwadratowych. Zauważmy, że w przypadku m=n, a więc dla kwadratowego układu równań, koszt ten wynosi (4/3)n3 i jest dwa razy większy od kosztu eliminacji Gaussa.

Uwarunkowanie

Biblioteki