MN12LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
Przykry (dyskusja | edycje)
m Zastępowanie tekstu – „,↵</math>” na „</math>,”
 
(Nie pokazano 7 wersji utworzonych przez 3 użytkowników)
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>x\in R^n</math> oraz <math>r\in R^m</math> takich, że
<center><math>\begin{align}d r &= b - Ax,\\
A^T r &= 0.
\end{align}</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>\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>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 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>\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>||b-Ax||_2</math>, tzn. dla każdego <math>x</math>,
<center><math>||b-Ax^*||_2 \leq ||b-Ax||_2</math></center>
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 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>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
|+ <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>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>
\sum_{i=0}^{10} |a+b\, e^{-x_i} - f(x_i)|^2 \rightarrow \min!
</math></center>
A więc, macierzowo,
<center><math>
||
\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>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 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>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:
<center><math>\sum_{i=1}^n\omega_i|b_i - (Ax)_i|^2 \rightarrow \min!</math>,</center>
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 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>x</math>, minimalizującego
<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</math>,</center>
gdzie <math>\widetilde{b} = Db</math>, <math>\widetilde{A} = DA</math> i
<center><math>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>||\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>N</math> równań z <math>N</math> niewiadomymi
<center><math>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>A</math>, dostajemy w rezultacie
<center><math>A = QR = H_{N-1}\cdot H_{N-2} \cdots H_1 R</math></center>
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>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>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|
<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>A</math>;
y = b;
for i = 1:N-1
y = <math>H_{N-i}</math>*y;
end
rozwiąż układ z macierzą trójkątną <math>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>x</math> za pomocą przekształceń ortogonalnych jest zastosowanie tzw. <strong>obrotów Givensa</strong>,
<center><math>\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>c</math> i <math>s</math> tak, by macierz
<center><math>G = \begin{pmatrix}
c & s \\
-s & c
\end{pmatrix}
</math></center>
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 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>c = \frac{x_1}{||x||_2}, \quad s = \frac{x_2}{||x||_2}</math></center>
(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:
{{algorytm|Wyznaczenie obrotu Givensa|Wyznaczenie obrotu Givensa|
<pre>if ( <math>|x_1|</math> > <math>|x_2|</math> )
{
t = <math>x_2</math> / <math>x_1</math>;
c = 1 / sqrt(1+t*t);
s = t * c;
}
else
{
t = <math>x_1</math> / <math>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>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>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>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>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 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>
-->

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 xRn oraz rRm takich, że

dr=bAx,ATr=0.

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