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.