Układy równań linio- MN 9 wych Część I Trochę teorii Wprowadzenie: wszystko jest Ax = b slajd Uwagi wstępne Rozwiązywanie układów równań liniowych piłka nożna metod numerycznych Większość zagadnień inżynierskich sprowadza się do przewidywania odpowiedzi projektowanego urządzenia na działanie zewnętrznych czynników b Układ A x Najprostsza sytuacja: mamy n czynników zewnętrznych b i, i = n, tyle samo parametrówx i chcemy wyznaczyć i zakładamy, że relacje pomiędzy nimi są najprostsze a x +a 2 ++a n x n = b a 2 x +a 22 ++a 2n x n = b 2 albo Ax = b a n x +a n2 ++a nn x n = b n slajd 2 Czy Ax = b zawsze da się rozwiązać? W MATLAB/Scilab wszystko jest (niby) proste ) wporowadz A i b; 2) A\b 3) Koniec?! Ścisła matematyka Jeżeli A =, brak jednoznacznego rozwiązania Przykłady: x + = x + = rozwiązań x + = x + = rozwiązań Realne życie Układ 7x + 5 = 22 7x + 5 = 22 w matematyce mamy rozwiązań w MATLABie/Scilabie jedno dokładne rozwiązanie A=[7 5; 7 5]; b=[22; 22]; x=a\b x = [-588; 8] (ML) x = [294; ] (Sci) DLACZEGO!!!??? Przecież A =! Nie w komputerze slajd 3 Sens geometryczny wyznacznika macierzy
34 9-5-22 Układy równań liniowych 2 A A = x+y = 2 y = 2 x x y = y = x x y = 2 y = x+2 x y = y = x+ x y = 2 x y = slajd 4 A Wniosek Układowi równań z A geometrycznie odpowiada kilka prawie równoległych linii Przykład źle uwarunkowanego układu równań x y = 2 εy = 2 ()-(2) x (+ε)y = x y = 2 x = 2 Dlaε = 2 Dla ε = 2 y = y = 2/ε x = 2(+/ε) x = 2 y = Wniosek Rozwiązanie układu równań z A może być bardzo wrażliwe na błędy obliczeniowe Jest to cecha układu, nie komputera! Czy takie układy zdarzają się w praktyce? Zagadnienia odwrotne (znamy skutek, szukamy przyczynę) z reguły prowadzą do układów źle uwarunkowanych Układy ekologiczne, serce slajd 5 Źle uwarunkowane układy obok nas F F [ ][ ] K K u = K K+k u 2 F K k F k K 2 3 [ F ] [ k k k K+k 2 3 ][ ] [ u F = u 2 ] JeżeliK k (npk =,k = ) pierwszy układ ma macierz źle uwarunkowaną Przy obliczeniach z pojedynczą dokładnością (6-7 znaków mantysy) będziemy mieć dodatkowy poważny problem powiązany z zaokrąglaniem Wniosek Przed rozwiązywaniem układu równań zawsze sprawdzamy czy warto to robić slajd 6 Rozwiązywanie URL teoria Odwracanie macierzy AA = I, gdzie I = Warunki Macierz A musi być kwadratowa 2 A Właściwości macierzy jednostkowej I AI = IA = A xi = Ix = x slajd 7 Macierzowy zapisukładu równań a x +a 2 +a 3 x 3 = b Układ równań a 2 x +a 22 +a 23 x 3 = b 2 można zapisać jako a 3 x +a 32 +a 33 x 3 = b 3
34 9-5-22 Układy równań liniowych 3 a a 2 a 3 a 2 a 22 a 23 x = b b 2 a 3 a 32 a 33 x 3 b 3 Pozwiązywanie układu równań liniowych poprzez odwracanie macierzy Ax = B, gdzie A jest macierzą kwadratową ( A ), x i B są wektorami kolumnowymi 2 A Ax = A B 3 Ix = A B 4 x = A B slajd 8 Szczególne rodzaje macierzy Macierz symetryczna A = A T 2 3 2 3 2 ZALETA Przechowujemy w pamięci tylko połowę macierzy (dolny lub górny trójkąt) Szczególne rodzaje macierzy 2 Macierz trójkątna dolna (L od Low ) l l 2 l 22 L = l n l n2 l nn ZALETA Układ równań Lx = b jest łatwo rozwiązać Norma i uwarunkowanie Macierz pasmowa (rzadka) 2 3 2 3 2 2 3 3 2 3 4 ZALETA Przechowujemy w pamięci tylko pasmo lub jego połowę (w przypadku macierzy symetrycznej) Macierz trójkątna górna (U od Up ) u u 2 u n u 22 u 2n U = u nn ZALETA Układ równań Ux = b jest łatwo rozwiązać slajd 9 slajd Norma macierzy Wprowadzenie Co to takiego mała wartość A? eps x+eps y = 2eps Układ równań eps x eps y = jest dobrze uwarunkowany, chociaż A = eps ( eps) eps eps = 2eps 2 6 x+ 6 y = 2 Układ równań 6 x+( 6 +)y = jest źle uwarunkowany, chociaż A = 6 ( 6 +) 6 6 = 6 Wniosek O tym czy URL jest dobry czy zły świadczy raczej nie wartość wyznacznika macierzy sama w sobie slajd
34 9-5-22 Układy równań liniowych 4 Pojęcie normy wektora lub macierzy Normy wektorów (powtórzenie) x p = p x p + p ++ x n p = ( n i= x i p ) p, p =,2,, Najbardziej popularne normy x = x + ++ x n norma pierwsza ( Manhattan ) x 2 = +x2 2 ++x2 n norma druga (Euklidesowa) x = max( x,,, x n ) norma maksimum Przykład Wektor x x 2 x (, 2, -3) 6 3747 3 (2, -4, 6) 2 74833 6 slajd 2 Normy macierzy Formalne definicje ( norm dla macierzy kwadratowych n ) n A = max a i,, a in maks spośród sum w kolumnach i= i= n n A 2 = norma Euklidesowa i= j= A max = n max i,j a 2 ij ( a ij ) norma maksimum Wada Większość takich norm różni się od norm wektorowych Normy macierzy indukowane przez normy wektorów (po owocach) A p = sup Ax p x p, x p Skutek: A p x p Ax p Sens fizyczny tak zdefiniowana norma jest miarą maksymalnego wydłużenia wektora wskutek mnożenia go przez macierz A slajd 3 Wskaźnik uwarunkowania łagodne wprowadzenie Najprostsza macierz pojedyncza liczba Dla A = 2 i dowolnego wektora x, Ax = 2x Dla każdej normy Ax p / x p = 2, czyli A = 2 co oznacza po prostu, że wektor stał się dwukrotnie dłuższy Dla A = 2, A = /2 Dla dowolnego wektora x, A x = /2x Analogicznie, jak poprzednio A = /2 co oznacza, że mnożenie dowolnego wektora przez A skraca go połowę Wg definicji AA = I, a I = więc nie dziwnie, że A A = Ale to tylko w tym prostym przypadku slajd 4 Wzmacnianie błędów obliczeniowych przy rozwiązywaniu URL Zamiast dokładnego równania Ax = b () zawsze rozwiązujemy A(x+ x) = b+ b (2) 2 Odejmując stronami (2) i () otrzymujemy A x = b x = A b x A b (3) 3 Z tego, że Ax = b mamy A x b albo A x b (4)
34 9-5-22 Układy równań liniowych 5 4 Po mnożeniu stronami (3) i (4) ostatecznie mamy x x A A b b = cond(a) b b 5 URL z dużym wskaźnikiem uwarunkowania cond(a) są wrażliwe na każde zaburzenie wektora prawej strony układu b slajd 5 Przykład: wyznaczanie A 2 i A 2 Ax A x x A x x Ax Dla x [ p ] = A p [ = sup Ax ] p 5 5 A = A = 5 5 [ [ ] [ [ ] + 5 x = Ax = = A ] ] x = 2 Dla x 5 T = [cos(π/6), sin(π/6)] (Ax) T = [3663,3663], (A x) T = [683,83] 3 Dla x T = [cos(π/3), sin(π/3)] (Ax) T = [3663, 3663], (A x) T = [683, 83] 4 Dla x T = [,] (Ax) T = [, ], (A x) T = [5, 5] Ostatecznie A 2 = 2, A 2 = / 2 cond(a) = slajd 6 Normy dla źle uwarunkowanych macierzy A = A = A = [ ] [ ] 5 [ ] 9 A = A = A = [ ] A = A 2 = 68 A 2 = 68 [ ] 2 A = 5 A 2 2 2 = 78 A 2 = 356 [ ] 9 A = A 2 = 95 A 2 = 95 slajd 7 Część II Metody dokładne (bezpośrednie) rozwiązywania URL Uwagi wstępne Podsumowanie i wskazówki praktyczne slajd 8 Nie każdy układ równań da się rozwiązać nawet jeżeli A I to nie jest wina komputera
34 9-5-22 Układy równań liniowych 6 Wskaźnik uwarunkowania macierzy cond(a) pozwala ocenić możliwość uzyskania w miarę dokładnego rozwiązania URL Jest to współczynnik wzmocnienia najmniejszych zmian wektora b (obciążenia) Niestety wyznaczanie wskaźnika uwarunkowania jest bardzo czasochłonne (z powodu wyznaczania A ) i nie jednoznaczne (z powodu dużej ilości różnych norm) Praktycznie zamiast cond(a) wykorzystuje się fakt, że dla źle uwarunkowanej macierzy A jest wielokrotnie mniejszy od wielkości typowego jej elementu slajd 9 Jakimi metodami NIE rozwiązuje się URL x = A b to tylko teoria Najszybsza metoda wyznaczania macierzy odwrotnej wymaga rozwiązania Ax = b i dlanprawych stron 2 Metoda macierzy odwrotnej nie pracuje nawet w najprostszych sytuacjach Dla równania 7x = 2: zwykle dzielenie x = 2/7 = 3 albo x = 7 2 = 42857 2 = 2999997 3 Tradycyjna szkolna metoda Cramera (polega na obliczaniu wyznaczników) jest kompletnie nieprzydatna do obliczeń na komputerze Ilość operacji w tym algorytmie rośnie jak (n + )! Szacunkowy czas trwania obliczeń: Rozwiązanie układu z 5 równań na komputerze ze starym procesorem Pentium kilka miesięcy Rozwiązanie układu z 5 równań na komputerze o mocy Gflop 96 47 lat 4 Wszystkie realnie używane metody polegają na przekształceniu URL do bardziej prostszego układu slajd 2 Najprostsze sytuacje Co można robić z URL? Przekształcenia, które prowadzą do układów ekwiwalentnych Zmiana kolejności równań (wierszy macierzy) Zmienia znak A x+y = 2 x y = x y = x+y = 2 Zmiana kolejności zmiennych (kolumn macierzy) Zmienia znak A x+y = 2 y+x = 2 x y = y+x = Mnożenie równania przez liczbę a Zmienia A naa A x+y = 2 2 2x+2y = 4 x y = x y = Dodawanie/odejmowanie równań stronami Nie zmienia A x+y = 2 x 9y = 2 x y = + x y = slajd 2 Superłatwizna W wyniku przekształceń macierze niektórych URL można sprowadzić do postaci diagonalnej a x b a x = b a 22 = b 2 a 22 = b 2 a nn x n b n a nn x n = b n Rozwiązanie takiego ukłądu jest trywialne x i = b i /a ii,i = n
34 9-5-22 Układy równań liniowych 7 De facto nie jest to już układ lecz n niezależnych równań w stylu 2x = 4 y = 5 slajd 22 Łatwizna zwykła Każdy URL można sprowadzić do układu z macierzą trójkątną (górną lub dolną) a x b a a 2 a n x b a 2 a 22 = b 2 a 22 a 2n = b 2 a n a n2 a nn x n b n a nn x n b n slajd 23 Rozwiązanie dolnego URL (forward substitution) Uwaga praktyczna Wzory są szczególnie proste przy a ii = a x b a 2 a 22 = b 2 a n a n2 a nn x n b n a 22 = b 2 a 2 x a n2 a nn x n b n a n x x = b /a 2 = b 2 a 2 x a 22 3 x 3 = b 3 a 3 x a 32 a 33 4 x i = b i a ii i a ij x j j= function x = forward_subs(l, b) n = max(size(l)); x = zeros(n,); // wektor x musi być kolumnowy x() = b()/l(,); // x obliczamy " ręcznie " for i = 2:n j = :i ; // Tu j jest zakresem! x(i) = (b(i) L(i, j) x(j))/l(i, i ); end endfunction Rozwiązanie górnego URL (Backward substitution) x n = b n /a nn a a n a n x a n n a n n a nn a a n x = a n n x n x n x n = b b n b n b a n x n b n a n n x n slajd 24
34 9-5-22 Układy równań liniowych 8 2 x n = b n a n n x n a n n 3 x n 2 = b n 2 a n 2n x n a n 2n x n j=i a n 2n 2 4 x i = n b i a ij x j a ii function x = backward_subs(u, b) n = max(size(u)); x = zeros(n,); // wektor x musi być kolumnowy x(n) = b(n)/u(n,n); // x_n obliczamy "ręcznie" for i = n : : j = i+:n; // Tu j jest zakresem! x(i) = (b(i) U(i,j) x(j))/u(i, i ); end endfunction slajd 25 Metoda eliminacji Gaussa 4x 2y+z = (r) 2x+4y 2z = 6 (r2) x 2y+4z = 7 (r3) 4 2 3 5 5 2 4 7 (r) 4 4 2 3 5 5 5 375 425 (r2) 5 3 A co robić w takiej sytuacji? 4 5 4 3 8 2 2 4 8 4 2 2 4 2 6 (r) 2 4 2 4 7 Metoda Gaussa z wyborem maksymalnego elementu 4 2 3 5 5 3 9 x = [, 2,3] A = 4 3 3 = 36 slajd 26 Na kroku wybieramy maks element w kolumnie i (przez wymianę kolejności 3 równania z ) ustawiamy odpowiednie równanie pierwszym 4 5 2 2 4 8 2 2 4 8 4 3 8 4 3 8 3 4 2 2 4 8 4 5 4 5 2 Na 2 kroku wybieramy maks element w 2 kolumnie (zaczynając od 2 wiersza) i ewentualnie wymieniamy miejscami odpowiednie równania 2 2 4 8 2 2 4 8 3 4 4 5 4 5 3 4 slajd 27 Metody LU dekompozycji Podstawowe kroki Zamieniamy A iloczynem dolnej i górnej macierzy trójkątnych A = LU 2 Nowy układ równań Ax = b LUx = b 3 Wprowadzamy oznaczenie Ux = y, wtedy LUx = b Ly = b 4 Wyznaczamy najpierw y z Ly = b, później x z Ux = y
34 9-5-22 Układy równań liniowych 9 Podstawowa zaleta Przy dekompozycji A LU nie zmieniamy b Pozwala to później wielokrotnie szybko rozwiązywać URL dla różnych b (np wyznaczać naprężenia w nadwoziu samochodu dla różnych wariantów obciążeń) slajd 28 Podstawowe metody LU dekompozycji U U 2 U 3 Metoda Doolittle a L = L 2 U = U 22 U 23 L 3 L 32 U 33 Metoda Crauta L = L L 2 L 22 U = U 2 U 3 U 23 L 3 L 32 L 33 Metoda Choleskiego L = U T Przykład Dlaczego można rozłożyć A na mnożniki na kilka sposobów? Bo 4 = 4 (metoda Doolittle a), 4 = 4 (metoda Crauta),4 = 2 2 (metoda Choleskiego) slajd 29 Metoda Doolittle a L 2 U U 2 U 3 U 22 U 23 = U U 2 U 3 U L 2 U 2 L 2 +U 22 U 3 L 2 +U 23 L 3 L 32 U 33 U L 3 U 2 L 3 +U 22 L 32 U 3 L 3 +U 23 L 32 +U 33 2 Metoda Gaussa, pierwsze kroki: (a) (rown2) - (rown ) L 2 (rown2) (b) (rown3) - (rown ) L 3 (rown3) U U 2 U 3 3 Wynik U 22 U 23 U 22 L 32 U 23 L 32 +U 33 U U 2 U 3 (rown3) - (rown 2) L 32 U 22 U 23 U 33 Podsumowanie slajd 3 Macierz U otrzymujemy z A przez zwykłą eliminację Gaussa 2 Macierz L tworzą mnożniki używane w czasie tej eliminacji 3 Najbardziej oszczędny zapis obydwóch trójkątnych macierzy umieszczenie U U 2 U 3 ich wewnątrz macierzy źródłowej A [L\U] = L 2 U 22 U 23 L 3 L 32 U 33 slajd 3 Przykład 4x 2y+z = (r) 2x+4y 2z = 6 (r2) x 2y+4z = 7 (r3) 4 2 5 3 5 25 5 375 (r2)/ 5 3 Ostatecznie musimy rozwiązać 4 2 2 4 2 2 (r) 2 4 4 4 2 5 3 5 25 5 3 4 2 2 3 5 4 2 4 (r) 4
34 9-5-22 Układy równań liniowych 5 25 5 y y 2 y 3 = 6 7 oraz 4 2 3 5 3 x x 3 = Rozwiązanie y = [; 5;9] x = [; 2;3] slajd 32 y y 2 y 3 Część III Metody iteracyjne (przybliżone) Uwagi wstępne slajd 33 Definicja Metody iteracyjne polegają na zamianie układu równań Ax = b przez x = Bx + c i przeprowadzeniu obliczeń wg schematu x i+ = Bx i + c, i =,2, dopóki nie zostanie spełnione kryterium x i+ x i ε Zalety i wady Wada Praktycznie nigdy nie dostaniemy dokładnego rozwiązania Wada Zbieżność jest tylko jeżeli B < Wada Ilość iteracji zależy od udanego wyboru x Zaleta Przechowujemy w pamięci tylko niezerowe elementy B Zaleta Ilość operacji na każdym kroku n 2 a dla metod dokładnych n 3 Czyli dla równań to się nie opłaca, ale dla 6 slajd 34 Metoda zwykłej iteracji (metoda Banacha, Jakobi) a x +a 2 +a 3 x 3 = b a x = b a 2 a 3 x 3 a 2 x +a 22 +a 23 x 3 = b 2 a 22 = b 2 a 2 x a 23 x 3 a 3 x +a 32 +a 33 x 3 = b 3 a 33 x 3 = b 3 a 3 x a 32 x = b a 2 a 3 x 3 a a a = b 2 a 2 x a 23 x 3 a 22 a 22 a 22 x 3 = b 3 a 3 x a 32 a 33 a 33 a 33 b /a b 2 /a 22 b 3 /a 33 B = a 2 a 3 a a 2 a 23 22 a 22 a 3 a 32 a 33 a 33 c i = b i = a ii slajd 35 Metoda zwykłej iteracji, przykład graficzny x y x,y 2x+y = 4 x+2y = 2 x x,y y xi+ = 2 y i /2 y i+ = +x i /2,y 2 x 3,y 3 x,y x,y slajd 36
34 9-5-22 Układy równań liniowych clear ; Listing : Metoda zwykłej iteracji dla układu równań liniowych function [x, step] = zwykla_iteracja(a, b, x, tol ) max_num_steps = ; n = max(size(a)); b = b/diag(a); for i=:n A(i,:) = A(i,:)/A(i, i ); A(i, i) = ; end for step = :max_num_steps x = x; x = A x + b; dx = sqrt((x x) (x x)); if dx < tol then return; end // Mamy zbieżność, koniec end; // Brak zbieznosci po maks ilości króków x = NaN ones(n,); endfunction A = [4 2 ; 2 4 2; 2 4]; b = [; 6; 7]; x = [; ; ]; tol = ; [x, step] = zwykla_iteracja(a, b, x, tol ); disp("po " + string(step) + " krokach wynik"); disp(x ); Przykład 4x 2y+z = 4x = x+2y z+ 2x+4y 2z = 6 4y = 2x+y+2z 6 x 2y+4z = 7 4z = x+2y+z+7 x 5 25 i+ y i+ = 5 5 x i y i + 275 4 z i+ 25 5 z i 425 x y z 275 4 425 y 2 z 2 = 5 25 5 5 25 5 5 25 = 5 5 = 25 5 5 25 5 5 25 5 + 275 4 425 + 275 4 425 + 275 4 425 275 4 425 nr iteracji 2 25 dokładne rozw x 275 66 938 26 y -4-599 -927-23 -2 z 425 266 2938 326 3 Program realizujący metodę zwykłej iteracji listing?? slajd 37
34 9-5-22 Układy równań liniowych 2 clear ; Listing 2: Metoda Gaussa-Seidela dla układu równań liniowych function [x, step] = Gauss_Seidel(A, b, x, tol ) max_num_steps = ; // maksymalna ilość iteracji n = max(size(a)); b = b/diag(a); for i = :n A(i,:) = A(i,:)/A(i, i ); A(i, i) = ; end for step = :max_num_steps x = x; for i = :n x(i) = A(i,:) x + b(i); end; dx = sqrt((x x) (x x)); if dx < tol then return; end // Mamy zbieżność, koniec end; // Brak zbieznosci po maks ilości króków x = NaN ones(n,); endfunction A = [4 2 ; 2 4 2; 2 4]; b = [; 6; 7]; x = [; ; ]; tol = ; [x, step] = Gauss_Seidel(A, b, x, tol ); disp("po " + string(step) + " krokach wynik"); disp(x ); Metoda Gaussa-Seidela (Libmana ) Udoskonalona metoda zwykłej iteracji x i+ = 5y i 25z i +275 y i+ = 5x i+ +5z i 4 z i+ = 25x i+ +5y i+ +425 x = 5 25 +275 = 5x +5z 4 275 = 5 25 +275 y y = 5x +5z 4 z = 25x +5y +425 z = 25x +5y +425 275 = 5 25 +275 275 = 5 25 +275 y = 5 275+5 4 2625 = 5 275+5 4 z = 25x +5y +425 z = 25x +5y +425 275 = 5 25 +275 2625 = 5 275+5 4 225 = 25 275+5 ( 2625)+425 Znacznie szybsza zbieżność nr iteracji 2 5 dokładne rozw x 275 875 97 y -2625-2438 -22-2 z 225 283 2997 3 Program realizujący metodę Gaussa-Seidela listing?? slajd 38
34 9-5-22 Układy równań liniowych 3 Metoda Gaussa-Siedela graficznie x y,y,y 2 x,y xi+ = 2 y i /2 y i+ = +x i+ /2 x,y x,y slajd 39 Metoda relaksacji (SOR successive over relaxation) x ω = y,y,y 2 x,y xi+ = x i +(+ω)(x gs i+ x i) y i+ = y i +(+ω)(y gs i+ y i) x,y x,y slajd 4 Praktyczna realizacja metody SOR [?] Wyznaczanie parametru relaksacji w praktyce Najpierw robimy k = 5 kroków metodą Gaussa-Seidela Zapamiętujemy wartość k = x k x k 2 Robimy jeszczep kroków metodą Gaussa-Seidela Zapamiętujemy wartość k+p 3 Obliczamy optymalna wartość parametru relaksacji i przełączamy się na SOR 2 ω + p k+p / k Program realizujący metodę SOR listing?? slajd 4 Rewolucyjne zmiany w metodach iteracyjnych nastąpili w połowie lat 9 XX wieku Niejaki Pravin Vaidya wymyślił bardzo udaną metodę na przyspieszenie zbieżności obliczeń iteracyjnych Zamiast opublikować tę pracę, sprzedał ją firmie ANSYS za mln USD Polecam zrobić to same ze swoimi pracami mgr Literatura [] Kiusalaas, J, Numerical Methods in Engineering with MATLAB, Cambridge University Press, 2 Wykład został opracowany w LATEXe za pomocą klasy BEAMER, graficznego pakietu PGF/TikZ i pakietu do tworzenia wykresów PGFPLOTS Obliczenia wewnątrz dokumentu zostały przeprowadzone za pomocą EQC
34 9-5-22 Układy równań liniowych 4 clear ; Listing 3: Metoda SOR dla układu równań liniowych function [x, dx]=gaussseidel(a, b, x, n, num_steps) // Funkcja robi num_steps kroków metodą Gaussa Seidela for step = :num_steps x = x; for i = :n x(i) = A(i,:) x + b(i); end; end; dx = sqrt((x x) (x x)); endfunction function [x, step, omega] = SOR(A, b, x, tol) max_num_steps = ; // maksymalna ilość iteracji num_ini_iter = 5; // Ilość początkowych iteracji G S num_add_iter = 2; // Ilość dadatkowych iteracji do // obliczenia parametru relaksacji n = max(size(a)); b = b/diag(a); for i = :n A(i,:) = A(i,:)/A(i, i ); A(i, i) = ; end // Wstępne iteracji metodą Gaussa Seidela [x, dx] = GaussSeidel(A, b, x, n, num_ini_iter); if dx < tol then return; end // Już mamy zbieżność, koniec // Dodatkowe iteracji metodą Gaussa Seidela [x, dx] = GaussSeidel(A, b, x, n, num_add_iter); if dx < tol then return; end // Już mamy zbieżność, koniec // Wyznaczamy wartość parametru relaksacji omega = 2/( + sqrt( (dx/dx)^(/num_add_iter))); // Metoda SOR for step = num_ini_iter + num_add_iter + : max_num_steps x = x; for i = :n x(i) = omega (A(i,:) x + b(i)) + ( omega) x(i); end; dx = sqrt((x x) (x x)); if dx < tol then return; end // Mamy zbieżność, koniec end; // Brak zbieznosci po maks ilości króków x = NaN ones(n,); endfunction // Test A = [4 2 ; 2 4 2; 2 4]; b = [; 6; 7]; x = [; ; ]; tol = ; [x, step, omega] = SOR(A, b, x, tol); disp("optymalna wartość parametru relaksacji",omega); disp("po " + string(step) + " krokach wynik"); disp(x );