MN05LAB: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m Zastępowanie tekstu – „<math> ” na „<math>”
m Zastępowanie tekstu – „,↵</math>” na „</math>,”
 
(Nie pokazano 1 pośredniej wersji utworzonej 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 78: Linia 76:


<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  
Linia 86: Linia 83:


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

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