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 10 wersji utworzonych przez 3 użytkowników)
Linia 1: Linia 1:
==Wyznaczanie wektorów i wartości własnych==
<!--
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=


Niech będzie dana rzeczywista kwadratowa macierz <math>A</math> wymiaru <math>N</math>. Wektorem własnym <math>x\in C^N</math> oraz
{{powrot |Metody numeryczne | do strony głównej
odpowiadającą mu wartością własną <math>\lambda \in C</math> nazwiemy taką parę, dla której
przedmiotu <strong>Metody numeryczne</strong>}}


<center><math>A x = \lambda x,
<div class="mw-collapsible mw-made=collapsible mw-collapsed">
</math></center>
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>


przy czym <math>x\neq 0</math>.
<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>,


Zadanie wyznaczania {hopla} wartości własnych !hopla! i wektorów własnych macierzy ma bardzo
<center><math>||b-Ax^*||_2 \leq ||b-Ax||_2</math></center>
szerokie zastosowania w tak odległych do siebie dziedzinach jak np. analiza
odporności konstrukcji mechanicznych (wieżowce, mosty, wagony kolejowe) na
wibracje, czy też rankingowanie stron internetowych w wyszukiwarce Google.


{{przyklad|[Uzupelnij]||
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>.
[Odporność budynku na trzęsienie ziemi]
</div></div></div>
Rozważmy prosty układ mechaniczny opisujący, naturalnie w pewnym
jedynie przybliżeniu, zachowanie się układu <math>N</math> ciężkich płyt połączonych ze
sobą relatywnie elatycznymi dźwigarami --- co może np. modelować konstrukcję
wieżowca.


{}{Model wieżowca poddanego drganiom poprzecznym}
<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">


Wiadomo, że jeśli częstotliwości drgań własnych tego wieżowca będą bliskie
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:
częstotliwości siły wymuszającej (o niewielkiej amplitudzie), to konstrukcja
wpadnie w rezonans i w końcu rozpadnie się wskutek zbyt wielkich przemieszczeń.
Wychylenia naszych płyt z położenia równowagi są opisywane układem pewnych
równań różniczkowych.
Teoria matematyczna takich równań różniczkowych pokazuje, że częstotliwości
drgań własnych to nic innego jak ''wartości własne'' pewnej
{niesymetrycznej} macierzy
wymiaru <math>2N</math>,
która powstaje ze współczynników  równania różniczkowego opisującego dynamikę
tego układu.
}}


{{przyklad|[Uzupelnij]||
{| border=1
[Macierz Google'a]
|+ <span style="font-variant:small-caps"> </span>
Podstawowy algorytm rankingowania stron WWW w {http://www.wikipedia.org/pagerank}{wyszukiwarce Google}
|-
sprowadza się do znalezienia rzeczywistego ''wektora własnego'' <math>\pi</math> pewnej silnie
| x  ||  f(x)
rozrzedzonej macierzy <math>A</math> (gigantycznego rozmiaru, równego liczbie indeksowanych
|-
stron, czyli w chwili pisania tego tekstu około XXXX stron), odpowiadającego wartości własnej równej 1:
| 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


<center><math>A \pi = \pi.
|}
</math></center>


Współrzędne wektora <math>\pi</math>
<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">
interpretuje się jako wartość rankingową kolejnych stron WWW. Aby wszystko miało
<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>
sens, współrzędne wektora muszą być  z przedziału [0,1].  Pewne
</div></div>
twierdzenia matematyczne i subtelny dobór macierzy <math>A</math> gwarantują, że taki
wektor <math>\pi</math> zawsze istnieje i jest jedyny! Co więcej, wartość 1 jest
dominującą wartością własną <math>A</math>, a to z kolei ma ważne znaczenie dla tzw.
{sec:metoda-potegowa}{metody potęgowej} numerycznego wyznaczania takiego wektora.
}}


{{przyklad|[Uzupelnij]||
</div></div>
[Wyznaczanie miejsc zerowych wielomianu]
Jak wiadomo, wartości własne to miejsca zerowe wielomianu charakterystycznego
macierzy <math>P(\lambda) = \det(A - \lambda I)</math>. Zachodzi także fakt odwrotny, to
znaczy miejsca zerowe wielomianu są wartościami pewnej macierzy, np. miejsca
zerowe wielomianu


<center><math>p(\lambda) = p_1 \lambda^N + \ldots + p_N \lambda + p_{N+1}
<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>
</math></center>


są wartościami własnymi m.in. macierzy stowarzyszonej,
A więc, macierzowo,  
 
<center><math>
<center><math>A = \begin{pmatrix}
||
-p_2/p_1 & -p_3/p_1 & \cdots & -p_{N+1}/p_1\\
\begin{pmatrix}  
1 & & & \\
1 & e^{-x_0}\\
& 1 & & \\
\vdots\\
& & \ddots & \\
1 & e^{-x_{10}}
& & & 1
\end{pmatrix}
\cdot \begin{pmatrix}  
a \\
b
\end{pmatrix}
-
\begin{pmatrix}
f(x_0)\\
\vdots\\
f(x_10)
\end{pmatrix}  
\end{pmatrix}  
||_2^2 \rightarrow \min!
</math></center>
</math></center>


Funkcja Octave'a !compan(p)! wyznacza macierz stowarzyszoną dla zadanego
A więc mamy sformułowane zadanie w języku liniowego zadania najmniejszych kwadratów. ''Reszta jest liczeniem...''
wielomianu o współczynnikach w wektorze <math>p = [p_1,\ldots,p_N, p_{N+1}]^T</math>. Z tej
macierzy korzysta następnie funkcja Octave'a !roots! właśnie w taki
[[Image:MNlznk.png|thumb|550px|center|Wyznaczone najlepsze dopasowanie naszego modelu do danych. ]]
sposób wyznacza pierwiastki wielomianów: jako wartości własne macierzy
 
stowarzyszonej.
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>


{{przyklad|[Uzupelnij]||
<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


Praktyczne zadanie z macierzą symetryczną
<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>


W praktyce obliczeniowej spotyka się zazwyczaj kilka typów zagadnień:
gdzie <math>\widetilde{b} = Db</math>, <math>\widetilde{A} = DA</math> i


* Wyznaczenie dominującej wartości własnej (to znaczy: największej co do
<center><math>D = \begin{pmatrix}
modułu) i odpowiadającego jej wektora własnego (a może kilku wektorów?)
\omega_1 & & \\
        & \ddots & \\
&        & \omega_n
\end{pmatrix} </math></center>


* Wyznaczenie najmniejszej co do modułu wartości własnej i wektorów jej
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>.
odpowiadających (zauważmy, że to jest np. zadanie wyznaczenia ''jądra
</div></div></div>
macierzy osobliwej'' --- wtedy wiemy a priori, że szukana najmniejsza co do modułu
wartość własna to zero)


* Wyznaczenie wartości własnej najbliższej zadanej liczbie (to jest właśnie
<div style="margin-top:1em; padding-top,padding-bottom:1em;">
odpowiedź na pytanie jak blisko częstości wymuszającej są częstości drgań
<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>
własnych budynku)
<div class="exercise">


* Wyznaczenie wszystkich wartości własnych
Opisz szczegółowo sposób rozwiązywania układu <math>N</math> równań z <math>N</math> niewiadomymi


* Wyznaczenie wszystkich wartości i wektorów własnych (tzw. pełne
<center><math>Ax = b</math>,</center>
zagadnienie własne)


Jak domyślamy się, dla macierzy rozrzedzonych dużego wymiaru pełne zagadnienie
korzystający z rozkładu QR metodą Householdera.
własne jest zbyt kosztowne, gdyż najczęściej macierz wektorów własnych --- nawet
</div></div>
dla macierzy rzadkiej --- jest gęsta.


Ponieważ w zastosowaniach bardzo często pojawiają się macierze rzeczywiste
<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"> 
symetryczne (powyższe przykłady pokazują, że nie tylko!) szczegółową analizę
Stosując rozkład QR metodą Householdera do macierzy <math>A</math>, dostajemy w rezultacie
metod numerycznych ograniczymy do tego przypadku, gdyż wtedy zachodzi


{{twierdzenie|[Uzupelnij]||
<center><math>A = QR = H_{N-1}\cdot H_{N-2} \cdots H_1 R</math></center>
[o symetrycznym zadaniu włanym]


Każda macierz rzeczywista symetryczna <math>A</math> wymiaru <math>N</math> ma rozkład
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>A = Q\Lambda Q^T,
<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>


gdzie <math>Q\in R^{N\times N}</math> jest ortogonalna (tzn. <math>Q^TQ = I</math>), a jej kolumnami są
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:
wektory własne <math>A</math>, natomiast <math>\Lambda\in
R^N</math> jest diagonalna z
wartościami własnymi <math>A</math> na diagonali:


<center><math>\Lambda = \beginpmatrix \lambda_1 & & \\ & \ddots & \\ & &
{{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|
\lambda_N\endpmatrix .
<pre>wyznacz macierze Householdera <math>H_1,\ldots, H_{N-1}</math> oraz macierz trójkątną <math>R</math>,
</math></center>
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>}}


===Uwarunkowanie zadania===
</div></div></div>


{{twierdzenie|[Uzupelnij]||
<div style="margin-top:1em; padding-top,padding-bottom:1em;">
[Bauer-Fike]
<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">


Niech <math>A\in R^{N\times N}</math> będzie diagonalizowalna, to
Innym sposobem wyzerowania wybranych elementów zadanego wektora <math>x</math> za pomocą przekształceń ortogonalnych jest zastosowanie tzw. <strong>obrotów Givensa</strong>,
znaczy dla pewnej macierzy <math>X</math> zachodzi


<center><math>X^{-1} A X = \beginpmatrix  \lambda_1 & & \\ & \ddots & \\ & &
<center><math>\begin{pmatrix}  
\lambda_N\endpmatrix ,
c & s \\
</math></center>
-s & c
\end{pmatrix}
\begin{pmatrix}
x_1 \\ x_2
\end{pmatrix}
=
||x||_2
\begin{pmatrix}
1 \\ 0
\end{pmatrix} </math></center>


a więc (gdyż macierz po prawej stronie jest podobna do <math>A</math>) <math>\lambda_i\in C</math>,
Wskaż jak dobrać <math>c</math> i <math>s</math> tak, by macierz
<math>i=1,\ldots,N</math> są
wartościami własnymi <math>A</math>. Rozważmy macierz zaburzoną <math>\tilde{A}</math> i jakąś jej
wartość własną <math>\tilde{\lambda}</math>. Wtedy istnieje wartość własna <math>\lambda_j</math>
macierzy <math>A</math> taka, że


<center><math>|\lambda_j - \tilde{\lambda}| \leq \mbox{cond}_2(X) ||A - \tilde{A}||_2.
<center><math>G = \begin{pmatrix}  
c & s \\
-s & c
\end{pmatrix}  
</math></center>
</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>


Ponieważ dla rzeczywistej macierzy symetrycznej macierz przejścia <math>X</math> jest
<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">
ortogonalna,
Prosty rachunek pokazuje, że
<math>X^{-1} = X^T</math>, to mamy <math>\mbox{cond}_2(X) = 1</math> i w konsekwencji zachodzi


{{wniosek|[Uzupelnij]||
<center><math>c = \frac{x_1}{||x||_2}, \quad s = \frac{x_2}{||x||_2}</math></center>
[Wartości własne macierzy symetrycznej są doskonale uwarunkowane]
Przy oznaczeniach jak {thm:Bauer-Fike}{twierdzeniu Bauera-Fike'a}, jeśli
dodatkowo założymy, że macierz <math>A</math> jest rzeczywista i symetryczna, to


<center><math>\min_{j=1,\ldots,N}|\lambda_j - \tilde{\lambda}| \leq ||A - \tilde{A}||_2.
(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>.)
</math></center>


}}
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:


Z drugiej strony, dla macierzy niediagonalizowalnych, uwarunkowanie wartości
{{algorytm|Wyznaczenie obrotu Givensa|Wyznaczenie obrotu Givensa|
własnych może być
<pre>if ( <math>|x_1|</math> > <math>|x_2|</math> )
dowolnie duże, co ilustruje poniższy
{
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>}}


{{przyklad|[Uzupelnij]||
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.


<center><math>A_\epsilon = \beginpmatrix  a & 1 \\ \epsilon & a \endpmatrix
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.
</math></center>


Weźmy dla uproszczenia <math>a=0</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.
Wartości własne <math>A_\epsilon</math> to zera wielomianu <math>p_\epsilon(\lambda) = \lambda^2 - \epsilon</math>,
zatem <math>\lambda_\epsilon = \pm \sqrt{\epsilon}</math> i w konsekwencji


<center><math>|\lambda_\epsilon - \lambda_0| / ||A_\epsilon - A_0|| = \sqrt{\epsilon}/\epsilon
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ą.
\rightarrow \infty,
</math></center>


gdy <math>\epsilon \rightarrow 0^+</math>, a więc uwarunkowanie takiego zadania jest
</div></div></div>
nieskończone: dowolnie mała zmiana macierzy powoduje zaburzenie wartości
własnych niewspółmiernie wielkie wobec zaburzenia danych. Dodatkowo, wartości własne i wektory własne macierzy <math>A</math> dla
ujemnego parametru <math>\epsilon</math> są zespolone!


{eigencond.png}{Zachowanie się wartości własnych macierzy <math>A</math> (z
<!--
parametrem <math>a=1</math>) w otoczeniu <math>\delta = 0</math>}


}}
<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">


Bardziej spektakularny przykład pochodzi od Wilkinsona:
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>


{{przyklad|[Uzupelnij]||
<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"> 
[Perfidny wielomian Wilkinsona]
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.
Niech


<center><math>p(\lambda) = (\lambda -1)(\lambda - 2) \cdots (\lambda - 20).
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.  
</math></center>


Zmiana współczynnika przy <math>\lambda^{19}</math> o <math>10^{-7}</math> skutkuje presunięciem niektórych
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...
miejsc zerowych nawet o kilka jednostek na płaszczyźnie zespolonej! Poniżej
pokazujemy to na numerycznym przykładzie, gdzie prócz w/w zaburzenia mamy
dodatkowo z zaburzeniami powstałymi wskutek wyznaczenia współczynników
wielomianu w arytmetyce zmiennoprzecinkowej.


{wilkinson.png}{Zera oryginalnego i lekko zaburzonego perfidnego wielomianu
A oto przykładowy eksperyment:
Wilkinsona.}


Jak widzimy, zera bardzo mało zaburzonego wielomianu mogą stać się wyraźnie nie-rzeczywiste!
<div style="margin: 1em; padding:1em; color: #006; background-color:#fcfcfc;"><pre>N=10;


}}
disp('Losowa kwadratowa');


Jeśli chodzi o wektory własne, ich wrażliwość na zaburzenia macierzy jest
A = rand(N,N);
bardziej skomplikowana i zależy m.in. od  uwarunkowania wartości własnych (czego
f = rand(N,1);
łatwo się domyślić) oraz od tego, jak blisko siebie leżą wartości własne.


===Lokalizacja wartości własnych===
disp("Uwarunkowanie A i A'A");


Jak okaże się za chwilę, czasem warto mieć ogólne rozeznanie o tym, gdzie ''z
x = A \ f; cond(A)
grubsza'' leżą wartości własne danej macierzy <math>A</math>. W tym celu mogą być nam
xn = (A'*A) \ (A'*f); cond(A'*A)
pomocne dwa fakty:


{{fakt|[Uzupelnij]||
disp('Różnica rozwiązań i residua');
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]


Dowolna wartość własna <math>\lambda\in C</math> macierzy <math>A</math> spełnia
disp('Hilberta kwadratowa');


<center><math>|\lambda| \leq ||A||,
A = hilb(N);
</math></center>
f = rand(N,1);


gdzie <math>||A||</math> jest dowolną normą macierzową indukowaną przez normę wektorową.
disp("Uwarunkowanie A i A'A");
}}


Rzeczywiście, skoro istnieje wektor <math>x\neq 0</math> taki, że <math>Ax = \lambda x</math>, to stąd
x = A\f; cond(A)
<math>||Ax||/||x|| = |\lambda|</math>, więc fakt powyższy wynika już z definicji normy
xn = (A'*A) \ (A'*f); cond(A'*A)
macierzy:


<center><math>||A|| = \max_{y\neq 0}\frac{||Ay||}{||y||} \geq ||Ax||/||x||.
disp('Różnica rozwiązań i residua');
</math></center>
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]


Drugie twierdzenie jest równie proste w dowodzie, ale daje trochę więcej
disp('Losowa N x M, małe residuum');
informacji o lokalizacji widma.


{{twierdzenie|[Uzupelnij]||
M = 3;
[Gerszgorina]
A = rand(N,M);
Wartości własne macierzy <math>A</math> leżą w sumie (teoriomnogościowej) dysków <math>K_i</math> na
f = A*rand(M,1);
płaszczyźnie zespolonej,


<center><math>K_i = \{z \in C: |z - a_{ii}| \leq \sum_{j\neq i} |a_{ij}| \}, \qquad i =
disp("Uwarunkowanie A i A'A");
1,\ldots N.
</math></center>


}}
x = A\f; cond(A)
xn = (A'*A) \ (A'*f); cond(A'*A)


{{przyklad|[Uzupelnij]||
disp('Różnica rozwiązań i residua');
[Koła Gerszgorina]
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]
Niech 


<center><math>A = \beginpmatrix
disp('Losowa N x M, duże residuum');
1.08930  & 1.38209  & -1.00037  &  0.69355  &  2.32178 \\
0.14211  &  1.74696 &  1.68440 &  0.30664 &  1.26718 \\
-0.74620  &  2.02686 &  -0.68293 &  0.19684 &  0.35854 \\
0.83517  &  0.74987 &  1.71331 &  1.09765 &  -0.44321 \\
1.02132  & -2.62155 &  0.79247 &  1.11408 &  0.48076 \\
\endpmatrix
</math></center>


{gershgorindisks.png}{Lokalizacja wartości własnych macierzy <math>A</math> kołami Gerszgorina oraz zgrubna
kernel = null(A');
lokalizacja wewnątrz okręgu
f = kernel(:,1);
o promieniu równym <math>||A||_1</math>. Dokładne wartości własne zaznaczone trójkącikami.}


}}
disp("Uwarunkowanie A i A'A");


{{przyklad|[Uzupelnij]||
x = A\f; cond(A)
[Widmo macierzy jednowymiarowego Laplasjanu]
xn = (A'*A)\N =10;
Norma daje:


Tw. Gerszgorina daje:
disp('Losowa kwadratowa');


W rzeczywistości,
A = rand(N,N);
f = rand(N,1);


}}
disp("Uwarunkowanie A i A'A");


===Metoda potęgowa, odwrotna potęgowa, RQI===
x = A\f; cond(A)
xn = (A'*A) \ (A'*f); cond(A'*A)


====Metoda potęgowa====
disp('Różnica rozwiązań i residua');
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]


Przypuśćmy, że wartości własne macierzy <math>A\in R^{N\times N}</math> spełniają
disp('Hilberta kwadratowa');


<center><math>|\lambda_1| > |\lambda_2| \geq \ldots \geq |\lambda_N|,
A = hilb(N);
</math></center>
f = rand(N,1);


(to znaczy, istnieje dokładnie jedna ''dominująca'' wartość własna macierzy
disp("Uwarunkowanie A i A'A");
<math>A</math>.


Załóżmy także, że istnieje baza złożona z wektorów własnych <math>q_1,\ldots,q_N</math> tej
x = A\f; cond(A)
macierzy (tak jest np. dla macierzy symetrycznej na mocy
xn = (A'*A) \ (A'*f); cond(A'*A)
{thm:symetric-eig}{twierdzenia o własnościach symetrycznego zadania
własnego}).


Kierunek własny <math>q_k</math> jakiejś macierzy <math>A</math> ma taką własność, że poddany działaniu przekształcenia
disp('Różnica rozwiązań i residua');
<math>A</math> wydłuża się <math>\lambda_k</math> razy, wobec tego, dowolny wektor <math>x\in R^N</math> poddany
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]
działaniu <math>A</math> najbardziej wydłuży się w kierunku <math>q_1</math>. Iterując tę procedurę,
powinniśmy dostawać w wyniku wektory, w których coraz bardziej dominuje kierunek
<math>q_1</math>. Formalnie, niech


<center><math>x = \alpha_1q_1 + \ldots + \alpha_Nq_N,
disp('Losowa N x M, małe residuum');
</math></center>


wtedy
M = 3;
A = rand(N,M);
f = A*rand(M,1);


<center><math>Ax = A \left( \sum_i \alpha_iq_i \right) = \sum_i \alpha_i A q_i
disp("Uwarunkowanie A i A'A");
=  \sum_i \alpha_i \lambda_i q_i
</math></center>


i w konsekwencji
x = A\f; cond(A)
xn = (A'*A) \ (A'*f); cond(A'*A)


<center><math>A^kx = \sum_i \alpha_i \lambda_i^k q_i = \lambda_1^k\left(\alpha_1q_1 +
disp('Różnica rozwiązań i residua');
\alpha_2\left(\frac{\lambda_2}{\lambda_1}\right)^kq_2 + \ldots  +
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]
\alpha_N\left(\frac{\lambda_N}{\lambda_1}\right)^kq_N \right).
</math></center>


Ponieważ z założenia, że istnieje dokładnie jedna dominująca wartość własna,
disp('Losowa N x M, duże residuum');
<math>\left|\frac{\lambda_N}{\lambda_1}\right| < 1</math>, to wyrażenie w nawiasie dąży do
<math>\alpha_1q_1</math> i w konsekwencji wektory <math>x_k = A^kx</math> dążą, gdy
<math>k\rightarrow\infty</math>, do kierunku wektora własnego <math>q_1</math>, to znaczy wektora
odpowiadającego dominującej wartości własnej <math>A</math>  (o ile tylko <math>\alpha_1
\neq 0</math>).


Szybkość zbieżności metody potęgowej jest liniowa, o współczynniku zależnym od
kernel = null(A');
stosunku <math>\lambda_2/\lambda_1|</math>. W patologicznym przypadku, gdy <math>|\lambda_1|
f = kernel(:,1);
\approx |\lambda_2|</math>, może więc okazać się, że metoda praktycznie nie jest
zbieżna.


W praktyce nie wyznaczamy wzorem <math>x_k = (A^k)\cdot x</math>, lecz raczej korzystamy z
disp("Uwarunkowanie A i A'A");
metody iteracyjnej


[title<nowiki>=</nowiki>Metoda potęgowa]
x = A\f; cond(A)
<math>x_0</math> <nowiki>=</nowiki> dowolny wektor startowy; k <nowiki>=</nowiki> 0;
xn = (A'*A) \ (A'*f); cond(A'*A)
while ( !stop )
{
<math>y_k</math> <nowiki>=</nowiki> <math>Ax_{k-1}</math>;
<math>x_k</math> <nowiki>=</nowiki> <math>y_k/||y_k||_\infty</math>;
k++;
}


Warunek normowania ma m.in. na celu zapobieżenie powstawania nadmiaru i
disp('Różnica rozwiązań i residua');
niedomiaru (gdy <math>|\lambda_1| < 1</math>, to <math>||A^kx|| \rightarrow 0</math>, a gdy
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]
<math>|\lambda_1| > 1</math>, to <math>||A^kx|| \rightarrow \infty</math>). Przy okazji,
<math>||y_k||_\infty \rightarrow |\lambda_1|</math>, a więc mamy także sposób na wyznaczenie
przybliżenia dominującej wartości własnej.


Zazwyczaj jako warunek stopu wybiera się kryterium małej poprawki, <math>||x_k -
disp('Losowa N x M, małe residuum, duże uwarunkowanie');
x_{k-1}|| \leq \epsilon</math>, lub warunek małego residuum, <math>||Ax_k - \lambda_{1,k}
x_k||\leq \epsilon</math>, gdzie <math>\lambda_{1,k}</math> jest przybliżeniem <math>\lambda_1</math>
dostępnym na <math>k</math>-tej iteracji.


{}{Zasada działania metody potęgowej}
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);


Metoda potęgowa doskonale sprawdza się, gdy macierz <math>A</math> jest macierzą
disp("Uwarunkowanie A i A'A");
rozrzedzoną --- np. w przypadku macierzy Google'a.


====Odwrotna metoda potęgowa====
x = A\f; cond(A)
xn = (A'*A) \ (A'*f); cond(A'*A)


Zauważmy, że dla dowolnej macierzy kwadratowej <math>A</math> o wartościach własnych
disp('Różnica rozwiązań i residua');
<math>\lambda_k</math> i odpowiadających im wektorach własnych <math>q_k</math>, mamy:
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]


* Macierz <math>A-\sigma I</math> ma wartości własne <math>\lambda_k - \sigma</math> oraz wektory
(A'*f); cond(A'*A)
własne <math>q_k</math>,


* Jeśli dodatkowo <math>A</math> jest nieosobliwa, to macierz <math>A^{-1}</math> ma wartości
disp('Różnica rozwiązań i residua');
własne <math>1/\lambda_k</math> oraz wektory własne <math>q_k</math>
[norm(x-xn)/norm(xn), norm(A*x-f), norm(A*xn-f)]


Łącząc te dwie własności mamy, że
disp('Losowa N x M, małe residuum, duże uwarunkowanie');


{{stwierdzenie|[Uzupelnij]||
M = 4;
[Transformacja widma macierzy]
A = rand(N,M);
Macierz <math>(A-\sigma I)^{-1}</math> (o ile istnieje),
A(:,1) = A(:,2)+100*sqrt(eps)*rand(N,1);
to ma wartości własne równe <math>\frac{1}{\lambda_k - \sigma}</math> i wektory własne
f = A*rand(M,1)+sqrt(eps)*rand(N,1);
identyczne z <math>A</math>.
}}


Skoro tak, to jeśli najbliższą <math>\sigma</math>  wartością własną <math>A</math> jest <math>\lambda_j</math>,
disp("Uwarunkowanie A i A'A");
wówczas metoda potęgowa zastosowana do macierzy <math>(A-\sigma I)^{-1}</math> zbiegnie do
<math>q_j</math>. To prowadzi do następującego algorytmu, odwrotnej metody potęgowej:


[title<nowiki>=</nowiki>Odwrotna metoda potęgowa]
x = A\f; cond(A)
<math>x_0</math> <nowiki>=</nowiki> dowolny wektor startowy; k <nowiki>=</nowiki> 0;
xn = (A'*A) \ (A'*f); cond(A'*A)
while( !stop )
{
Rozwiąż układ równań <math>(A-\sigma I)y_k = x_{k-1}</math>;
<math>x_k</math> <nowiki>=</nowiki> <math>y_k/||y_k||_\infty</math>;
k++;
}


====Metoda Rayleigh====
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:


Z własności metody potęgowej, metoda odwrotna potęgowa jest zbieżna tym
<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
szybciej, im bliżej <math>\lambda_j</math> jest przesunięcie <math>\sigma</math> (w stosunku do
Uwarunkowanie A i A'A
pozostałych wartości własnych). Dlatego dobrze byłoby --- dla zwiększenia
ans =  78.916
szybkości zbieżności iteracji --- poprawiać wartość przesunięcia <math>\sigma</math>,
ans =  6227.8
korzystając z dotychczas wyznaczonego wektora <math>x_k \approx q_j</math> i ilorazu
Różnica rozwiązań i residua
Rayleigh:
ans =


<center><math>\lambda_j = \frac{q_j^TAq_j}{q_j^Tq_j} \approx \frac{x_k^TAx_k}{x_k^Tx_k}
  3.8032e-14  3.7752e-16  1.2839e-14
</math></center>


[title<nowiki>=</nowiki>Metoda RQI (Rayleigh Quotient Iteration)]
Hilberta kwadratowa
<math>x_0</math> <nowiki>=</nowiki> dowolny wektor startowy; <math>\sigma_0</math> <nowiki>=</nowiki> przybliżenie <math>\lambda_j</math>; k <nowiki>=</nowiki> 0;
Uwarunkowanie A i A'A
while( !stop )
ans = 1.6025e+13
{
warning: matrix singular to machine precision, rcond = 5.50907e-20
Rozwiąż układ równań <math>(A-\sigma_k I)y_k = x_{k-1}</math>;
warning: attempting to find minimum norm solution
<math>x_k</math> <nowiki>=</nowiki> <math>y_k/||y_k||_2</math>;
ans = 2.8419e+18
<math>\sigma_{k+1}</math> <nowiki>=</nowiki> <math>x_k^TAx_k</math>;
Różnica rozwiązań i residua
k++;
ans =
}


(wybierając normowanie wektora <math>x</math> w normie euklidesowej upraszczamy co nieco
  1.1891e+06  1.3552e-05  2.5646e-01
algorytm).


Wielką zaletą metody RQI jest jej szybkość zbiezności: kwadratowa gdy wartość
Losowa N x M, małe residuum
własna jest pojedyncza, a nawet sześcienna w przypadku macierzy symetrycznej.
Uwarunkowanie A i A'A
ans =  3.4069
ans =  11.607
Różnica rozwiązań i residua
ans =


Wadą metody RQI jest to, że na każdym jej kroku należy rozwiązywać układ równań
  2.5634e-16  4.6194e-16  1.6653e-16
z ''inną'' macierzą.


{{uwaga|[Uzupelnij]||
Losowa N x M, duże residuum
[Gdy złe uwarunkowanie pomaga...]
Uwarunkowanie A i A'A
Przez pewien czas numerycy odnosili się do tej metody z rezerwą,
ans =  3.4069
twierdząc, i słusznie, że im lepszym przybliżeniem <math>q_j</math> będzie <math>\sigma_k</math>, tym
ans =  11.607
bardziej rośnie uwarunkowanie <math>A-\sigma_k I</math>, a tym samym --- błąd numerycznego
Różnica rozwiązań i residua
rozwiązywania układu z tą macierzą będzie coraz większy i metoda będzie tracić
ans =
stabilność. Tymczasem okazuje się, że --- choć rzeczywiście tak jest ---
wektor błędu ma kierunek praktycznie zgodny z kierunkiem poszukiwanego wektora
<math>q_j</math>, a tym samym tylko ''pomaga'' w zbieżności metody!
}}


===Metoda dziel i rządź, metoda QR===
  2.7473  1.0000  1.0000


{}{Secular equation}
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>


===Biblioteki===
-->

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