MN05LAB: Różnice pomiędzy wersjami
m Zastępowanie tekstu – „\displaystyle ” na „” |
m Zastępowanie tekstu – „,↵</math>” na „</math>,” |
||
(Nie pokazano 2 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 30: | Linia 30: | ||
Są to macierze spełniające warunki: | Są to macierze spełniające warunki: | ||
<center><math>A=A^T \qquad \mbox{oraz} \qquad x^T A x\,>\,0,\quad\forall x\ne 0 | <center><math>A=A^T \qquad \mbox{oraz} \qquad x^T A x\,>\,0,\quad\forall x\ne 0</math></center> | ||
</math></center> | |||
Dla takich macierzy można nieco zmniejszyć koszt kombinatoryczny | Dla takich macierzy można nieco zmniejszyć koszt kombinatoryczny | ||
Linia 50: | Linia 49: | ||
trójkątną dolną: | trójkątną dolną: | ||
<center><math>A\,=\,\widetilde{L}\, \widetilde{L}^T | <center><math>A\,=\,\widetilde{L}\, \widetilde{L}^T</math>,</center> | ||
</math></center> | |||
(oczywiście tym razem nie żądamy, aby <math>\widetilde{L}</math> miała na diagonali jedynki). | (oczywiście tym razem nie żądamy, aby <math>\widetilde{L}</math> miała na diagonali jedynki). | ||
Linia 60: | Linia 58: | ||
Bez zmniejszenia ogólności rozpatrzymy | Bez zmniejszenia ogólności rozpatrzymy | ||
tylko pierwszy krok rozkładu <math>LDL^T</math>. W tym celu zauważmy najpierw, że | tylko pierwszy krok rozkładu <math>LDL^T</math>. W tym celu zauważmy najpierw, że | ||
<math>a_{1,1}= e_1^TA e_1>0</math> (gdzie <math> e_1</math> jest pierwszym | <math>a_{1,1}= e_1^TA e_1>0</math> (gdzie <math>e_1</math> jest pierwszym | ||
wersorem), a więc nie musimy przestawiać wierszy, | wersorem), a więc nie musimy przestawiać wierszy, | ||
bo element na diagonali jest niezerowy. W pierwszym kroku mnożymy | bo element na diagonali jest niezerowy. W pierwszym kroku mnożymy | ||
Linia 75: | Linia 73: | ||
</math></center> | </math></center> | ||
oraz dla <math> x\ne 0</math> | oraz dla <math>x\ne 0</math> | ||
<center><math>x^T A^{(1)} x\,=\, x^T L_1 A L_1^T x | <center><math>x^T A^{(1)} x\,=\, x^T L_1 A L_1^T x | ||
\,=\,(L_1^T x)^T A(L_1^T x)\,>\,0 | \,=\,(L_1^T x)^T A(L_1^T x)\,>\,0</math>,</center> | ||
</math></center> | |||
bo <math> x\ne 0</math> implikuje <math>L_1^T x\ne 0</math>. Stąd | bo <math>x\ne 0</math> implikuje <math>L_1^T x\ne 0</math>. Stąd | ||
<math>a^{(1)}_{2,2}= e_2^TA^{(1)} e_2>0</math>. Postępując tak | <math>a^{(1)}_{2,2}= e_2^TA^{(1)} e_2>0</math>. Postępując tak | ||
dalej otrzymujemy | dalej otrzymujemy | ||
<center><math>L_{n-1}L_{n-2}\cdots L_2L_1AL_1^TL_2^T\cdots L_{n-2}^TL_{n-1}^T | <center><math>L_{n-1}L_{n-2}\cdots L_2L_1AL_1^TL_2^T\cdots L_{n-2}^TL_{n-1}^T | ||
\,=\,D | \,=\,D</math>,</center> | ||
</math></center> | |||
przy czym macierz <math>D</math> jest diagonalna i dodatnio określona, | przy czym macierz <math>D</math> jest diagonalna i dodatnio określona, | ||
Linia 316: | Linia 312: | ||
samą macierzą <math>A\in R^{N\times N}</math> i różnymi prawymi stronami: | samą macierzą <math>A\in R^{N\times N}</math> i różnymi prawymi stronami: | ||
<center><math> | <center><math> | ||
Ax_i = b_i, \qquad i = 1,\ldots,k | Ax_i = b_i, \qquad i = 1,\ldots,k</math></center> | ||
</math></center> | |||
Układy równań z tą samą macierzą, ale ze zmieniającą się prawą stroną równania | Układy równań z tą samą macierzą, ale ze zmieniającą się prawą stroną równania | ||
Linia 350: | Linia 345: | ||
Bardzo rzadko w praktyce numerycznej zdarza się potrzeba obliczenia wartości | Bardzo rzadko w praktyce numerycznej zdarza się potrzeba obliczenia wartości | ||
wyznacznika macierzy <math>A \in R^{N \times N}</math>. Zaproponuj metodę obliczania | wyznacznika macierzy <math>A \in R^{N \times N}</math>. Zaproponuj metodę obliczania | ||
<math> \mbox{det} (A)</math> oraz wskaż, jakiego rodzaju problemy numeryczne możesz napotkać. | <math>\mbox{det} (A)</math> oraz wskaż, jakiego rodzaju problemy numeryczne możesz napotkać. | ||
</div></div> | </div></div> | ||
Linia 356: | Linia 351: | ||
Wystarczy wykonać rozkład <math>PA=LU</math>. Wtedy | Wystarczy wykonać rozkład <math>PA=LU</math>. Wtedy | ||
<center><math> \mbox{det} A\,=\,(-1)^p u_{11}u_{22}\cdots u_{nn}, | <center><math>\mbox{det} A\,=\,(-1)^p u_{11}u_{22}\cdots u_{nn}, | ||
</math></center> | </math></center> | ||
Linia 365: | Linia 360: | ||
arytmetyce zmiennoprzecinkowej. Ponieważ | arytmetyce zmiennoprzecinkowej. Ponieważ | ||
<center><math> \mbox{det} (cA) = c^N A | <center><math>\mbox{det} (cA) = c^N A</math>,</center> | ||
</math></center> | |||
to dość łatwo będzie trafić (przy większych niż średnich wartościach <math>N</math>) na wartości wyznacznika, które będą albo potwornie duże, albo potwornie małe. Zresztą, zrób eksperyment: | to dość łatwo będzie trafić (przy większych niż średnich wartościach <math>N</math>) na wartości wyznacznika, które będą albo potwornie duże, albo potwornie małe. Zresztą, zrób eksperyment: | ||
Linia 396: | Linia 390: | ||
tym poradzić, szacując wpierw rząd wielkości wyznacznika, a następnie | tym poradzić, szacując wpierw rząd wielkości wyznacznika, a następnie | ||
reprezentując jego wartość w formie cecha--mantysa, np. jako parę liczb <math>m,c</math> | reprezentując jego wartość w formie cecha--mantysa, np. jako parę liczb <math>m,c</math> | ||
takich, że <math> \mbox{det} (A) = m\cdot 10^c</math>, ale | takich, że <math>\mbox{det} (A) = m\cdot 10^c</math>, ale | ||
dopasowując obie tak, by nie nastąpił ani nadmiar, ani niedomiar. | dopasowując obie tak, by nie nastąpił ani nadmiar, ani niedomiar. | ||
</div></div></div> | </div></div></div> |
Aktualna wersja na dzień 21:45, 11 wrz 2023
Rozwiązywanie układów równań liniowych
<<< Powrót do strony głównej przedmiotu Metody numeryczne
Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
Uwaga
Niektóre fragmenty zadań wymagają wykorzystania procedur LAPACKa; te części odłóż do momentu, gdy opanujesz następny wykład, dotyczący m.in. bibliotek algebry liniowej.
Ćwiczenie: Metoda Cholesky'ego
Ważnym przykładem macierzy szczególnej postaci są macierze symetryczne i dodatnio określone. Są to macierze spełniające warunki:
Dla takich macierzy można nieco zmniejszyć koszt kombinatoryczny i zużycie pamięci, przeprowadzając trochę inny rozkład na macierze trójkątne: tak, aby otrzymać rozkład
zamiast , przy czym jest tu jak zwykle macierzą
trójkątną dolną z jedynkami na przekątnej, a jest macierzą
diagonalną z dodatnimi elementami na diagonali. Opracuj taki algorytm. W jego
implementacji możesz porównywać się z procedurą LAPACKa DPOSV
.
Inny wariant tego samego
rozkładu to tak zwany rozkład Cholesky'ego--Banachiewicza, w którym, przy tych
samych założeniach na , szukamy rozkładu wykorzystującego tylko jedną macierz
trójkątną dolną:
(oczywiście tym razem nie żądamy, aby miała na diagonali jedynki). Jaka jest relacja między rozkładem a ?
Ćwiczenie: Mnożyć przez odwrotność to nie zawsze to samo...
W Octave układ równań rozwiązujemy korzystając z "operatora rozwiązywania równania"
x = A \ b;
Ale w Octave jest także funkcja inv
, wyznaczająca macierz
odwrotną, więc niektóre (nie najlepsze, oględnie mówiąc) podręczniki zalecają
x = inv(A)*b;
Przedyskutuj, które podejście jest lepsze i dlaczego. Przeprowadź eksperymenty numeryczne weryfikujące twoją tezę.
Ćwiczenie: Wybór elementu głównego jest naprawdę ważny!
Rozwiąż prosty układ równań
czterema sposobami:
- na kartce papieru (dokładnie!)
- w komputerze, w arytmetyce podwójnej precyzji, korzystając z rozkładu LU bez wyboru elementu głównego
- jak poprzednio, ale z wyborem elementu głównego w kolumnie
- w LAPACKu lub Octave.
Porównaj uzyskane rozwiązania i wyciągnij wnioski.
Ćwiczenie
Zapisz w Octave algorytm rozkładu LU macierzy (bez wyboru elementu głównego) działający in situ.
Wykorzystaj go do napisania funkcji, która rozwiąże układ równań .
Przetestuj tę funkcję na kilku macierzach i porównaj czas jego działania z czasem
wykonania operacji x = A\b
.
Spróbuj zastosować swój algorytm do kilku specjalnych macierzy:
- Hilberta dużego wymiaru
- diagonalnej z jednym elementem bardzo małym (a nawet równym zero)
Ćwiczenie: Układy równań z wieloma prawymi stronami
Podaj sposób taniego wyznaczenia rozwiązania sekwencji układów równań z tą samą macierzą i różnymi prawymi stronami:
Układy równań z tą samą macierzą, ale ze zmieniającą się prawą stroną równania powstają często na przykład przy rozwiązywaniu równań różniczkowych cząstkowych, gdzie prawa strona układu odpowiada zmieniającym się warunkom brzegowym.
Ćwiczenie: Obliczanie wyznacznika macierzy
Bardzo rzadko w praktyce numerycznej zdarza się potrzeba obliczenia wartości wyznacznika macierzy . Zaproponuj metodę obliczania oraz wskaż, jakiego rodzaju problemy numeryczne możesz napotkać.