MN12LAB: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „,↵</math>” na „</math>,” |
|||
(Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 19: | Linia 19: | ||
<div class="exercise"> | <div class="exercise"> | ||
Inną, oprócz sprowadzenia do układu równań normalnych, metodą transformacji zadania najmniejszych kwadratów do zadania rozwiązywania układu równań z macierzą kwadratową, jest zapisanie w formie układu ''dwóch układów równań'' (sic!). Dokładniej, możemy scharakteryzować zadanie wygładzania jako znalezienie ''dwóch wektorów'' <math> | Inną, oprócz sprowadzenia do układu równań normalnych, metodą transformacji zadania najmniejszych kwadratów do zadania rozwiązywania układu równań z macierzą kwadratową, jest zapisanie w formie układu ''dwóch układów równań'' (sic!). Dokładniej, możemy scharakteryzować zadanie wygładzania jako znalezienie ''dwóch wektorów'' <math>x\in R^n</math> oraz <math>r\in R^m</math> takich, że | ||
<center><math> | <center><math>\begin{align}d r &= b - Ax,\\ | ||
A^T r &= 0. | A^T r &= 0. | ||
\end{align}</math></center> | \end{align}</math></center> | ||
Linia 36: | Linia 36: | ||
Macierzowo, układ zapisuje się w postaci | Macierzowo, układ zapisuje się w postaci | ||
<center><math> | <center><math>\begin{pmatrix} | ||
I & A \\ | I & A \\ | ||
A^T & 0 | A^T & 0 | ||
Linia 46: | Linia 46: | ||
\begin{pmatrix} | \begin{pmatrix} | ||
b \\ 0 | b \\ 0 | ||
\end{pmatrix} | \end{pmatrix} </math></center> | ||
</math></center> | |||
Koszt rozwiązywania takiego układu równań to oczywiście <math> | Koszt rozwiązywania takiego układu równań to oczywiście <math>O((m+n)^3)</math>, dużo więcej niż innych poznanych metod. Ale zalety takiego podejścia mogą objawić się, gdy macierz <math>A</math> jest rozrzedzona wielkiego wymiaru (i <math>m\approx n</math>), bo wtedy możemy zastosować znany nam arsenał metod iteracyjnych. | ||
</div></div></div> | </div></div></div> | ||
Linia 58: | Linia 57: | ||
W twierdzeniu o uwarunkowaniu zadania najmniejszych kwadratów mówi się, że | W twierdzeniu o uwarunkowaniu zadania najmniejszych kwadratów mówi się, że | ||
<center><math> | <center><math>\frac{||b-Ax^*||_2}{||b||_2} < 1</math></center> | ||
</math></center> | |||
Wyjaśnij, dlaczego rzeczywiście tak jest. | Wyjaśnij, dlaczego rzeczywiście tak jest. | ||
Linia 65: | Linia 63: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | ||
Rozwiązanie zadania najmniejszych kwadratów minimalizuje <math> | Rozwiązanie zadania najmniejszych kwadratów minimalizuje <math>||b-Ax||_2</math>, tzn. dla każdego <math>x</math>, | ||
<center><math> | <center><math>||b-Ax^*||_2 \leq ||b-Ax||_2</math></center> | ||
</math></center> | |||
W szczególności dla <math> | W szczególności dla <math>x=0</math> dostajemy <math>||b-Ax^*||_2 \leq ||b-A\cdot 0||_2 = ||b||_2</math>. Ostra nierówność wynika z jednoznaczności: <math>A^TAx^* = A^Tb \neq 0</math>, stąd <math>x^*\neq 0</math>. | ||
</div></div></div> | </div></div></div> | ||
Linia 77: | Linia 74: | ||
<div class="exercise"> | <div class="exercise"> | ||
Znajdź <math> | Znajdź <math>a</math> i <math>b</math> takie, że funkcja <math>f(x) = a + b\, e^{-x}</math> minimalizuje błąd średniokwadratowy dla danych: | ||
{| border=1 | {| border=1 | ||
Linia 105: | Linia 102: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka </span><div class="mw-collapsible-content" style="display:none"> | ||
<div style="font-size:smaller; background-color:#f9fff9; padding: 1em"> Musisz zadanie wyrazić w terminach liniowego zadania najmniejszych kwadratów. Zauważ, że <math> | <div style="font-size:smaller; background-color:#f9fff9; padding: 1em"> Musisz zadanie wyrazić w terminach liniowego zadania najmniejszych kwadratów. Zauważ, że <math>x_{i+1} = x_i+1.25</math>. </div> | ||
</div></div> | </div></div> | ||
Linia 112: | Linia 109: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | ||
Ma być | Ma być | ||
<center><math> | <center><math> | ||
\sum_{i=0}^{10} |a+b\, e^{-x_i} - f(x_i)|^2 \rightarrow \min! | \sum_{i=0}^{10} |a+b\, e^{-x_i} - f(x_i)|^2 \rightarrow \min! | ||
</math></center> | </math></center> | ||
A więc, macierzowo, | A więc, macierzowo, | ||
<center><math> | <center><math> | ||
|| | || | ||
\begin{pmatrix} | \begin{pmatrix} | ||
Linia 141: | Linia 138: | ||
[[Image:MNlznk.png|thumb|550px|center|Wyznaczone najlepsze dopasowanie naszego modelu do danych. ]] | [[Image:MNlznk.png|thumb|550px|center|Wyznaczone najlepsze dopasowanie naszego modelu do danych. ]] | ||
Jak widzisz, dane punkty pasują --- za wyjątkiem "dziwnego" <math> | Jak widzisz, dane punkty pasują --- za wyjątkiem "dziwnego" <math>x=7.5</math> --- do modelu <math>f^*(x) = 3 + e^{-x}</math>. Duże i niespodziewane zaburzenie w <math>x=7.5</math> spowodowało, że dopasowanie w sensie najmniejszych kwadratów ma istotnie inne parametry od <math>f^*</math>. Sposobem zmniejszenia wpływu takiego zaburzenia na ogólny wynik może być wprowadzenie do zadania wag (relatywnie małej dla <math>x=7.5</math>), i minimalizacja <math>\sum_{i=0}^{10} \omega_i\cdot |a+b\, e^{-x_i} - f(x_i)|^2 \rightarrow \min!</math>. Zobacz też następne zadanie. | ||
</div></div></div> | </div></div></div> | ||
Linia 149: | Linia 146: | ||
<div class="exercise"> | <div class="exercise"> | ||
Niech <math> | Niech <math>A</math> będzie macierzą <math>m\times n</math> pełnego rzędu, przy czym <math>m\geq n</math>. | ||
Podaj algorytm rozwiązywania ważonego zadania najmniejszych kwadratów: | Podaj algorytm rozwiązywania ważonego zadania najmniejszych kwadratów: | ||
<center><math> | <center><math>\sum_{i=1}^n\omega_i|b_i - (Ax)_i|^2 \rightarrow \min!</math>,</center> | ||
</math></center> | |||
gdzie zakładamy, że <math> | gdzie zakładamy, że <math>0 < \omega_i \leq 1</math> są danymi wagami. (Gdy wszystkie <math>\omega_i = 1</math>, zadanie sprowadza się do zwykłego zadania najmniejszych kwadratów.) | ||
</div></div> | </div></div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | ||
Innymi słowy, szukamy <math> | Innymi słowy, szukamy <math>x</math>, minimalizującego | ||
<center><math> | <center><math>\sum_{i=1}^n |\sqrt{\omega_i}(b_i - (Ax)_i)|^2 = | ||
\sum_{i=1}^n |(\widetilde{b}_i - (\widetilde{A}x)_i)|^2 | \sum_{i=1}^n |(\widetilde{b}_i - (\widetilde{A}x)_i)|^2</math>,</center> | ||
</math></center> | |||
gdzie <math> | gdzie <math>\widetilde{b} = Db</math>, <math>\widetilde{A} = DA</math> i | ||
<center><math> | <center><math>D = \begin{pmatrix} | ||
\omega_1 & & \\ | \omega_1 & & \\ | ||
& \ddots & \\ | & \ddots & \\ | ||
& & \omega_n | & & \omega_n | ||
\end{pmatrix} | \end{pmatrix} </math></center> | ||
</math></center> | |||
A więc, zadanie sprowadza się do zadania najmniejszych kwadratów bez wag dla zmodyfikowanej macierzy i wektora prawej strony, <math> | A więc, zadanie sprowadza się do zadania najmniejszych kwadratów bez wag dla zmodyfikowanej macierzy i wektora prawej strony, <math>||\widetilde{b}-\widetilde{A}x||_2 \rightarrow \min!</math>. | ||
</div></div></div> | </div></div></div> | ||
Linia 181: | Linia 175: | ||
<div class="exercise"> | <div class="exercise"> | ||
Opisz szczegółowo sposób rozwiązywania układu <math> | Opisz szczegółowo sposób rozwiązywania układu <math>N</math> równań z <math>N</math> niewiadomymi | ||
<center><math> | <center><math>Ax = b</math>,</center> | ||
</math></center> | |||
korzystający z rozkładu QR metodą Householdera. | korzystający z rozkładu QR metodą Householdera. | ||
Linia 190: | Linia 183: | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | <div class="mw-collapsible mw-made=collapsible mw-collapsed"><span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie </span><div class="mw-collapsible-content" style="display:none"><div style="margin-left:1em"> | ||
Stosując rozkład QR metodą Householdera do macierzy <math> | Stosując rozkład QR metodą Householdera do macierzy <math>A</math>, dostajemy w rezultacie | ||
<center><math> | <center><math>A = QR = H_{N-1}\cdot H_{N-2} \cdots H_1 R</math></center> | ||
</math></center> | |||
Ponieważ <math> | Ponieważ <math>H_j^{-1} = H_j^T = H_j</math>, to <math>Q^{-1} = H_1 \cdots H_{N-2}\cdot H_{N-1}</math>. Dlatego | ||
<center><math> | <center><math>x = A^{-1}b = R^{-1}\, Q^{-1} = R^{-1} \cdot H_1 \cdots H_{N-2}\cdot H_{N-1} b</math></center> | ||
</math></center> | |||
Powyższą równość implementujemy korzystając z operacji mnożenia <math> | Powyższą równość implementujemy korzystając z operacji mnożenia <math>H_j</math>, opisanej w poprzednim zadaniu. W szczególności pamiętamy, by nie wyznaczać pełnej macierzy <math>H_j</math>. Pseudokod procedury byłby następujący: | ||
{{algorytm|Metoda rozwiązywania układu równań przy użyciu przekształceń Householdera|Metoda rozwiązywania układu równań przy użyciu przekształceń Householdera| | {{algorytm|Metoda rozwiązywania układu równań przy użyciu przekształceń Householdera|Metoda rozwiązywania układu równań przy użyciu przekształceń Householdera| | ||
<pre>wyznacz macierze Householdera <math> | <pre>wyznacz macierze Householdera <math>H_1,\ldots, H_{N-1}</math> oraz macierz trójkątną <math>R</math>, | ||
okreslające rozkład QR macierzy <math> | okreslające rozkład QR macierzy <math>A</math>; | ||
y = b; | y = b; | ||
for i = 1:N-1 | for i = 1:N-1 | ||
y = <math> | y = <math>H_{N-i}</math>*y; | ||
end | end | ||
rozwiąż układ z macierzą trójkątną <math> | rozwiąż układ z macierzą trójkątną <math>Rx = y</math>; | ||
</pre>}} | </pre>}} | ||
Linia 220: | Linia 211: | ||
<div class="exercise"> | <div class="exercise"> | ||
Innym sposobem wyzerowania wybranych elementów zadanego wektora <math> | Innym sposobem wyzerowania wybranych elementów zadanego wektora <math>x</math> za pomocą przekształceń ortogonalnych jest zastosowanie tzw. <strong>obrotów Givensa</strong>, | ||
<center><math> | <center><math>\begin{pmatrix} | ||
c & s \\ | c & s \\ | ||
-s & c | -s & c | ||
Linia 233: | Linia 224: | ||
\begin{pmatrix} | \begin{pmatrix} | ||
1 \\ 0 | 1 \\ 0 | ||
\end{pmatrix} | \end{pmatrix} </math></center> | ||
</math></center> | |||
Wskaż jak dobrać <math> | Wskaż jak dobrać <math>c</math> i <math>s</math> tak, by macierz | ||
<center><math> | <center><math>G = \begin{pmatrix} | ||
c & s \\ | c & s \\ | ||
-s & c | -s & c | ||
Linia 244: | Linia 234: | ||
</math></center> | </math></center> | ||
była ortogonalna i przekształcała <math> | była ortogonalna i przekształcała <math>x</math> w zadany wyżej sposób. Jak zastosować ''sekwencję'' obrotów Givensa tak, by zadany wektor <math>N</math>-wymiarowy przeprowadzić na wektor o kierunku wektora jednostkowego? Porównaj koszt tej operacji z kosztem przekształcenia Householdera. Kiedy opłaca się stosować obroty Givensa w miejsce odbić Householdera? | ||
</div></div> | </div></div> | ||
Linia 250: | Linia 240: | ||
Prosty rachunek pokazuje, że | Prosty rachunek pokazuje, że | ||
<center><math> | <center><math>c = \frac{x_1}{||x||_2}, \quad s = \frac{x_2}{||x||_2}</math></center> | ||
</math></center> | |||
(Zauważ, że <math> | (Zauważ, że <math>c^2 + s^2 = 1</math>, więc <math>G</math> faktycznie można traktować jako macierz obrotu o kąt <math>\theta</math> taki, że <math>c=\cos(\theta)</math> i <math>s=\sin(\theta)</math>.) | ||
Jak widać, występuje tu zadanie obliczania normy euklidesowej i w związku z tym ryzyko niepotrzebnego nadmiaru bądź niedomiaru. Dlatego w praktyce obliczeniowej rozpatrujemy dwa przypadki: | Jak widać, występuje tu zadanie obliczania normy euklidesowej i w związku z tym ryzyko niepotrzebnego nadmiaru bądź niedomiaru. Dlatego w praktyce obliczeniowej rozpatrujemy dwa przypadki: | ||
{{algorytm|Wyznaczenie obrotu Givensa|Wyznaczenie obrotu Givensa| | {{algorytm|Wyznaczenie obrotu Givensa|Wyznaczenie obrotu Givensa| | ||
<pre>if ( <math> | <pre>if ( <math>|x_1|</math> > <math>|x_2|</math> ) | ||
{ | { | ||
t = <math> | t = <math>x_2</math> / <math>x_1</math>; | ||
c = 1 / sqrt(1+t*t); | c = 1 / sqrt(1+t*t); | ||
s = t * c; | s = t * c; | ||
Linia 266: | Linia 255: | ||
else | else | ||
{ | { | ||
t = <math> | t = <math>x_1</math> / <math>x_2</math>; | ||
s = 1 / sqrt(1+t*t); | s = 1 / sqrt(1+t*t); | ||
c = t * s; | c = t * s; | ||
Linia 272: | Linia 261: | ||
</pre>}} | </pre>}} | ||
Chcąc obrotami Givensa wyzerować wszystkie --- z wyjątkiem pierwszej --- współrzędne danego wektora <math> | Chcąc obrotami Givensa wyzerować wszystkie --- z wyjątkiem pierwszej --- współrzędne danego wektora <math>N</math>-wymiarowego, musimy zastosować sekwencję obrotów dotyczących kolejno: pierwszej i drugiej współrzędnej, pierwszej i trzeciej, itp. Po <math>N-1</math> krokach dostaniemy wektor, o który nam chodziło. | ||
Koszt jednego obrotu Givensa to 4 działania arytmetyczne i jedno pierwiastkowanie, zatem koszt wyzerowania wszystkich <math> | Koszt jednego obrotu Givensa to 4 działania arytmetyczne i jedno pierwiastkowanie, zatem koszt wyzerowania wszystkich <math>N-1</math> (tzn. oprócz pierwszej) współrzędnych wektora jest równy <math>4N-4</math> działań arytmetycznych oraz <math>N-1</math> pierwiastkowań, a więc jest wyższy niż analogicznego przekształcenia Householdera (ech, te pierwiastki!...). Istnieje jednak sprytna modyfikacja, tzw. algorytm Gentlemana, praktycznie zrównujący koszty implementacji sekwencji obrotów Givensa i odbić Householdera. | ||
Ponadto, jest ważna klasa macierzy, dla których stosowanie obrotów Givensa ''jest znacznie tańsze'' od odbić Householdera: gdy w wektorze <math> | Ponadto, jest ważna klasa macierzy, dla których stosowanie obrotów Givensa ''jest znacznie tańsze'' od odbić Householdera: gdy w wektorze <math>x</math> już na starcie jest wiele współrzędnych zerowych, bo wtedy wystarczy obrotami Givensa wyzerować pozostałe niezerowe współrzędne. | ||
Takim przypadkiem jest np. konstrukcja rozkładu QR dla macierzy <strong>Hessenberga</strong>, czyli macierzy górnej trójkątnej uzupełnionej o jedną niezerową poddiagonalę --- precyzyjniej, dla takiej macierzy <math> | Takim przypadkiem jest np. konstrukcja rozkładu QR dla macierzy <strong>Hessenberga</strong>, czyli macierzy górnej trójkątnej uzupełnionej o jedną niezerową poddiagonalę --- precyzyjniej, dla takiej macierzy <math>A</math>, której elementy spełniają <math>a_{ij} = 0</math> dla <math>i-j > 1</math>. Rzeczywiście, wtedy w każdej kolumnie wystarczy wyzerować tylko ''jeden'' element! Zadanie znalezienia rozkładu QR niedużej i prawie-kwadratowej macierzy Hessenberga jest częścią składową [[MN08#GMRES|metody GMRES]] iteracyjnego rozwiązywania wielkich układów równań liniowych z macierzą niesymetryczną. | ||
</div></div></div> | </div></div></div> |
Aktualna wersja na dzień 21:50, 11 wrz 2023
Liniowe zadanie najmniejszych kwadratów
<<< Powrót do strony głównej przedmiotu Metody numeryczne
Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
Ćwiczenie: Rozszerzony układ równań dla zadania najmniejszych kwadratów
Inną, oprócz sprowadzenia do układu równań normalnych, metodą transformacji zadania najmniejszych kwadratów do zadania rozwiązywania układu równań z macierzą kwadratową, jest zapisanie w formie układu dwóch układów równań (sic!). Dokładniej, możemy scharakteryzować zadanie wygładzania jako znalezienie dwóch wektorów oraz takich, że
Zapisz macierzowo ten układ równań. Wskaż, kiedy mogłoby być opłacalne stosowanie takiego podejścia. Porównaj koszt rozwiązania tego układu wprost metodą eliminacji Gaussa, z kosztem innych metod rozwiązywania zadania najmniejszych kwadratów.
Ćwiczenie
W twierdzeniu o uwarunkowaniu zadania najmniejszych kwadratów mówi się, że
Wyjaśnij, dlaczego rzeczywiście tak jest.
Ćwiczenie: Dopasowanie liniowych parametrów funkcji do danych
Znajdź i takie, że funkcja minimalizuje błąd średniokwadratowy dla danych:
x | f(x) |
0.00 | 4.00000000000000e+00 |
1.25 | 3.28650479686019e+00 |
2.50 | 3.08208499862390e+00 |
3.75 | 3.02351774585601e+00 |
5.00 | 3.00673794699909e+00 |
6.25 | 3.00193045413623e+00 |
7.50 | 0.00055308437015e+00 |
8.75 | 3.00015846132512e+00 |
10.00 | 3.00004539992976e+00 |
Ćwiczenie: Ważone zadanie najmniejszych kwadratów
Niech będzie macierzą pełnego rzędu, przy czym . Podaj algorytm rozwiązywania ważonego zadania najmniejszych kwadratów:
gdzie zakładamy, że są danymi wagami. (Gdy wszystkie , zadanie sprowadza się do zwykłego zadania najmniejszych kwadratów.)
Ćwiczenie
Opisz szczegółowo sposób rozwiązywania układu równań z niewiadomymi
korzystający z rozkładu QR metodą Householdera.
Ćwiczenie: Obroty Givensa
Innym sposobem wyzerowania wybranych elementów zadanego wektora za pomocą przekształceń ortogonalnych jest zastosowanie tzw. obrotów Givensa,
Wskaż jak dobrać i tak, by macierz
była ortogonalna i przekształcała w zadany wyżej sposób. Jak zastosować sekwencję obrotów Givensa tak, by zadany wektor -wymiarowy przeprowadzić na wektor o kierunku wektora jednostkowego? Porównaj koszt tej operacji z kosztem przekształcenia Householdera. Kiedy opłaca się stosować obroty Givensa w miejsce odbić Householdera?