Laboratorium 7
Transkrypt
Laboratorium 7
Metody numeryczne Laboratorium 6 – Metody dokładne rozwiązywania układów równań liniowych *** Poniżej zadań jest opis obu sposobów rozwiązywania układu rownań :) *** Zadania Dany jest układ równań w postaci macierzowej: A X Y x1 2 −1 5 6 ∗ = 4 −1 3 x2 4 −4 1 −4 x 3 −3 [ ][ ][ ] Zadanie 1.1 Napisać skrypt, który wykorzystując wzory Cramera znajdzie rozwiązanie układu równań. Do zrobienia po kolei: • Wprowadzić macierze do zmiennych w skrypcie Octave. • Sprawdzić czy wyznacnzik macierzy głównej jest równy od zera, jeśli tak to przerwać wykonywanie skryptu z odpowiednią informacją. • Utworzyć macierze pomocnicze: A1, A2 i A3. • Wyznaczyć wartości wektora niewiadomych X. • Sprawdzić poprawność rozwiązania (A*X powinno być równe Y) Przetestować działanie skryptu dla innej zawartości macierzy A i wektora Y. Zadanie 2 Podany układ równań rozwiązać metodą eleminacji Gaussa śledząc krok po kroku (ze zrozumieniem) wykonywane operacje. Do zrobienia po kolei: • Wprowadzić macierze do zmiennych w skrypcie Octave. • Sprawdzić czy wyznacnzik macierzy głównej jest równy od zera, jeśli tak to przerwać wykonywanie skryptu z odpowiednią informacją. • Utworzyć macierz rozszerzoną R. ZEROWANIE PIERWSZEJ KOLUMNY • Wyznaczyć mnożnik m21 i wyzerować element r21 wykonując operację na drugim wierszu (w2 = w1*m21 + w2). • Wyznaczyć mnożnik m31 i wyzerować element r31 wykonując operację na trzecim wierszu (w3 = w1*m31 + 32). ZEROWANIE DRUGIEJ KOLUMNY • Wyznaczyć mnożnik m32 i wyzerować element r32 wykonując operację na trzecim wierszu (w3 = w2*m32 + w3). ODWROTNA ELIMINACJA GAUSSA • Wyznaczyć wartość niewiadomej x3. • Wyznaczyć wartość niewiadomej x2 korzystając z x3. • Wyznaczyć wartość niewiadomej x1 korzystając z x2 i x3. • Zapisać wyniki w wektorze X. • Sprawdzić poprawność (A*X powinno być równe Y). Przetestować działanie skryptu dla innej zawartości macierzy A i wektora Y. Zadanie 3 Dany jest układ równań w postaci macierzowej: A X Y 1 1 −1 2 x 6 1 0 2 −2 1 −1 ∗ x2 = 2 0 −1 1 6 x 3 1 1 −3 2 4 Rozwiązać podany układ metodą eleminacji Gaussa analogicznie jak miało to miejsce w zadaniu 2. [ ][ ][ ] Zadanie 1.2 Napisać skrypt, który będzie automatycznie znajdował rozwiązanie układu równań metodą Cramera zależnie do wielkości wprowadzonych: macierzy A i wektora Y. Przetestować. Zadanie 1.3 Skrypt z zadania 1.2 przerobić na funkcję, która przyjmuje dwa parametry (macierzA, wektorY) i zwraca rozwiązanie układu jako wektor kolumnowy (wektor X). Zadanie 4 Spróbować zautomatyzować działanie skryptu rozwiązującego układ równań metodą eleminacji Gaussa. Nie starać się zautomatyzować/uogólnić od razu wszystkiego, ale małymi krokami starać się uzmienić wszystkie operacje, żeby były zależne od wielkości macierzy A i werktora Y. Zobacz podpowiedzi na samym końcu dokumentu. TEORIA Mamy dany do rozwiązania układ n równań z n niewiadomymi: a11 x1 +a12 x 2+ ...+ a1n x n= y 1 a 21 x 1+a22 x 2 +...+ a2n x n= y 2 ⋯ an1 x1 +an2 x 2 +...+a nn x n= y n Ten sam układ równań w postaci macierzowej można zapisać jako: A⋅X=Y , gdzie A to macierz główna układu (macierz współczynników), X to wektor niewiadomych, a Y to wektor wyrazów wolnych. Układ zapisany w postaci macierzowej przedstawia się następująco: [ a11 a21 ⋮ an1 A X Y a12 … a1n x 1 y1 a22 … a2n ∗ x 2 = y 2 ⋱ ⋮ ⋮ ⋮ x yn a n2 … ann n ][ ][ ] Układ jest oznacznony, ma (dokładnie jedno rozwiązanie) jeżeli wyznacznik macierzy A jest różny od 0 czyli ∣A∣≠0 . O macierzy A, której wyznacznik jest różny od zera mówimy, że jest nieosobliwa. PRZYKŁAD 2x1 −x2 +5x 3=6 4x1−x 2 +3x 3=4 −4x1 + x 2−4x3 =−3 W postaci macierzowej: A X Y x1 2 −1 5 6 ∗ = 4 −1 3 x2 4 −4 1 −4 x 3 −3 [ ][ ][ ] Wzory Kramera (metoda wyznacznikowa) Krok 1 Obliczamy wartość wyznacznika macierzy A. Jeżeli ∣A∣=0 to układ nie ma dokładnie jednego rozwiązania – koniec obliczeń. Dla powyższego układu ∣A∣=−2 . Można kontynuować obliczenia. Krok 2 Obliczamy wartości poszczególnych niewiadomy na postawie następującej zależności: ∣A ∣ x i= i ∣A∣ gdzie ∣Ai∣ to wartość wyznacznika macierzy powstałej przez zastąpnienie i-tej kolumny przez wektor wynikowy Y. Dla naszego przykładu mamy: [ 6 −1 5 A 1= 4 −1 3 −3 1 −4 ] [ 2 6 5 A 2= 4 4 3 −4 −3 −4 ] [ 2 −1 6 A3= 4 −1 4 −4 1 −3 Stad, wartości niewiadomych xi wynoszą: ∣A ∣ ∣ 4 ∣ ∣A ∣ ∣30∣ x 1= 1 = =−2 x 2= 2 = =−15 ∣ A ∣ ∣−2∣ ∣ A ∣ ∣−2∣ ] ∣A ∣ ∣ 2 ∣ x3= 3 = =−1 ∣ A ∣ ∣−2∣ Metoda eliminacji Gaussa Krok 1 – sprawdzenie wartości wyznacznika Obliczamy wartość wyznacznika macierzy A. Jeżeli ∣A∣=0 to układ nie ma dokładnie jednego rozwiązania – dla naszych laboratoriów oznacza to koniec obliczeń (metoda Gaussa umożliwia obliczenie rozwiązania układu nieoznaczonego jednak wykracza to poza zakres naszego materiału). Dla powyższego układu ∣A∣=−2 . Można kontynuować obliczenia. Krok 2 – utworzenie macierzy rozszerzonej W celu ułatwienia procesu rozwiązywania układu równań, towrzymy macierz rozszerzoną R przez dopisanie do macierzy głównej A wektora wynikowego Y: A [ a11 a12 … a1n R= a21 a22 … a2n ⋮ ⋱ an1 an2 … ann Y y1 y2 ⋮ yn ] W rozważanym przez nas przypadku macierz rozszerzona R wynosi: A Y 2 −1 5 6 R= 4 −1 3 4 −4 1 −4 −3 [ ] Krok 3 – zerowanie elementów pod główną przekątną Dokonujemy kolejnych przekształceń macierzy rozszerzonej R aż jej „podmacierz” A przyjmie formę macierzy trójkątnej górnej (pod główną przekątną będą znajdowały się tylko 0). Zerowanie elementów pod główną przekątną dokonujemy za pośrednictwem elementów znajdujących się na głównej przekątnej, czyli elementów r i i , pod warunkiem, że są one różne od 0 ( r i i≠0 ). Jeżeli r i i=0 wówczas w ramach i-tej kolumny szuka się r i j≠0 dla j∈[i+1, n] , a następnie dokonujemy zamiany pozycji pomiędzy wierszami i oraz j. (wiersze można zamieniać miejscami, przemnażać przez wartości). Istnieje możliwość dokonywania zamian w kolejności kolumn jednak wówczas należy uwzględnić stosowną zamianę elementów występujących w kolumnie niewiadomych X, pozycji ostatniej kolumny (elementy Y) nie można zmieniać. W naszym przypadku mamy: Krok 3.1 – zerowanie elementów w pierwszej kolumnie, pod r11 (r11!=0) Za pośrednictwem r11 musimy sprawić aby r21=0. Obliczmy więc mnożnik m21 z następującej zależności: r11*m21+r21=0 m21=-r21/r11=-4/2=-2 Wyzerowanie elementu r21 wymaga wykonania operacji na cały drugim wierszu macierzy R, łącznie z dopisanym wektorem wyników Y. Operacji tej dokonujemy poprzez przemnożenie pierwszego wiersza (w1) przez m21 i dodaniu otrzymanego wyniku do wartości wiersza drugiego (w2 = w1*m21+w2). Licząć kolejne elementy wiersza drugiego w naszym przypadku mamy: r21=2*(-2)+4=0 - zerowanie elementu r21 r22=-1*(-2)-1=1 r23=5*(-2)+3=-7 r24=6*(-2)+4=-8 Po pierwszym zerowaniu (elementu r21) macierz R ma postać: 2 −1 5 6 R= 0 1 −7 −8 −4 1 −4 −3 [ ] Przechodzimy do zerowania elementu r31. Obliczamy mnożnik: m31=-r31/r11=-(-4)/2=2 oraz nowe wartośći dla trzeciego wiersza (w3=w1*m31+w3): Po operacji na trzecim wierszu (i wyzerowaniu r31) macierz R zawiera: [ 2 −1 5 6 R= 0 1 −7 −8 0 −1 6 9 ] To kończy zerowanie elementów w pierwszej kolumnie Krok 3.2 – zerowanie elementów w drugiej kolumnie, pod r22 (r22!=0) Obliczamy wartość mnożnika: m32=-r32/r22=-(-1)/1=1 a następnie nowe wartośći w trzecim wierszu macierzy R (w3=w2*m32+w3): Macierz R po tej operacji: 2 −1 5 6 R= 0 1 −7 −8 0 0 −1 1 [ ] To kończy zerowanie elementów w drugiej kolumnie. W trzeciej kolumnie nie ma żadnych elementów pod r33 – macierz R ma formę górnej macierzy trójkątnej. Skończyliśmy zerowanie elementów macierzy. Krok 4 – odwrotna eliminacja Gaussa [] x1 X = x2 x3 Mając macierz główną w formie górnej macierzy trójkątnej, odwrotną eliminację Gaussa zaczynamy od ostatniego wiersza. Liczymy wartości niewiadomych od xn. W naszym przypadku zaczynamy od wyznacznia wartości x3. Krok 4.1 Z układu równań z trójkątną macierzą R, patrząc na jej ostatni wiersz mamy: 0*x1 + 0*x2 - x3= 1, stąd x3=-1 Macierz niewiadomych to Krok 4.2 Patrzymy teraz na przedostatni (drugi) wiersz macierzy R: 0*x1 + x2 - 7*x3= -8, podstawiamy wartość x3, co daje x2= -8 -7 = -15 Krok 4.3 Patrzymy teraz na ostatni od końca (pierwzsy) wiersz macierzy R: 2*x1 - x2 + 5*x3= 6, podstawiamy wartości x2 i x3, co daje Rozwiązaniem układu jest wektor [ ] −2 X = −15 −1 . x1= (6 - 15 + 5)/2 = -4/2 = -2 Wskazówki dla w pełni automatycznego zapisania metody Gaussa Część pierwsza – zerowanie elementów pod główną przekątną. Ostatecznie będą dwie pętle ale lepiej to zrobić etapami. Pętla wewnętrzna odpowiada za zerowanie elementów w jednej kolumnie. Elementy zeruje się od pierwszego elementu za główną przekątną czyli od numerKolumny+1. Zerujemy elemety do końca, do ostatniego wiersza. Pętla zewnętrzna odpowiada za przechodzenie po kolejnych kolumnach, w których elementy będą zerowane. Dla 1 kolumny zerowanie jest od wiersza 2. Dla 2 kol. od wiersza 3, ... Część druga – odwrotna eliminacja Gaussa. Będą dwie pętle. Ostatnią niewiadomą xn liczymy jako pierwszą na samym początku, poza pętlami. Pęla zewnętrzna przechodzi od przedostatniego wiersza do pierwszego – krok w pętli for ma być -1. Pętla wewnętrzna liczy sumy odpowiednich współczynników rwi pomnożonych przez policzone w wcześniejszych wierszach (tych od ostatniego) wartości xi. Początek sumowania jest do elementu leżącego za elementem na głównej przekątnej, czyli numerWiersza+1 (według numeracji z pętli zewnętrznej). Na końcu pętli zewnętrznej liczymy wartości xw=(rw,n+1 – suma)/rw,w gdzie w to indeks pętli zewnętrznej.