MN12: Różnice pomiędzy wersjami
mNie podano opisu zmian |
|||
(Nie pokazano 8 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 14: | Linia 14: | ||
nazywanym też <strong>liniowym zadaniem najmniejszych kwadratów</strong>. | nazywanym też <strong>liniowym zadaniem najmniejszych kwadratów</strong>. | ||
Jest ono uogólnieniem zadania rozwiązywania kwadratowych układów | Jest ono uogólnieniem zadania rozwiązywania kwadratowych układów | ||
równań liniowych do przypadku, gdy układ jest nadokreślony --- to znaczy, jest więcej równań niż niewiadomych. W takim przypadku nie należy liczyć na to, że uda się nam wskazać rozwiązanie spełniające ''wszystkie'' równania (jest ich za dużo!), dlatego będziemy szukać rozwiązania <math> | równań liniowych do przypadku, gdy układ jest nadokreślony --- to znaczy, jest więcej równań niż niewiadomych. W takim przypadku nie należy liczyć na to, że uda się nam wskazać rozwiązanie spełniające ''wszystkie'' równania (jest ich za dużo!), dlatego będziemy szukać rozwiązania <math>x</math>, które minimalizuje resztę, | ||
<center><math> | <center><math>||b-Ax||_2</math></center> | ||
</math></center> | |||
Jest to praktycznie bardzo często pojawiające się zadanie, a autorem pierwszego | Jest to praktycznie bardzo często pojawiające się zadanie, a autorem pierwszego | ||
Linia 24: | Linia 23: | ||
[[grafika:Gauss.jpg|thumb|right||Carl Friedrich Gauss<br> [[Biografia Gauss|Zobacz biografię]]]] | [[grafika:Gauss.jpg|thumb|right||Carl Friedrich Gauss<br> [[Biografia Gauss|Zobacz biografię]]]] | ||
Okazuje się bowiem, że jeśli np. potraktować <math> | Okazuje się bowiem, że jeśli np. potraktować <math>b</math> jako dane eksperymentalne (obarczone pewnym losowym błędem pomiaru o rozkładzie normalnym), a <math>x</math> --- parametrami zależności liniowej dla punktów pomiaru zadanych w macierzy <math>A</math>, to <math>x</math> minimalizujący <math>||b-Ax||_2</math> (właśnie w ''tej'' normie!) jest jednocześnie najbardziej prawdopodobnym zestawem współczynników tej zależności. W języku statystyki takie zadanie nazywa się zadaniem regresji liniowej i jest w tym kontekście bardzo często znajdowane w najrozmaitszych gałęziach nauki --- wszędzie tam, gdzie zachodzi potrzeba dopasowania parametrów liniowego modelu do wyników uzyskanych na drodze eksperymentu. | ||
Stąd zresztą nazwa zadania: wygładzanie liniowe, bo chodzi nam o to, by dopasowując parametry krzywej do wyników eksperymentu, wygładzić ewentualne błędy pomiarowe. | Stąd zresztą nazwa zadania: wygładzanie liniowe, bo chodzi nam o to, by dopasowując parametry krzywej do wyników eksperymentu, wygładzić ewentualne błędy pomiarowe. | ||
Linia 35: | Linia 34: | ||
Przypuśćmy, że dla pewnej funkcji | Przypuśćmy, że dla pewnej funkcji | ||
<math> | <math>f:[a,b]\to R</math> obserwujemy jej wartości <math>f_i</math> (dokładne lub | ||
zaburzone) w punktach <math> | zaburzone) w punktach <math>t_i</math>, <math>1\le i\le m</math>. Funkcję tę | ||
chcielibyśmy przybliżyć inną funkcją <math> | chcielibyśmy przybliżyć inną funkcją <math>w</math> należącą do | ||
pewnej <math> | pewnej <math>n</math> wymiarowej przestrzeni liniowej <math>W</math>, np. przestrzeni | ||
wielomianów stopnia mniejszego niż <math> | wielomianów stopnia mniejszego niż <math>n</math>. Jakość przybliżenia | ||
mierzymy, sprawdzając, ''jak dokładnie spełniona jest przybliżona równość <math> | mierzymy, sprawdzając, ''jak dokładnie spełniona jest przybliżona równość <math>f_i \approx w(t_i)</math>'', dokładniej, badając tzw. <strong>błąd średniokwadratowy</strong>, | ||
<center><math> | <center><math> | ||
\frac{1}{m}\sum_{i=1}^m (f_i-w(t_i))^2 | \frac{1}{m}\sum_{i=1}^m (f_i-w(t_i))^2</math></center> | ||
</math></center> | |||
Wybierając pewną bazę <math> | Wybierając pewną bazę <math>(w_j)_{j=1}^n</math> w <math>W</math> i rozwijając <math>w</math> | ||
w tej bazie, <math> | w tej bazie, <math>w(t)=\sum_{j=1}^n c_jw_j(t)</math>, sprowadzamy problem | ||
do minimalizacji | do minimalizacji | ||
<center><math> | <center><math>\sum_{i=1}^m\left(f_i-\sum_{j=1}^n c_jw_j(t_i)\right)^2 | ||
</math></center> | </math></center> | ||
względem <math> | względem <math>c_j</math>, a więc do zadania wygładzania liniowego. | ||
Rzeczywiście, kładąc | Rzeczywiście, kładąc | ||
<math> | <math>A=(a_{i,j})\in R^{m\times n}</math> z <math>a_{i,j}=w_j(t_i)</math>, | ||
<math> | <math>b=(f_i)_{i=1}^m</math> i <math>x=(c_j)_{j=1}^n</math>, reszta jest równa <math>\| b-A x\|_2^2</math>, a minimalizacja reszty jest oczywiście równoważna minimalizacji błędu średniokwadratowego. | ||
[[Image:MNaproksymacjal2.png|thumb|550px|center|Wielomian <math> | [[Image:MNaproksymacjal2.png|thumb|550px|center|Wielomian <math>w</math> (czerwony) stopnia 3, aproksymujący 7 zadanych wartości (zaznaczone na zielono) danej funkcji <math>f</math> w sensie minimalizacji błędu średniokwadratowego]] | ||
Powyższe zadanie aproksymacji średniokwadratowej w zadanych węzłach <math> | Powyższe zadanie aproksymacji średniokwadratowej w zadanych węzłach <math>(x_i,y_i)</math>, <math>i=1,\ldots,m</math>. wielomianem stopnia ''co najwyżej'' <math>N</math>, realizuje w Octave funkcja <code style="color: #006">polyfit(x,y,N)</code>. (Co dostaniemy, gdy <math>N=m-1</math>?) | ||
Można pokazać, że rozwiązanie minimalizujące błąd średniokwadratowy jest najbardziej prawdopodobnym zestawem parametrów naszego (liniowego) modelu, gdy zmierzone wartości <math> | Można pokazać, że rozwiązanie minimalizujące błąd średniokwadratowy jest najbardziej prawdopodobnym zestawem parametrów naszego (liniowego) modelu, gdy zmierzone wartości <math>f_i</math> mogą być zaburzone losowym błędem pomiarowym. | ||
</div></div> | </div></div> | ||
W kontekście nie-statystycznym, możemy myśleć o zadaniu wygładzania liniowego jako sposobie skrócenia listy parametrów <math> | W kontekście nie-statystycznym, możemy myśleć o zadaniu wygładzania liniowego jako sposobie skrócenia listy parametrów <math>x</math> modelu przy zachowaniu przybliżonego spełnienia warunków modelu, tzn. <math>Ax\approx b</math>. | ||
Dodajmy, że spotyka się uogólnienie tego zadania w formie następującej: dla danych wartości <math> | Dodajmy, że spotyka się uogólnienie tego zadania w formie następującej: dla danych wartości <math>b\in R^m</math>, i danej funkcji <math>F:R^n\rightarrow R^m</math>, znaleźć <math>x\in R^n</math> minimalizujący resztę: | ||
<center><math> | <center><math>||b-F(x)||_2</math></center> | ||
</math></center> | |||
Właśnie tego typu <strong>nieliniowe zadanie najmniejszych kwadratów</strong> rozwiązują np. nasze przenośne [ odbiorniki GPS]... Na marginesie zauważmy, że gdy <math> | Właśnie tego typu <strong>nieliniowe zadanie najmniejszych kwadratów</strong> rozwiązują np. nasze przenośne [ odbiorniki GPS]... Na marginesie zauważmy, że gdy <math>F</math> jest liniowa, zadanie sprowadza się do poprzedniego. W niniejszym wykładzie ograniczymy się wyłącznie do liniowego zadania najmniejszych kwadratów, nieliniowe jest omówiane na [[Metody optymalizacji|wykładzie z metod optymalizacji]]. | ||
==Układ równań normalnych== | ==Układ równań normalnych== | ||
Niech <math> | Niech <math>A</math> będzie daną macierzą o <math>m</math> wierszach i <math>n</math> kolumnach, | ||
<math> | <math>A\in R^{m\times n}</math>, taką, że | ||
<center><math> | <center><math>m\,\ge\,n\,=\, \mbox{rank} (A), | ||
</math></center> | </math></center> | ||
albo równoważnie, taką że jej wektory kolumny są liniowo | albo równoważnie, taką że jej wektory kolumny są liniowo | ||
niezależne. Niech także dany będzie wektor <math> | niezależne. Niech także dany będzie wektor <math>b\in R^m</math>. | ||
Jasne jest, że wtedy układ równań <math> | Jasne jest, że wtedy układ równań <math>A x= b</math> nie zawsze | ||
ma rozwiązanie - mówimy, że układ jest <strong>nadokreślony</strong>. | ma rozwiązanie - mówimy, że układ jest <strong>nadokreślony</strong>. | ||
<strong>Zadanie wygładzania liniowego</strong> polega na znalezieniu wektora | <strong>Zadanie wygładzania liniowego</strong> polega na znalezieniu wektora | ||
<math> | <math>x^*\in R^n</math>, który minimalizuje <strong>wektor residualny</strong> (wektor reszty) | ||
<math> | <math>r= b-A x</math> w normie drugiej, tzn. | ||
<center><math> | <center><math>\| b\,-\,A x^*\|_2\,=\,\min_{ x\in R^n} | ||
\| b\,-\,A x\|_2 | \| b\,-\,A x\|_2</math></center> | ||
</math></center> | |||
{{lemat||| | {{lemat||| | ||
Zadanie wygładzania liniowego ma jednoznaczne | Zadanie wygładzania liniowego ma jednoznaczne | ||
rozwiązanie <math> | rozwiązanie <math>x^*</math>, które można scharakteryzować jako rozwiązanie układu równań | ||
<center><math> | <center><math> | ||
A^TA x\,=\,A^T\, b | A^TA x\,=\,A^T\, b</math></center> | ||
</math></center> | |||
}} | }} | ||
Zauważmy, że jeśli macierz <math> | Zauważmy, że jeśli macierz <math>A</math> jest kwadratowa, <math>m=n</math>, to | ||
rozwiązaniem jest <math> | rozwiązaniem jest <math>x^*=A^{-1} b</math> i residuum jest zerem. | ||
Zadanie wygładzania liniowego jest więc uogólnieniem | Zadanie wygładzania liniowego jest więc uogólnieniem | ||
rozwiązywania kwadratowych układów równań liniowych. | rozwiązywania kwadratowych układów równań liniowych. | ||
Linia 114: | Linia 109: | ||
Równanie powyższe nazywa się <strong>układem równań normalnych</strong>. | Równanie powyższe nazywa się <strong>układem równań normalnych</strong>. | ||
Może ono nam sugerować sposób rozwiązania zadania wygładzania | Może ono nam sugerować sposób rozwiązania zadania wygładzania | ||
liniowego. Wystarczy bowiem pomnożyć macierz <math> | liniowego. Wystarczy bowiem pomnożyć macierz <math>A^T</math> przez <math>A</math> i | ||
rozwiązać układ normalny. Zauważmy ponadto, że macierz <math> | rozwiązać układ normalny. Zauważmy ponadto, że macierz <math>A^TA</math> | ||
jest symetryczna i dodatnio określona, bo <math> | jest symetryczna i dodatnio określona, bo <math>(A^TA)^T=A^TA</math> i dla | ||
<math> | <math>x\ne 0</math> mamy | ||
<math> | <math>x^T(A^TA) x=(A x)^T(A x)=\|A x\|_2>0</math>, przy | ||
czym ostatnia nierówność wynika z faktu, że kolumny macierzy <math> | czym ostatnia nierówność wynika z faktu, że kolumny macierzy <math>A</math> | ||
są liniowo niezależne i dlatego <math> | są liniowo niezależne i dlatego <math>A x\ne 0</math>. Przy mnożeniu | ||
<math> | <math>A^T</math> przez <math>A</math> wystarczy więc obliczyć tylko elementy na głównej | ||
przekątnej i pod nią, a do rozwiązania równania z macierzą | przekątnej i pod nią, a do rozwiązania równania z macierzą | ||
<math> | <math>A^TA</math> można zastosować [[MN05LAB|algorytm Cholesky'ego-Banachiewicza]]. Jak łatwo się przekonać, koszt takiego | ||
algorytmu wynosi <math> | algorytmu wynosi <math>n^2(m+n/3)</math>, przy czym dominuje koszt mnożenia | ||
obliczenia macierzy <math> | obliczenia macierzy <math>A^TA</math>. | ||
Ma on jednak pewne wady. Mnożenie macierzy powoduje w <math> | Ma on jednak pewne wady. Mnożenie macierzy powoduje w <math>fl_\nu</math> | ||
powstanie po drodze dodatkowych błędów, które mogą nawet | powstanie po drodze dodatkowych błędów, które mogą nawet | ||
zmienić rząd macierzy. Na przykład, dla macierzy | zmienić rząd macierzy. Na przykład, dla macierzy | ||
<center><math> | <center><math>A\,=\,\left(\begin{array} {cccc} | ||
1 & 1 & 1 & 1 \\ | 1 & 1 & 1 & 1 \\ | ||
\epsilon \\ | \epsilon \\ | ||
Linia 141: | Linia 136: | ||
mamy | mamy | ||
<center><math> | <center><math>A^TA\,=\,\left(\begin{array} {cccc} | ||
1+\epsilon^2 & 1 & 1 & 1 \\ | 1+\epsilon^2 & 1 & 1 & 1 \\ | ||
1 & 1+\epsilon^2 & 1 & 1 \\ | 1 & 1+\epsilon^2 & 1 & 1 \\ | ||
1 & 1 & 1+\epsilon^2 & 1 \\ | 1 & 1 & 1+\epsilon^2 & 1 \\ | ||
1 & 1 & 1 & 1+\epsilon^2 \end{array} \right) | 1 & 1 & 1 & 1+\epsilon^2 \end{array} \right)</math></center> | ||
</math></center> | |||
Jeśli <math> | Jeśli <math>\epsilon^2<\nu</math> to <math>fl_\nu(1+\epsilon^2)=1</math>, co implikuje | ||
<math> | <math>\mbox{rank} (fl_\nu(A^TA))=1</math>, podczas, gdy <math>\mbox{rank} (fl_\nu(A))=4</math>. | ||
Inne potencjalne wady układu równań normalnych wymieniamy w dalszej części wykładu. | Inne potencjalne wady układu równań normalnych wymieniamy w dalszej części wykładu. | ||
Poniżej przedstawimy inną metodę rozwiązywania zadania | Poniżej przedstawimy inną metodę rozwiązywania zadania | ||
wygładzania liniowego, która oparta jest na specjalnych | wygładzania liniowego, która oparta jest na specjalnych | ||
przekształceniach zwanych odbiciami Householdera. | przekształceniach zwanych odbiciami Householdera. | ||
==Odbicia Householdera== | ==Odbicia Householdera== | ||
Dla danego wektora <math> | Dla danego wektora <math>w\in R^m</math> o normie | ||
<math> | <math>\| w\|_2=\sqrt{ w^T w}=1</math>, | ||
<strong>odbicie</strong> (macierz) <strong>Householdera</strong> zdefiniowane jest jako | <strong>odbicie</strong> (macierz) <strong>Householdera</strong> zdefiniowane jest jako | ||
<center><math> | <center><math>H\,=\,I\,-\,2 w w^T</math></center> | ||
</math></center> | |||
Zauważmy, że | Zauważmy, że | ||
<center><math> | <center><math>H x\,=\, x\,-\,2( w^T x) w</math>,</center> | ||
</math></center> | |||
a ponieważ <math> | a ponieważ <math>( w^T x) w=( x, w)_2 w</math> | ||
jest rzutem prostopadłym <math> | jest rzutem prostopadłym <math>x</math> na kierunek wektora <math>w</math> | ||
(<math> | (<math>(\cdot,\cdot)_2</math> oznacza iloczyn skalarny), to <math>H x</math> jest | ||
odbiciem lustrzanym wektora <math> | odbiciem lustrzanym wektora <math>x</math> względem hiperpłaszczyzny | ||
(wymiaru <math> | (wymiaru <math>m-1</math>) prostopadłej do <math>w</math>. | ||
Odbicia Householdera są przekształceniami nieosobliwymi | Odbicia Householdera są przekształceniami nieosobliwymi | ||
spełniającymi | spełniającymi | ||
<center><math> | <center><math>H^{-1}\,=\,H\,=\,H^T</math></center> | ||
</math></center> | |||
Rzeczywiście, ponieważ <math> | Rzeczywiście, ponieważ <math>w</math> ma normę jednostkową, mamy | ||
<center><math> | <center><math>H^2 \,=\, (I-2 w w^T)^2\,=\, | ||
I-4 w w^T+4 w( w^T w) w^T \,=\, I | I-4 w w^T+4 w( w^T w) w^T \,=\, I</math>,</center> | ||
</math></center> | |||
oraz | oraz | ||
<center><math> | <center><math>H^T\,=\,(I-2 w w^T)^T\,=\,I-2( w^T)^T w^T\,=\,I. | ||
</math></center> | </math></center> | ||
W szczególności <math> | W szczególności <math>H</math> jest więc przekształceniem <strong>ortogonalnym</strong>, | ||
<math> | <math>H^{-1}=H^T</math>, czyli nie zmienia długości wektora, | ||
<center><math> | <center><math>\|H x\|_2\,=\,\sqrt{(H x)^T(H x)}\,=\, | ||
\sqrt{ x^T(H^TH) x}\,=\,\sqrt{ x^T x}\,=\, | \sqrt{ x^T(H^TH) x}\,=\,\sqrt{ x^T x}\,=\, | ||
\| x\|_2 | \| x\|_2</math></center> | ||
</math></center> | |||
Odbicia Householdera zastosujemy do przeprowadzenia danego wektora | Odbicia Householdera zastosujemy do przeprowadzenia danego wektora | ||
<math> | <math>x\ne 0</math> na kierunek innego niezerowego wektora, powiedzmy | ||
<math> | <math>e</math>, tzn. | ||
<center><math> | <center><math>H x\,=\,(I-2 w w^T) x\,=\,\alpha\, e</math></center> | ||
</math></center> | |||
<!-- | <!-- | ||
Linia 212: | Linia 200: | ||
--> | --> | ||
Załóżmy dla uproszczenia, że <math> | Załóżmy dla uproszczenia, że <math>\| e\|_2=1</math>. | ||
Aby wyznaczyć <math> | Aby wyznaczyć <math>H</math> zauważmy, że | ||
<center><math> | <center><math>w\,=\,\frac{ x-\alpha e}{2( w^T x)}, | ||
</math></center> | </math></center> | ||
a ponieważ <math> | a ponieważ <math>\alpha=\pm\| x\|_2</math> i <math>\| w\|_2=1</math> to | ||
<center><math> | <center><math>w\,=\,\frac{ x\mp\| x\|_2 e} | ||
{\| x\mp\| x\|_2 e\|_2} | {\| x\mp\| x\|_2 e\|_2}</math></center> | ||
</math></center> | |||
W szczególności, jeśli <math> | W szczególności, jeśli <math>e= e_1</math> jest pierwszym | ||
wersorem, powyższe wzory dają | wersorem, powyższe wzory dają | ||
<center><math> | <center><math>H\,=\,I\,-\,\frac{ u u^T}{\gamma}, | ||
</math></center> | </math></center> | ||
gdzie | gdzie | ||
<center><math> | <center><math>u_i\,=\,\left\{\begin{array} {ll} | ||
x_1\mp\| x\|_2 &\quad i=1, \\ | x_1\mp\| x\|_2 &\quad i=1, \\ | ||
x_i &\quad 2\le i\le m, | x_i &\quad 2\le i\le m, | ||
\end{array} \right. | \end{array} \right.</math></center> | ||
</math></center> | |||
oraz | oraz | ||
<center><math>\ | <center><math>\begin{align} \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((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\, | &= \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. | 2 x_1\|x\|_2\Big) \,=\,\|x\|_2^2\,\mp\,x_1 \|x\|_2. | ||
\ | \end{align}</math></center> | ||
Otrzymaliśmy dwa odbicia Householdera przekształcające dany wektor | Otrzymaliśmy dwa odbicia Householdera przekształcające dany wektor | ||
<math> | <math>x</math> na kierunek pierwszego wersora, w zależności od wybranego | ||
znaku przy <math> | znaku przy <math>\| x\|_2</math>. Ustalimy ten znak na plus gdy <math>x_1\ge 0</math> | ||
oraz na minus gdy <math> | oraz na minus gdy <math>x_1<0</math>, co pozwoli na obliczenie <math>u_1</math> i <math>\gamma</math> | ||
z małym błędem względem w <math> | z małym błędem względem w <math>fl_\nu</math>. Wtedy bowiem mamy | ||
<center><math> | <center><math>u_1\,=\,\left\{\begin{array} {ll} | ||
x_1+\|x\|_2 & \quad x_1\ge 0, \\ | x_1+\|x\|_2 & \quad x_1\ge 0, \\ | ||
x_1-\|x\|_2 & \quad x_1<0, \end{array} \right. | x_1-\|x\|_2 & \quad x_1<0, \end{array} \right.</math></center> | ||
</math></center> | |||
oraz <math> | oraz <math>\gamma=\| x\|_2^2+|x_1|\,\| x\|_2</math>, czyli zawsze | ||
dodajemy liczby tych samych znaków. Ponadto pierwsza współrzędna | dodajemy liczby tych samych znaków. Ponadto pierwsza współrzędna | ||
wektora <math> | wektora <math>H x</math> jest równa <math>-\| x\|_2</math>, gdy <math>x_1\ge 0</math>, a | ||
<math> | <math>+\| x\|_2</math> jeśli <math>x_1<0</math>. | ||
==Rozkład QR== | ==Rozkład QR== | ||
Odbić Householdera można użyć do rozkładu macierzy | Odbić Householdera można użyć do rozkładu macierzy | ||
<math> | <math>A\in R^{m\times n}</math> na iloczyn ortogonalno-trójkątny. | ||
Niech <math> | Niech <math>A=( a_1, a_2,\ldots, a_n)</math>, gdzie <math>a_j</math> są | ||
wektorami-kolumnami macierzy <math> | wektorami-kolumnami macierzy <math>A</math>. Wybierzmy pierwsze odbicie | ||
Householdera <math> | Householdera <math>H_1=I_m- u_1 u_1^T/\gamma_1</math> tak, aby | ||
przekształcało pierwszy wektor-kolumnę macierzy <math> | przekształcało pierwszy wektor-kolumnę macierzy <math>A</math> na kierunek | ||
<math> | <math>e_1</math>. Efektem pomnożenia macierzy <math>A</math> z lewej strony przez | ||
<math> | <math>H_1</math> będzie wtedy macierz | ||
<center><math> | <center><math>A^{(1)}\,=\,( a^{(1)}_1,\ldots, a^{(1)}_n) | ||
\,=\,(H_1 a_1,\ldots, H_1 a_n) | \,=\,(H_1 a_1,\ldots, H_1 a_n)</math>,</center> | ||
</math></center> | |||
w której pierwsza kolumna <math> | w której pierwsza kolumna <math>a^{(1)}_1</math> ma niezerową tylko | ||
pierwszą współrzędną. W następnym kroku wybieramy drugie | pierwszą współrzędną. W następnym kroku wybieramy drugie | ||
przekształcenie Householdera | przekształcenie Householdera | ||
<math> | <math>\bar H_2=I_{m-1}- v_2 v_2^T/\gamma_2</math> wymiaru <math>m-1</math> tak, | ||
aby przeprowadzało wektor <math> | aby przeprowadzało wektor <math>(a^{(1)}_{i,2})_{i=2}^m</math> na kierunek | ||
pierwszego wersora w <math> | pierwszego wersora w <math>R^{m-1}</math>. Rozszerzając <math>v_2\in R^{m-1}</math> | ||
do wektora <math> | do wektora <math>u_2\in R^m</math> przez dodanie zera jako pierwszej | ||
współrzędnej, <math> | współrzędnej, <math>u_2=(0, v_2)^T</math>, otrzymujemy | ||
przekształcenie (macierz) Householdera | przekształcenie (macierz) Householdera | ||
<math> | <math>H_2=I_m- u_2 u_2^T/\gamma_2</math> w <math>R^m</math> postaci | ||
<center><math> | <center><math>H_2\,=\,\left(\begin{array} {cccc} | ||
1 & 0^T \\ | 1 & 0^T \\ | ||
0 & \bar H_2 \end{array} \right) | 0 & \bar H_2 \end{array} \right)</math></center> | ||
</math></center> | |||
Pomnożenie macierzy <math> | Pomnożenie macierzy <math>A^{(1)}</math> z lewej strony przez <math>H_2</math> spowoduje | ||
teraz wyzerowanie drugiej kolumny macierzy pod elementem | teraz wyzerowanie drugiej kolumny macierzy pod elementem | ||
<math> | <math>a^{(1)}_{2,2}</math>, przy czym pierwszy wiersz i pierwsza kolumna | ||
pozostaną niezmienione. Postępując tak dalej <math> | pozostaną niezmienione. Postępując tak dalej <math>n</math> razy | ||
(albo <math> | (albo <math>n-1</math> razy gdy <math>m=n</math>) otrzymujemy | ||
<center><math> | <center><math>H_nH_{n-1}\cdots H_2H_1A\,=\,R</math>,</center> | ||
</math></center> | |||
gdzie <math>\ | gdzie <math>R\in R^{m\times n}</math> jest uogólnioną macierzą trójkątną | ||
górną, tzn. <math> | górną, tzn. <math>r_{i,j}=0</math> dla <math>i>j</math>. Stąd, podstawiając | ||
<math> | <math>Q=H_1H_2\cdots H_n</math>, dostajemy rozkład macierzy na iloczyn | ||
ortogonalno-trójkątny | ortogonalno-trójkątny | ||
<center><math> | <center><math> | ||
A\,=\,Q\cdot R. | A\,=\,Q\cdot R. | ||
</math></center> | </math></center> | ||
Rzeczywiście, macierz <math> | Rzeczywiście, macierz <math>Q\in R^{m\times m}</math> jest ortogonalna, bo | ||
<center><math>\ | <center><math>\begin{align} Q^{-1} &= (H_1H_2\cdots H_n)^{-1}\,=\, | ||
H_n^{-1}\cdots H_2^{-1}H_1^{-1} \\ | H_n^{-1}\cdots H_2^{-1}H_1^{-1} \\ | ||
&= H_n^T\cdots H_2^TH_1^T \,=\, | &= H_n^T\cdots H_2^TH_1^T \,=\, | ||
(H_1H_2\cdots H_n)^T\,=\,Q^T. | (H_1H_2\cdots H_n)^T\,=\,Q^T. | ||
\ | \end{align}</math></center> | ||
Dyspunując rozkładem QR, zadanie wygładzania liniowego | Dyspunując rozkładem QR, zadanie wygładzania liniowego | ||
Linia 324: | Linia 306: | ||
ortogonalną nie zmienia normy drugiej wektora, mamy | ortogonalną nie zmienia normy drugiej wektora, mamy | ||
<center><math>\ | <center><math>\begin{align} \| r\|_2 &= \| b-A x\|_2\;=\;\| b-QR x\|_2 \\ | ||
&= \|Q(Q^T b-R x)\|_2 \;=\;\| c-R x\|_2, | &= \|Q(Q^T b-R x)\|_2 \;=\;\| c-R x\|_2, | ||
\ | \end{align}</math></center> | ||
gdzie <math> | gdzie <math>c=Q^T b=H_n\cdots H_2H_1 b</math>. | ||
Rozbijając wektor <math> | Rozbijając wektor <math>c</math> na <math>c=( c_I, c_{II})^T</math>, | ||
gdzie <math> | gdzie <math>c_I\in R^n</math> i <math>c_{II}\in R^{m-n}</math>, oraz macierz | ||
<math> | <math>R</math> na | ||
<center><math> | <center><math>R\,=\,\left(\begin{array} {c} R_I \\ 0\end{array} \right)</math>,</center> | ||
</math></center> | |||
gdzie <math> | gdzie <math>R_I\in R^{n\times n}</math> jest macierzą trójkątną górną, a | ||
<math> | <math>0</math> jest macierzą zerową wymiaru <math>(m-n)\times n</math>, otrzymujemy | ||
<center><math> | <center><math>\| r\|_2^2\;=\;\| c_I-R_I x\|_2^2\,+\, | ||
\| c_{II}\|_2^2. | \| c_{II}\|_2^2. | ||
</math></center> | </math></center> | ||
Rozwiązanie <math> | Rozwiązanie <math>x^*</math> zadania wygładzania jest więc | ||
rozwiązaniem układu liniowego trójkątnego, | rozwiązaniem układu liniowego trójkątnego, | ||
<center><math> | <center><math>x^*\,=\,R_I^{-1} c_I</math>,</center> | ||
</math></center> | |||
oraz <math> | oraz <math>\| r^*\|_2=\| b-A x^*\|_2=\| c_{II}\|_2</math>. | ||
Zastanówmy się nad praktyczną realizacją tego algorytmu. Każde | Zastanówmy się nad praktyczną realizacją tego algorytmu. Każde | ||
z kolejnych przekształceń Householdera <math> | z kolejnych przekształceń Householdera <math>H_k</math> wyznaczamy przez | ||
obliczenie <math> | obliczenie <math>\gamma_k</math> oraz współrzędnych wektora <math>u_k</math>. | ||
Wektor ten ma tylko <math> | Wektor ten ma tylko <math>m-k+1</math> współrzędnych niezerowych, a ponadto | ||
<math> | <math>u_{k,i}=a^{(k-1)}_{i,k}</math> dla <math>k+1\le i\le m</math>. Dzięki takiej | ||
reprezentacji <math> | reprezentacji <math>H_k</math>, mnożenia <math>H_k x</math> możemy dla dowolnego | ||
<math> | <math>x</math> realizować według wzoru | ||
<center><math> | <center><math>(H_k x)_i\,=\,x_i\,-\,s\,u_{k,i}, | ||
</math></center> | </math></center> | ||
gdzie <math> | gdzie <math>s= u_k^T x/\gamma_k</math>. | ||
Uwzględnizjąc obecność zerowych elementów w <math> | Uwzględnizjąc obecność zerowych elementów w <math>u_k</math>, | ||
przejście od macierzy <math> | przejście od macierzy <math>A^{(k-1)}</math> do <math>A^{(k)}</math> kosztuje rzędu | ||
<math> | <math>4(m-k+1)(n-k)</math> operacji arytmetycznych i obliczenie jednego | ||
pierwiastka kwadratowego. Cały rozkład <math> | pierwiastka kwadratowego. Cały rozkład <math>A=QR</math> kosztuje więc | ||
rzędu (dla dużych <math> | rzędu (dla dużych <math>m</math> i <math>n</math>) | ||
<center><math> | <center><math>\sum_{k=1}^n 4(m-k+1)(n-k)\,\approx\,\frac 43n^3+2n^2(m-n) | ||
\,=\,2n^2(m-n/3) | \,=\,2n^2(m-n/3) | ||
</math></center> | </math></center> | ||
operacji arytmetycznych i <math> | operacji arytmetycznych i <math>n</math> pierwiastków kwadratowych. Zauważmy, | ||
że w przypadku <math> | że w przypadku <math>m=n</math>, a więc dla kwadratowego układu równań, | ||
koszt ten wynosi <math> | koszt ten wynosi <math>(4/3)n^3</math> i jest dwa razy większy od kosztu | ||
eliminacji Gaussa. | eliminacji Gaussa. | ||
===Implementacja=== | ===Implementacja=== | ||
Cała informacja o przekształceniu Householdera znajduje się w wektorze <math> | Cała informacja o przekształceniu Householdera znajduje się w wektorze <math>u</math> oraz czynniku skalującym <math>\gamma</math> --- i w ten sposób najwygodniej przechowywać macierz Householdera. W żadnym miejscu algorytmu nie będzie nam potrzebne nic ponad umiejętność mnożenia zadanego wektora <math>x</math> przez macierz Householdera <math>H = I - \frac{1}{\gamma}uu^T</math>. | ||
Nie popełnijmy jednak częstego błędu, prostodusznie implementując to mnożenie (przykładowo, w Octave) jako | Nie popełnijmy jednak częstego błędu, prostodusznie implementując to mnożenie (przykładowo, w Octave) jako | ||
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>H = eye(length(u)) - (u*u') / <math> | <div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>H = eye(length(u)) - (u*u') / <math>\gamma</math>; | ||
y = H*x; | y = H*x; | ||
</pre></div> | </pre></div> | ||
Gdybyśmy użyli takiej implementacji, potrzebowalibyśmy aż <math> | Gdybyśmy użyli takiej implementacji, potrzebowalibyśmy aż <math>O(N^2)</math> miejsc w pamięci (chociaż, przypomnijmy raz jeszcze, cała informacja o <math>H</math> to tylko <math>O(N)</math> liczb). Ponadto, mnożenie przez macierz to aż <math>O(N^2)</math> działań arytmetycznych. | ||
Aby znacznie lepiej skorzystać z bardzo specyficznej postaci macierzy <math> | Aby znacznie lepiej skorzystać z bardzo specyficznej postaci macierzy <math>H</math>, która jest po prostu zaburzeniem macierzy identyczności macierzą rzędu co najwyżej 1, wystarczy w odpowiednim miejscu wstawić nawiasy: | ||
<center><math> | <center><math> | ||
Hx = \left(I - \frac{1}{\gamma}uu^T\right) \, x = x - \frac{1}{\gamma}uu^Tx = | Hx = \left(I - \frac{1}{\gamma}uu^T\right) \, x = x - \frac{1}{\gamma}uu^Tx = | ||
x - \frac{1}{\gamma}u(u^Tx) | x - \frac{1}{\gamma}u(u^Tx)</math></center> | ||
</math></center> | |||
Stąd <strong>prawidłowa</strong> implementacja mnożenia przez macierz Householdera: | Stąd <strong>prawidłowa</strong> implementacja mnożenia przez macierz Householdera: | ||
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre><math> | <div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre><math>\omega</math> = u'*x; | ||
y = x - <math> | y = x - <math>\frac{\omega}{\gamma}</math>*u; | ||
</pre></div> | </pre></div> | ||
Tym razem wcale nie potrzeba dodatkowej pamięci, a koszt algorytmu jest liniowy(!) względem <math> | Tym razem wcale nie potrzeba dodatkowej pamięci, a koszt algorytmu jest liniowy(!) względem <math>N</math>, a więc uzyskaliśmu <math>N</math>-krotne przyspieszenie w porównaniu z poprzednim! | ||
Jest to całkiem typowe w numeryce: | Jest to całkiem typowe w numeryce: | ||
Linia 410: | Linia 389: | ||
<blockquote style="background-color: #fefeee; padding:1em; margin-left,margin-right:2em; margin-top,margin-bottom: 1em;"> | <blockquote style="background-color: #fefeee; padding:1em; margin-left,margin-right:2em; margin-top,margin-bottom: 1em;"> | ||
Optymalizacja kodu źródłowego może być źródłem dużego przyspieszenia programu numerycznego. Ale największe przyspieszenie zazwyczaj jest efektem restrukturyzacji całego algorytmu (lub wręcz jego zmiany). | Optymalizacja kodu źródłowego może być źródłem dużego przyspieszenia programu numerycznego. Ale największe przyspieszenie zazwyczaj jest efektem restrukturyzacji całego algorytmu (lub wręcz jego zmiany). | ||
</blockquote> | </blockquote> | ||
==Uwarunkowanie== | ==Uwarunkowanie== | ||
Linia 420: | Linia 399: | ||
{{definicja|Uwarunkowanie macierzy prostokątnej w normie euklidesowej|Uwarunkowanie macierzy prostokątnej w normie euklidesowej| | {{definicja|Uwarunkowanie macierzy prostokątnej w normie euklidesowej|Uwarunkowanie macierzy prostokątnej w normie euklidesowej| | ||
Niech <math> | Niech <math>\Sigma(A)</math> będzie zbiorem wartości własnych macierzy <math>A^TA</math>. Definiujemy | ||
<center><math> | <center><math>\mbox{cond} _2(A) = \sqrt{\frac{\max\{\lambda: \lambda \in \Sigma(A)\}}{\min\{\lambda: \lambda \in \Sigma(A)\}}}</math></center> | ||
</math></center> | |||
(Jeśli w mianowniku pojawiłoby się zero, kładziemy <math> | (Jeśli w mianowniku pojawiłoby się zero, kładziemy <math>\mbox{cond} _2(A) = +\infty</math>). | ||
}} | }} | ||
Linia 432: | Linia 410: | ||
{{twierdzenie|O uwarunkowaniu zadania wygładzania liniowego|O uwarunkowaniu zadania wygładzania liniowego| | {{twierdzenie|O uwarunkowaniu zadania wygładzania liniowego|O uwarunkowaniu zadania wygładzania liniowego| | ||
Niech <math> | Niech <math>x</math> będzie rozwiązaniem zadania najmniejszych kwadratów dla niezerowej prawej strony <math>b</math>, | ||
<center><math> | <center><math> | ||
||b-Ax||_2\rightarrow \min{} ! | ||b-Ax||_2\rightarrow \min{} ! | ||
</math></center> | </math></center> | ||
i niech <math> | i niech <math>\widetilde{x}</math> będzie rozwiązaniem zadania zaburzonego <center><math> | ||
||\widetilde{b}-\widetilde{A}\widetilde{x}||_2\rightarrow \min{} ! | ||\widetilde{b}-\widetilde{A}\widetilde{x}||_2\rightarrow \min{} !</math>,</center> | ||
</math></center> | |||
przy czym zakładamy, że | przy czym zakładamy, że | ||
<center><math> | <center><math> | ||
\frac{||\widetilde{b}-b||_2}{||b||_2}, \quad \frac{||\widetilde{A}-A||_2}{||A||_2} \leq \epsilon | \frac{||\widetilde{b}-b||_2}{||b||_2}, \quad \frac{||\widetilde{A}-A||_2}{||A||_2} \leq \epsilon</math>,</center> | ||
</math></center> | |||
gdzie <math> | gdzie <math>\epsilon</math> jest dostatecznie małe. | ||
Oznaczmy | Oznaczmy | ||
<center><math> | <center><math>\sin(\theta) = \frac{||b-Ax||_2}{||b||_2} < 1 | ||
</math></center> | </math></center> | ||
Linia 457: | Linia 433: | ||
Wtedy | Wtedy | ||
<center><math> | <center><math>\frac{||\widetilde{x}-x||_2}{||x||_2} \lesssim \left( \frac{2 \mbox{cond} _2(A)}{\cos(\theta)} + \tan(\theta) \mbox{cond} _2^2(A)\right) \cdot \epsilon</math></center> | ||
</math></center> | |||
}} | }} | ||
Generalnie więc, jeśli reszta <math> | Generalnie więc, jeśli reszta <math>||b-Ax||_2</math> jest mała, wrażliwość na zaburzenia jest na poziomie <math>\mbox{cond} (A)</math>. Ale jeśli reszta jest duża (tzn. prawa strona jest taka, że nie można dobrze spełnić równania <math>b\approx Ax</math> w sensie średniokwadratowym), wtedy wrażliwość może być daleko większa. | ||
{{wniosek||| | {{wniosek||| | ||
W przypadku, gdy <math> | W przypadku, gdy <math>m \gg n</math>, zdawać by się mogło --- zgodnie z popularnym, acz błędnym, jak za chwilę się okaże, poglądem --- że użycie układu równań normalnych jest najszybszym algorytmem, a skoro tak, to powinno dawać najmniejszą "akumulację błędu zaokrągleń". Tymczasem widzimy, że jest sens rozwiązywać nasze zadanie poprzez układ równań normalnych tylko wtedy, gdy reszta rozwiązania jest duża. W przeciwnym wypadku, gdy <math>\sin(\theta) \ll 1</math>, rozwiązanie obliczone (kosztowniejszym) rozkładem QR będzie miało błąd na poziomie <math>\mbox{cond} _2(A)</math>, a tymczasem rozwiązanie wyznaczone z układu równań normalnych będzie obarczone błędem na poziomie <math>\mbox{cond} _2^2(A) > \mbox{cond} _2(A)</math>. | ||
}} | }} | ||
Linia 475: | Linia 450: | ||
</pre></div> | </pre></div> | ||
Dla zadania najmniejszych kwadratów mamy dwie podstawowe funkcje LAPACKa: <code style="color: #903">DGELS</code>, która rozwiązuje dokładnie zadanie takie, jak postawiliśmy w wykładzie, to znaczy w przypadku, gdy macierz <math> | Dla zadania najmniejszych kwadratów mamy dwie podstawowe funkcje LAPACKa: <code style="color: #903">DGELS</code>, która rozwiązuje dokładnie zadanie takie, jak postawiliśmy w wykładzie, to znaczy w przypadku, gdy macierz <math>A</math> jest pełnego rzędu --- wykorzystując rozkład QR, który omówiliśmy. | ||
Natomiast dla przypadku, <strong>gdy macierz nie jest pełnego rzędu</strong>, działa funkcja <code style="color: #903">DGELSS</code>. Wówczas, co łatwo sprawdzić, zadanie najmniejszych kwadratów tak, jak je postawiliśmy, nie musi mieć jednoznacznego rozwiązania. Jednak jeśli dołożyć wymaganie, by znalezione rozwiązanie <math> | Natomiast dla przypadku, <strong>gdy macierz nie jest pełnego rzędu</strong>, działa funkcja <code style="color: #903">DGELSS</code>. Wówczas, co łatwo sprawdzić, zadanie najmniejszych kwadratów tak, jak je postawiliśmy, nie musi mieć jednoznacznego rozwiązania. Jednak jeśli dołożyć wymaganie, by znalezione rozwiązanie <math>x</math> miało <strong>minimalną normę</strong> euklidesową spośród wszystkich spełniających warunek <math>||b-Ax||_2 \rightarrow \min !</math>, to wtedy takie rozwiązanie jest już jedyne. Jednakże dla takiego zadania rozkład QR jest już niewystarczający i stosuje się inny rozkład, tzw. SVD, który wykracza poza ramy naszego wykładu. | ||
Funkcje biblioteczne rozwiązujące zadanie wygładzania liniowego są oczywistym składnikiem wszystkich szanujących się pakietów statystycznych. | Funkcje biblioteczne rozwiązujące zadanie wygładzania liniowego są oczywistym składnikiem wszystkich szanujących się pakietów statystycznych. |
Aktualna wersja na dzień 11:17, 12 wrz 2023
Nadokreślone układy równań liniowych
<<< Powrót do strony głównej przedmiotu Metody numeryczne
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 przypadku, gdy układ jest nadokreślony --- to znaczy, jest więcej równań niż niewiadomych. W takim przypadku nie należy liczyć na to, że uda się nam wskazać rozwiązanie spełniające wszystkie równania (jest ich za dużo!), dlatego będziemy szukać rozwiązania , które minimalizuje resztę,
Jest to praktycznie bardzo często pojawiające się zadanie, a autorem pierwszego rozwiązania był nie kto inny jak sam wielki Gauss.

Zobacz biografię
Okazuje się bowiem, że jeśli np. potraktować jako dane eksperymentalne (obarczone pewnym losowym błędem pomiaru o rozkładzie normalnym), a --- parametrami zależności liniowej dla punktów pomiaru zadanych w macierzy , to minimalizujący (właśnie w tej normie!) jest jednocześnie najbardziej prawdopodobnym zestawem współczynników tej zależności. W języku statystyki takie zadanie nazywa się zadaniem regresji liniowej i jest w tym kontekście bardzo często znajdowane w najrozmaitszych gałęziach nauki --- wszędzie tam, gdzie zachodzi potrzeba dopasowania parametrów liniowego modelu do wyników uzyskanych na drodze eksperymentu.
Stąd zresztą nazwa zadania: wygładzanie liniowe, bo chodzi nam o to, by dopasowując parametry krzywej do wyników eksperymentu, wygładzić ewentualne błędy pomiarowe.
Dopasowanie krzywej minimalizującej błąd średniokwadratowy
Przykład
Przypuśćmy, że dla pewnej funkcji obserwujemy jej wartości (dokładne lub zaburzone) w punktach , . Funkcję tę chcielibyśmy przybliżyć inną funkcją należącą do pewnej wymiarowej przestrzeni liniowej , np. przestrzeni wielomianów stopnia mniejszego niż . Jakość przybliżenia mierzymy, sprawdzając, jak dokładnie spełniona jest przybliżona równość , dokładniej, badając tzw. błąd średniokwadratowy,
Wybierając pewną bazę w i rozwijając w tej bazie, , sprowadzamy problem do minimalizacji
względem , a więc do zadania wygładzania liniowego.
Rzeczywiście, kładąc z , i , reszta jest równa , a minimalizacja reszty jest oczywiście równoważna minimalizacji błędu średniokwadratowego.

Powyższe zadanie aproksymacji średniokwadratowej w zadanych węzłach , . wielomianem stopnia co najwyżej , realizuje w Octave funkcja polyfit(x,y,N)
. (Co dostaniemy, gdy ?)
Można pokazać, że rozwiązanie minimalizujące błąd średniokwadratowy jest najbardziej prawdopodobnym zestawem parametrów naszego (liniowego) modelu, gdy zmierzone wartości mogą być zaburzone losowym błędem pomiarowym.
W kontekście nie-statystycznym, możemy myśleć o zadaniu wygładzania liniowego jako sposobie skrócenia listy parametrów modelu przy zachowaniu przybliżonego spełnienia warunków modelu, tzn. .
Dodajmy, że spotyka się uogólnienie tego zadania w formie następującej: dla danych wartości , i danej funkcji , znaleźć minimalizujący resztę:
Właśnie tego typu nieliniowe zadanie najmniejszych kwadratów rozwiązują np. nasze przenośne [ odbiorniki GPS]... Na marginesie zauważmy, że gdy jest liniowa, zadanie sprowadza się do poprzedniego. W niniejszym wykładzie ograniczymy się wyłącznie do liniowego zadania najmniejszych kwadratów, nieliniowe jest omówiane na wykładzie z metod optymalizacji.
Układ równań normalnych
Niech będzie daną macierzą o wierszach i kolumnach, , taką, że
albo równoważnie, taką że jej wektory kolumny są liniowo niezależne. Niech także dany będzie wektor . Jasne jest, że wtedy układ równań nie zawsze ma rozwiązanie - mówimy, że układ jest nadokreślony.
Zadanie wygładzania liniowego polega na znalezieniu wektora , który minimalizuje wektor residualny (wektor reszty) w normie drugiej, tzn.
Lemat
Zadanie wygładzania liniowego ma jednoznaczne rozwiązanie , które można scharakteryzować jako rozwiązanie układu równań
Zauważmy, że jeśli macierz jest kwadratowa, , to rozwiązaniem jest i residuum jest zerem. Zadanie wygładzania liniowego jest więc uogólnieniem rozwiązywania kwadratowych układów równań liniowych.
Równanie powyższe nazywa się układem równań normalnych. Może ono nam sugerować sposób rozwiązania zadania wygładzania liniowego. Wystarczy bowiem pomnożyć macierz przez i rozwiązać układ normalny. Zauważmy ponadto, że macierz jest symetryczna i dodatnio określona, bo i dla mamy , przy czym ostatnia nierówność wynika z faktu, że kolumny macierzy są liniowo niezależne i dlatego . Przy mnożeniu przez wystarczy więc obliczyć tylko elementy na głównej przekątnej i pod nią, a do rozwiązania równania z macierzą można zastosować algorytm Cholesky'ego-Banachiewicza. Jak łatwo się przekonać, koszt takiego algorytmu wynosi , przy czym dominuje koszt mnożenia obliczenia macierzy .
Ma on jednak pewne wady. Mnożenie macierzy powoduje w powstanie po drodze dodatkowych błędów, które mogą nawet zmienić rząd macierzy. Na przykład, dla macierzy
mamy
Jeśli to , co implikuje , podczas, gdy . Inne potencjalne wady układu równań normalnych wymieniamy w dalszej części wykładu.
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 o normie , odbicie (macierz) Householdera zdefiniowane jest jako
Zauważmy, że
a ponieważ jest rzutem prostopadłym na kierunek wektora ( oznacza iloczyn skalarny), to jest odbiciem lustrzanym wektora względem hiperpłaszczyzny (wymiaru ) prostopadłej do .
Odbicia Householdera są przekształceniami nieosobliwymi spełniającymi
Rzeczywiście, ponieważ ma normę jednostkową, mamy
oraz
W szczególności jest więc przekształceniem ortogonalnym, , czyli nie zmienia długości wektora,
Odbicia Householdera zastosujemy do przeprowadzenia danego wektora na kierunek innego niezerowego wektora, powiedzmy , tzn.
Załóżmy dla uproszczenia, że .
Aby wyznaczyć zauważmy, że
a ponieważ i to
W szczególności, jeśli jest pierwszym wersorem, powyższe wzory dają
gdzie
oraz
Otrzymaliśmy dwa odbicia Householdera przekształcające dany wektor na kierunek pierwszego wersora, w zależności od wybranego znaku przy . Ustalimy ten znak na plus gdy oraz na minus gdy , co pozwoli na obliczenie i z małym błędem względem w . Wtedy bowiem mamy
oraz , czyli zawsze dodajemy liczby tych samych znaków. Ponadto pierwsza współrzędna wektora jest równa , gdy , a jeśli .
Rozkład QR
Odbić Householdera można użyć do rozkładu macierzy na iloczyn ortogonalno-trójkątny.
Niech , gdzie są wektorami-kolumnami macierzy . Wybierzmy pierwsze odbicie Householdera tak, aby przekształcało pierwszy wektor-kolumnę macierzy na kierunek . Efektem pomnożenia macierzy z lewej strony przez będzie wtedy macierz
w której pierwsza kolumna ma niezerową tylko pierwszą współrzędną. W następnym kroku wybieramy drugie przekształcenie Householdera wymiaru tak, aby przeprowadzało wektor na kierunek pierwszego wersora w . Rozszerzając do wektora przez dodanie zera jako pierwszej współrzędnej, , otrzymujemy przekształcenie (macierz) Householdera w postaci
Pomnożenie macierzy z lewej strony przez spowoduje teraz wyzerowanie drugiej kolumny macierzy pod elementem , przy czym pierwszy wiersz i pierwsza kolumna pozostaną niezmienione. Postępując tak dalej razy (albo razy gdy ) otrzymujemy
gdzie jest uogólnioną macierzą trójkątną górną, tzn. dla . Stąd, podstawiając , dostajemy rozkład macierzy na iloczyn ortogonalno-trójkątny
Rzeczywiście, macierz jest ortogonalna, bo
Dyspunując rozkładem QR, zadanie wygładzania liniowego można rozwiązać następująco. Ponieważ mnożenie przez macierz ortogonalną nie zmienia normy drugiej wektora, mamy
gdzie . Rozbijając wektor na , gdzie i , oraz macierz na
gdzie jest macierzą trójkątną górną, a jest macierzą zerową wymiaru , otrzymujemy
Rozwiązanie zadania wygładzania jest więc rozwiązaniem układu liniowego trójkątnego,
oraz .
Zastanówmy się nad praktyczną realizacją tego algorytmu. Każde z kolejnych przekształceń Householdera wyznaczamy przez obliczenie oraz współrzędnych wektora . Wektor ten ma tylko współrzędnych niezerowych, a ponadto dla . Dzięki takiej reprezentacji , mnożenia możemy dla dowolnego realizować według wzoru
gdzie .
Uwzględnizjąc obecność zerowych elementów w , przejście od macierzy do kosztuje rzędu operacji arytmetycznych i obliczenie jednego pierwiastka kwadratowego. Cały rozkład kosztuje więc rzędu (dla dużych i )
operacji arytmetycznych i pierwiastków kwadratowych. Zauważmy, że w przypadku , a więc dla kwadratowego układu równań, koszt ten wynosi i jest dwa razy większy od kosztu eliminacji Gaussa.
Implementacja
Cała informacja o przekształceniu Householdera znajduje się w wektorze oraz czynniku skalującym --- i w ten sposób najwygodniej przechowywać macierz Householdera. W żadnym miejscu algorytmu nie będzie nam potrzebne nic ponad umiejętność mnożenia zadanego wektora przez macierz Householdera .
Nie popełnijmy jednak częstego błędu, prostodusznie implementując to mnożenie (przykładowo, w Octave) jako
H = eye(length(u)) - (u*u') / <math>\gamma</math>; y = H*x;
Gdybyśmy użyli takiej implementacji, potrzebowalibyśmy aż miejsc w pamięci (chociaż, przypomnijmy raz jeszcze, cała informacja o to tylko liczb). Ponadto, mnożenie przez macierz to aż działań arytmetycznych.
Aby znacznie lepiej skorzystać z bardzo specyficznej postaci macierzy , która jest po prostu zaburzeniem macierzy identyczności macierzą rzędu co najwyżej 1, wystarczy w odpowiednim miejscu wstawić nawiasy:
Stąd prawidłowa implementacja mnożenia przez macierz Householdera:
<math>\omega</math> = u'*x; y = x - <math>\frac{\omega}{\gamma}</math>*u;
Tym razem wcale nie potrzeba dodatkowej pamięci, a koszt algorytmu jest liniowy(!) względem , a więc uzyskaliśmu -krotne przyspieszenie w porównaniu z poprzednim!
Jest to całkiem typowe w numeryce:
Optymalizacja kodu źródłowego może być źródłem dużego przyspieszenia programu numerycznego. Ale największe przyspieszenie zazwyczaj jest efektem restrukturyzacji całego algorytmu (lub wręcz jego zmiany).
Uwarunkowanie
Łatwo domyślać się, że uwarunkowanie zadania wygładzania będzie miało jakieś cechy podobieństwa do uwarunkowania zadania rozwiązywania układu równań liniowych. Ale są także różnice, gdyż, w przeciwieństwie do układu równań liniowych, wrażliwość rozwiązania na zaburzenia będzie zależna nie tylko od samej macierzy układu, ale także od prawej strony.
Najpierw jednak musimy rozszerzyć pojęcie uwarunkowania macierzy na macierze prostokątne.
Definicja Uwarunkowanie macierzy prostokątnej w normie euklidesowej
Niech będzie zbiorem wartości własnych macierzy . Definiujemy
(Jeśli w mianowniku pojawiłoby się zero, kładziemy ).
Zauważmy, że jest to rozszerzenie definicji zgodne z tym, co wcześniej definiowaliśmy dla macierzy kwadratowych.
Twierdzenie O uwarunkowaniu zadania wygładzania liniowego
Niech będzie rozwiązaniem zadania najmniejszych kwadratów dla niezerowej prawej strony ,
przy czym zakładamy, że
gdzie jest dostatecznie małe.
Oznaczmy
--- będzie to miara, jak bardzo jesteśmy w stanie zminimalizować resztę w oryginalnym zadaniu.
Wtedy
Generalnie więc, jeśli reszta jest mała, wrażliwość na zaburzenia jest na poziomie . Ale jeśli reszta jest duża (tzn. prawa strona jest taka, że nie można dobrze spełnić równania w sensie średniokwadratowym), wtedy wrażliwość może być daleko większa.
Wniosek
W przypadku, gdy , zdawać by się mogło --- zgodnie z popularnym, acz błędnym, jak za chwilę się okaże, poglądem --- że użycie układu równań normalnych jest najszybszym algorytmem, a skoro tak, to powinno dawać najmniejszą "akumulację błędu zaokrągleń". Tymczasem widzimy, że jest sens rozwiązywać nasze zadanie poprzez układ równań normalnych tylko wtedy, gdy reszta rozwiązania jest duża. W przeciwnym wypadku, gdy , rozwiązanie obliczone (kosztowniejszym) rozkładem QR będzie miało błąd na poziomie , a tymczasem rozwiązanie wyznaczone z układu równań normalnych będzie obarczone błędem na poziomie .
Biblioteki
W Octave, zadanie najmniejszych kwadratów rozwiązujemy praktycznie tak samo, jak równanie liniowe:
x = A \ b;
Dla zadania najmniejszych kwadratów mamy dwie podstawowe funkcje LAPACKa: DGELS
, która rozwiązuje dokładnie zadanie takie, jak postawiliśmy w wykładzie, to znaczy w przypadku, gdy macierz jest pełnego rzędu --- wykorzystując rozkład QR, który omówiliśmy.
Natomiast dla przypadku, gdy macierz nie jest pełnego rzędu, działa funkcja DGELSS
. Wówczas, co łatwo sprawdzić, zadanie najmniejszych kwadratów tak, jak je postawiliśmy, nie musi mieć jednoznacznego rozwiązania. Jednak jeśli dołożyć wymaganie, by znalezione rozwiązanie miało minimalną normę euklidesową spośród wszystkich spełniających warunek , to wtedy takie rozwiązanie jest już jedyne. Jednakże dla takiego zadania rozkład QR jest już niewystarczający i stosuje się inny rozkład, tzw. SVD, który wykracza poza ramy naszego wykładu.
Funkcje biblioteczne rozwiązujące zadanie wygładzania liniowego są oczywistym składnikiem wszystkich szanujących się pakietów statystycznych.
Literatura
W celu dogłębnego zapoznania się z omawianym na wykładzie materiałem, przeczytaj rozdział 5.3 w
- D. Kincaid, W. Cheney Analiza numeryczna, Wydawnictwa Naukowo-Techniczne, Warszawa 2006, ISBN 83-204-3078-X.
Bardzo dużo na temat rozwiązywania liniowego zadania najmniejszych kwadratów można dowiedzieć się z książki
- A. Kiełbasiński, H. Schwetlick, Numeryczna algebra liniowa, Wydawnictwa Naukowo-Techniczne, Warszawa, 1992.