MN12LAB: Różnice pomiędzy wersjami
m MN Ćwiczenia 12 moved to MN12LAB |
Nie podano opisu zmian |
||
Linia 1: | Linia 1: | ||
<!-- | |||
Konwertowane z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/ pawlik1/latex2mediawiki.php. | |||
Niezb�dne rozszerzenia i modyfikacje oryginalnego latex2mediawiki | |||
wprowadzi� przykry@mimuw.edu.pl | |||
--> | |||
=Liniowe zadanie najmniejszych kwadratów= | |||
{{powrot |Metody numeryczne | do strony głównej | |||
przedmiotu <strong>Metody numeryczne</strong>}} | |||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
Oglądaj wskazówki i rozwiązania __SHOWALL__<br> | |||
Ukryj wskazówki i rozwiązania __HIDEALL__ | |||
</div> | |||
<div style="margin-top:1em; padding-top,padding-bottom:1em;"> | |||
<span style="display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:#1A6ABF;">Ćwiczenie: Rozszerzony układ równań dla zadania najmniejszych kwadratów</span> | |||
<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>\displaystyle x\in R^n</math> oraz <math>\displaystyle r\in R^m</math> takich, że | |||
<center><math>\displaystyle \aligned r &= b - Ax,\\ | |||
A^T r &= 0. | |||
\endaligned</math></center> | |||
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. | |||
<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"> Układy równań można rozwiązywać nie tylko eliminacją Gaussa... </div> | |||
</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"> | |||
Macierzowo, układ zapisuje się w postaci | |||
<center><math>\displaystyle \begin{pmatrix} | |||
I & A \\ | |||
A^T & 0 | |||
\end{pmatrix} | |||
\begin{pmatrix} | |||
r \\ x | |||
\end{pmatrix} | |||
= | |||
\begin{pmatrix} | |||
b \\ 0 | |||
\end{pmatrix} . | |||
</math></center> | |||
Koszt rozwiązywania takiego układu równań to oczywiście <math>\displaystyle O((m+n)^3)</math>, dużo więcej niż innych poznanych metod. Ale zalety takiego podejścia mogą objawić się, gdy macierz <math>\displaystyle A</math> jest rozrzedzona wielkiego wymiaru (i <math>\displaystyle m\approx n</math>), bo wtedy możemy zastosować znany nam arsenał metod iteracyjnych. | |||
</div></div></div> | |||
<div style="margin-top:1em; padding-top,padding-bottom:1em;"> | |||
<span style="display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:#1A6ABF;">Ćwiczenie</span> | |||
<div class="exercise"> | |||
W twierdzeniu o uwarunkowaniu zadania najmniejszych kwadratów mówi się, że | |||
<center><math>\displaystyle \frac{||b-Ax^*||_2}{||b||_2} < 1. | |||
</math></center> | |||
Wyjaśnij, dlaczego rzeczywiście tak jest. | |||
</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"> | |||
Rozwiązanie zadania najmniejszych kwadratów minimalizuje <math>\displaystyle ||b-Ax||_2</math>, tzn. dla każdego <math>\displaystyle x</math>, | |||
<center><math>\displaystyle ||b-Ax^*||_2 \leq ||b-Ax||_2. | |||
</math></center> | |||
W szczególności dla <math>\displaystyle x=0</math> dostajemy <math>\displaystyle ||b-Ax^*||_2 \leq ||b-A\cdot 0||_2 = ||b||_2</math>. Ostra nierówność wynika z jednoznaczności: <math>\displaystyle A^TAx^* = A^Tb \neq 0</math>, stąd <math>\displaystyle x^*\neq 0</math>. | |||
</div></div></div> | |||
<div style="margin-top:1em; padding-top,padding-bottom:1em;"> | |||
<span style="display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:#1A6ABF;">Ćwiczenie: Dopasowanie liniowych parametrów funkcji do danych</span> | |||
<div class="exercise"> | |||
Znajdź <math>\displaystyle a</math> i <math>\displaystyle b</math> takie, że funkcja <math>\displaystyle f(x) = a + b\, e^{-x}</math> minimalizuje błąd średniokwadratowy dla danych: | |||
{| border=1 | |||
|+ <span style="font-variant:small-caps"> </span> | |||
|- | |||
| 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 | |||
|} | |||
<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>\displaystyle x_{i+1} = x_i+1.25</math>. </div> | |||
</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"> | |||
Ma być | |||
<center><math>\displaystyle | |||
\sum_{i=0}^{10} |a+b\, e^{-x_i} - f(x_i)|^2 \rightarrow \min! | |||
</math></center> | |||
A więc, macierzowo, | |||
<center><math>\displaystyle | |||
|| | |||
\begin{pmatrix} | |||
1 & e^{-x_0}\\ | |||
\vdots\\ | |||
1 & e^{-x_{10}} | |||
\end{pmatrix} | |||
\cdot \begin{pmatrix} | |||
a \\ | |||
b | |||
\end{pmatrix} | |||
- | |||
\begin{pmatrix} | |||
f(x_0)\\ | |||
\vdots\\ | |||
f(x_10) | |||
\end{pmatrix} | |||
||_2^2 \rightarrow \min! | |||
</math></center> | |||
A więc mamy sformułowane zadanie w języku liniowego zadania najmniejszych kwadratów. ''Reszta jest liczeniem...'' | |||
[[Image:MNlznk.png|thumb|550px|center|Wyznaczone najlepsze dopasowanie naszego modelu do danych. Jak widzisz, dane punkty pasują --- za wyjątkiem "dziwnego" <math>\displaystyle x=7.5</math> --- do modelu <math>\displaystyle f^*(x) = 3 + e^{-x}</math>. Duże i niespodziewane zaburzenie w <math>\displaystyle x=7.5</math> spowodowało, że dopasowanie w sensie najmniejszych kwadratów ma istotnie inne parametry od <math>\displaystyle f^*</math>. Sposobem zmniejszenia wpływu takiego zaburzenia na ogólny wynik może być wprowadzenie do zadania wag (relatywnie małej dla <math>\displaystyle x=7.5</math>), i minimalizacja <math>\displaystyle \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 style="margin-top:1em; padding-top,padding-bottom:1em;"> | |||
<span style="display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:#1A6ABF;">Ćwiczenie: Ważone zadanie najmniejszych kwadratów</span> | |||
<div class="exercise"> | |||
Niech <math>\displaystyle A</math> będzie macierzą <math>\displaystyle m\times n</math> pełnego rzędu, przy czym <math>\displaystyle m\geq n</math>. | |||
Podaj algorytm rozwiązywania ważonego zadania najmniejszych kwadratów: | |||
<center><math>\displaystyle \sum_{i=1}^n\omega_i|b_i - (Ax)_i|^2 \rightarrow \min!, | |||
</math></center> | |||
gdzie zakładamy, że <math>\displaystyle 0 < \omega_i \leq 1</math> są danymi wagami. (Gdy wszystkie <math>\displaystyle \omega_i = 1</math>, zadanie sprowadza się do zwykłego zadania najmniejszych kwadratów.) | |||
</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"> | |||
Innymi słowy, szukamy <math>\displaystyle x</math>, minimalizującego | |||
<center><math>\displaystyle \sum_{i=1}^n |\sqrt{\omega_i}(b_i - (Ax)_i)|^2 = | |||
\sum_{i=1}^n |(\widetilde{b}_i - (\widetilde{A}x)_i)|^2, | |||
</math></center> | |||
gdzie <math>\displaystyle \widetilde{b} = Db</math>, <math>\displaystyle \widetilde{A} = DA</math> i | |||
<center><math>\displaystyle D = \begin{pmatrix} | |||
\omega_1 & & \\ | |||
& \ddots & \\ | |||
& & \omega_n | |||
\end{pmatrix} . | |||
</math></center> | |||
A więc, zadanie sprowadza się do zadania najmniejszych kwadratów bez wag dla zmodyfikowanej macierzy i wektora prawej strony, <math>\displaystyle ||\widetilde{b}-\widetilde{A}x||_2 \rightarrow \min!</math>. | |||
</div></div></div> | |||
<div style="margin-top:1em; padding-top,padding-bottom:1em;"> | |||
<span style="display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:#1A6ABF;">Ćwiczenie</span> | |||
<div class="exercise"> | |||
Opisz szczegółowo sposób rozwiązywania układu <math>\displaystyle N</math> równań z <math>\displaystyle N</math> niewiadomymi | |||
<center><math>\displaystyle Ax = b, | |||
</math></center> | |||
korzystający z rozkładu QR metodą Householdera. | |||
</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"> | |||
Stosując rozkład QR metodą Householdera do macierzy <math>\displaystyle A</math>, dostajemy w rezultacie | |||
<center><math>\displaystyle A = QR = H_{N-1}\cdot H_{N-2} \cdots H_1 R. | |||
</math></center> | |||
Ponieważ <math>\displaystyle H_j^{-1} = H_j^T = H_j</math>, to <math>\displaystyle Q^{-1} = H_1 \cdots H_{N-2}\cdot H_{N-1}</math>. Dlatego | |||
<center><math>\displaystyle x = A^{-1}b = R^{-1}\, Q^{-1} = R^{-1} \cdot H_1 \cdots H_{N-2}\cdot H_{N-1} b. | |||
</math></center> | |||
Powyższą równość implementujemy korzystając z operacji mnożenia <math>\displaystyle H_j</math>, opisanej w poprzednim zadaniu. W szczególności pamiętamy, by nie wyznaczać pełnej macierzy <math>\displaystyle H_j</math>. Pseudokod procedury byłby następujący: | |||
{{algorytm||| | |||
<pre>\EATWSwyznacz macierze Householdera <math>\displaystyle H_1,\ldots, H_{N-1}</math> oraz macierz trójkątną <math>\displaystyle R</math>, | |||
okreslające rozkład QR macierzy <math>\displaystyle A</math>; | |||
y = b; | |||
for i = 1:N-1 | |||
y = <math>\displaystyle H_{N-i}</math>*y; | |||
end | |||
rozwiąż układ z macierzą trójkątną <math>\displaystyle Rx = y</math>; | |||
</pre>}} | |||
</div></div></div> | |||
<div style="margin-top:1em; padding-top,padding-bottom:1em;"> | |||
<span style="display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:#1A6ABF;">Ćwiczenie: Obroty Givensa</span> | |||
<div class="exercise"> | |||
Innym sposobem wyzerowania wybranych elementów zadanego wektora <math>\displaystyle x</math> za pomocą przekształceń ortogonalnych jest zastosowanie tzw. <strong>obrotów Givensa</strong>, | |||
<center><math>\displaystyle \begin{pmatrix} | |||
c & s \\ | |||
-s & c | |||
\end{pmatrix} | |||
\begin{pmatrix} | |||
x_1 \\ x_2 | |||
\end{pmatrix} | |||
= | |||
||x||_2 | |||
\begin{pmatrix} | |||
1 \\ 0 | |||
\end{pmatrix} . | |||
</math></center> | |||
Wskaż jak dobrać <math>\displaystyle c</math> i <math>\displaystyle s</math> tak, by macierz | |||
<center><math>\displaystyle G = \begin{pmatrix} | |||
c & s \\ | |||
-s & c | |||
\end{pmatrix} | |||
</math></center> | |||
była ortogonalna i przekształcała <math>\displaystyle x</math> w zadany wyżej sposób. Jak zastosować ''sekwencję'' obrotów Givensa tak, by zadany wektor <math>\displaystyle 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 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"> | |||
Prosty rachunek pokazuje, że | |||
<center><math>\displaystyle c = \frac{x_1}{||x||_2}, \quad s = \frac{x_2}{||x||_2}. | |||
</math></center> | |||
(Zauważ, że <math>\displaystyle c^2 + s^2 = 1</math>, więc <math>\displaystyle G</math> faktycznie można traktować jako macierz obrotu o kąt <math>\displaystyle \theta</math> taki, że <math>\displaystyle c=\cos(\theta)</math> i <math>\displaystyle 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: | |||
{{algorytm||| | |||
<pre>\EATWSif ( \PIPEREAD <math>\displaystyle x_1</math>\PIPEREAD > \PIPEREAD <math>\displaystyle x_2</math>\PIPEREAD ) | |||
{ | |||
t = <math>\displaystyle x_2</math> / <math>\displaystyle x_1</math>; | |||
c = 1 / sqrt(1+t*t); | |||
s = t * c; | |||
} | |||
else | |||
{ | |||
t = <math>\displaystyle x_1</math> / <math>\displaystyle x_2</math>; | |||
s = 1 / sqrt(1+t*t); | |||
c = t * s; | |||
} | |||
</pre>}} | |||
Chcąc obrotami Givensa wyzerować wszystkie --- z wyjątkiem pierwszej --- współrzędne danego wektora <math>\displaystyle N</math>-wymiarowego, musimy zastosować sekwencję obrotów dotyczących kolejno: pierwszej i drugiej współrzędnej, pierwszej i trzeciej, itp. Po <math>\displaystyle 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>\displaystyle N-1</math> (tzn. oprócz pierwszej) współrzędnych wektora jest równy <math>\displaystyle 4N-4</math> działań arytmetycznych oraz <math>\displaystyle 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>\displaystyle 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>\displaystyle A</math>, której elementy spełniają <math>\displaystyle a_{ij} = 0</math> dla <math>\displaystyle 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 style="margin-top:1em; padding-top,padding-bottom:1em;"> | |||
<span style="display: block; background-color:#fefeee; border-bottom: 1px solid #E5E5E5; line-height: 1.1em; padding-bottom: 0.2em; font-variant:small-caps; color:#1A6ABF;">Ćwiczenie</span> | |||
<div class="exercise"> | |||
Sprawdź eksperymentalnie, jaka jest różnica między numerycznie obliczonymi rozwiązaniami liniowego zadania najmniejszych kwadratów, obliczona z wykorzystaniem: | |||
* układu równań normalnych i algorytmu Cholesky'ego | |||
* rozkładu QR | |||
Testy przeprowadź na | |||
* losowych, nieosobliwych macierzach kwadratowych | |||
* macierzy Hilberta | |||
* losowych macierzach prostokątnych pełnego rzędu | |||
i dla wektora prawej strony | |||
* będącego kombinacją liniową kolumn macierzy | |||
* (prawie) ortogonalnego do wszystkich kolumn macierzy | |||
Zanim przystąpisz do eksperymentów, zapisz sobie, jakich wyników spodziewasz się w każdym z przypadków. | |||
</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"> | |||
Losowe macierze kwadratowe są z dużym prawdopodobieństwem dobrze uwarunkowane, więc dla obu metod rozwiązywania powinieneś spodziewać się małego błędu i w konsekwencji --- małych różnic pomiędzy metodami. | |||
Macierz Hilberta jest bardzo źle uwarunkowana, więc macierz normalna będzie jeszcze gorzej. Spodziewamy się dużych błędów dla obu metod, ale dla rozwiązania metodą QR --- trochę mniejszego. | |||
Jeśli chodzi o macierze prostokątne, to zgodnie z twierdzeniem o uwarunkowaniu, dla prawej strony będącej kombinacją liniową kolumn, błąd QR powinien być mały, a dla metody równań normalnych --- niekoniecznie. Dla drugiego wyboru prawej strony, powinniśmy dostać rozwiązania obarczone podobnym --- dużym --- błędem, różnice między nimi mogą więc też być duże... | |||
A oto przykładowy eksperyment: | |||
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>N=10; | |||
disp('Losowa kwadratowa'); | |||
A = rand(N,N); | |||
f = rand(N,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A \ f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Hilberta kwadratowa'); | |||
A = hilb(N); | |||
f = rand(N,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Losowa N x M, małe residuum'); | |||
M = 3; | |||
A = rand(N,M); | |||
f = A*rand(M,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Losowa N x M, duże residuum'); | |||
kernel = null(A'); | |||
f = kernel(:,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A)\N =10; | |||
disp('Losowa kwadratowa'); | |||
A = rand(N,N); | |||
f = rand(N,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Hilberta kwadratowa'); | |||
A = hilb(N); | |||
f = rand(N,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Losowa N x M, małe residuum'); | |||
M = 3; | |||
A = rand(N,M); | |||
f = A*rand(M,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Losowa N x M, duże residuum'); | |||
kernel = null(A'); | |||
f = kernel(:,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Losowa N x M, małe residuum, duże uwarunkowanie'); | |||
M = 4; | |||
A = rand(N,M); | |||
A(:,1) = A(:,2)+100*sqrt(eps)*rand(N,1); | |||
f = A*rand(M,1)+sqrt(eps)*rand(N,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
(A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
disp('Losowa N x M, małe residuum, duże uwarunkowanie'); | |||
M = 4; | |||
A = rand(N,M); | |||
A(:,1) = A(:,2)+100*sqrt(eps)*rand(N,1); | |||
f = A*rand(M,1)+sqrt(eps)*rand(N,1); | |||
disp("Uwarunkowanie A i A'A"); | |||
x = A\f; cond(A) | |||
xn = (A'*A) \ (A'*f); cond(A'*A) | |||
disp('Różnica rozwiązań i residua'); | |||
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)] | |||
</pre></div> | |||
Przykładowe wyniki: | |||
<div style="font-family: monospace; white-space: pre; border-style: dashed; border-width: thin; border-color: black; margin: 1em; padding:1em; color: #444; background-color:#fdfdfd;"><nowiki>Losowa kwadratowa | |||
Uwarunkowanie A i A'A | |||
ans = 78.916 | |||
ans = 6227.8 | |||
Różnica rozwiązań i residua | |||
ans = | |||
3.8032e-14 3.7752e-16 1.2839e-14 | |||
Hilberta kwadratowa | |||
Uwarunkowanie A i A'A | |||
ans = 1.6025e+13 | |||
warning: matrix singular to machine precision, rcond = 5.50907e-20 | |||
warning: attempting to find minimum norm solution | |||
ans = 2.8419e+18 | |||
Różnica rozwiązań i residua | |||
ans = | |||
1.1891e+06 1.3552e-05 2.5646e-01 | |||
Losowa N x M, małe residuum | |||
Uwarunkowanie A i A'A | |||
ans = 3.4069 | |||
ans = 11.607 | |||
Różnica rozwiązań i residua | |||
ans = | |||
2.5634e-16 4.6194e-16 1.6653e-16 | |||
Losowa N x M, duże residuum | |||
Uwarunkowanie A i A'A | |||
ans = 3.4069 | |||
ans = 11.607 | |||
Różnica rozwiązań i residua | |||
ans = | |||
2.7473 1.0000 1.0000 | |||
Losowa N x M, małe residuum, duże uwarunkowanie | |||
Uwarunkowanie A i A'A | |||
ans = 6.6539e+06 | |||
ans = 4.4368e+13 | |||
Różnica rozwiązań i residua | |||
ans = | |||
2.3212e-03 1.0737e-08 1.0943e-08 | |||
</nowiki></div> | |||
Pamiętaj, w ostatnim wypadku mała reszta wcale nie musi oznaczać małego błędu! | |||
</div></div></div> | |||
--> |
Wersja z 21:37, 29 wrz 2006
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?