MN12LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
Przykry (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:


<!--
Konwertowane  z pliku LaTeX przez latex2mediawiki, zob. http://www.ii.uj.edu.pl/&nbsp;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 xRn oraz rRm takich, że

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \displaystyle \aligned r &= b - Ax,\\ A^T r &= 0. \endaligned}

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.

Wskazówka
Rozwiązanie

Ćwiczenie

W twierdzeniu o uwarunkowaniu zadania najmniejszych kwadratów mówi się, że

||bAx*||2||b||2<1.

Wyjaśnij, dlaczego rzeczywiście tak jest.

Rozwiązanie

Ćwiczenie: Dopasowanie liniowych parametrów funkcji do danych

Znajdź a i b takie, że funkcja f(x)=a+bex 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
Wskazówka
Rozwiązanie

Ćwiczenie: Ważone zadanie najmniejszych kwadratów

Niech A będzie macierzą m×n pełnego rzędu, przy czym mn. Podaj algorytm rozwiązywania ważonego zadania najmniejszych kwadratów:

i=1nωi|bi(Ax)i|2min!,

gdzie zakładamy, że 0<ωi1 są danymi wagami. (Gdy wszystkie ωi=1, zadanie sprowadza się do zwykłego zadania najmniejszych kwadratów.)

Rozwiązanie

Ćwiczenie

Opisz szczegółowo sposób rozwiązywania układu N równań z N niewiadomymi

Ax=b,

korzystający z rozkładu QR metodą Householdera.

Rozwiązanie

Ćwiczenie: Obroty Givensa

Innym sposobem wyzerowania wybranych elementów zadanego wektora x za pomocą przekształceń ortogonalnych jest zastosowanie tzw. obrotów Givensa,

(cssc)(x1x2)=||x||2(10).

Wskaż jak dobrać c i s tak, by macierz

G=(cssc)

była ortogonalna i przekształcała x w zadany wyżej sposób. Jak zastosować sekwencję obrotów Givensa tak, by zadany wektor N-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?

Rozwiązanie