MN05LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
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:

A=ATorazxTAx>0,x0

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

A=LDLT

zamiast PA=LU, przy czym L jest tu jak zwykle macierzą trójkątną dolną z jedynkami na przekątnej, a D 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 A, szukamy rozkładu wykorzystującego tylko jedną macierz trójkątną dolną:

A=L~L~T,

(oczywiście tym razem nie żądamy, aby L~ miała na diagonali jedynki). Jaka jest relacja między rozkładem LDLT a L~L~T?

Rozwiązanie

Ćwiczenie: Mnożyć przez odwrotność to nie zawsze to samo...

W Octave układ równań Ax=b 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ę.

Rozwiązanie

Ćwiczenie: Wybór elementu głównego jest naprawdę ważny!

Rozwiąż prosty układ równań

1018x1+x2=1,x1+2x2=4,

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.

Rozwiązanie

Ćwiczenie

Zapisz w Octave algorytm rozkładu LU macierzy (bez wyboru elementu głównego) działający in situ.

Wskazówka

Wykorzystaj go do napisania funkcji, która rozwiąże układ równań Ax=b.

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)
Rozwiązanie

Ćwiczenie: Układy równań z wieloma prawymi stronami

Podaj sposób taniego wyznaczenia rozwiązania sekwencji k<N układów równań z tą samą macierzą ARN×N i różnymi prawymi stronami:

Axi=bi,i=1,,k

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.

Wskazówka
Rozwiązanie

Ćwiczenie: Obliczanie wyznacznika macierzy

Bardzo rzadko w praktyce numerycznej zdarza się potrzeba obliczenia wartości wyznacznika macierzy ARN×N. Zaproponuj metodę obliczania det(A) oraz wskaż, jakiego rodzaju problemy numeryczne możesz napotkać.

Rozwiązanie