Professional Documents
Culture Documents
Numeric Methods Gauss Jordan Elimination
Numeric Methods Gauss Jordan Elimination
Numeric Methods Gauss Jordan Elimination
Lidia Łuczkiewicz
gdzie
Wybieramy element który jest największy co do modułu i zamieniamy i-ty wiersz, w którym
się znajduje z j-tym wierszem mnożąc lewostronnie przez macierz P, która jest macierzą
jednostkową z przestawionymi jedynkami w i-tym i j-tym rzędzie
Od i-tego wiersza poza j-tym odejmujemy j-ty wiersz pomnożony przez iloraz wyrazu a ij i a jj
Algorytm
function [x, texe] = GJ(A,b)
tic;
Ab = [A b];
n = numel(b);
for j= 1 : n
P = eye(n);
[~, k] = max(abs(Ab(j : n, j)));%wybór elementu głównego
k = k + j - 1;
P(j,j) = 0;
P(k,k) = 0;
P(k,j) = 1;
P(j,k) = 1;
Ab = P * Ab;%zamiana wierszy
for i = 1:n
if i ~= j
l = (Ab(i, j)/Ab(j, j));
Ab(i,:) = Ab(i,:) - l*Ab(j,:);%zerowanie kolumn
end
end
end
b = Ab(:,end);
x = zeros(n,1);
for i = 1:n
x(i) = b(i)/Ab(i,i);
end
texe = toc;
czas obliczeń
liczba równań 5 10 25 50 100 200
Gauss-Jordan(s) 0.0049 0.0001 0.0003 0.0031 0.0107 0.0607
Gauss-Seidel(s) 0.0050 0.0005 0.0013 0.0057 0.0063 0.0159
błąd rozwiązania
liczba równań 5 10 25 50 100 200
Gauss-
0.03 0.11 0.51 1.72 5.31 17.72
Jordan(1e-13)
Gauss-Seidel(1e-
0.445 1.090 1.161 1.574 0.950 1.136
8)
Charakterystyki błędu i czasu rozwiązania dla metody Gaussa-Jordana prezentują się podobnie jak w
poprzednim eksperymencie. Błędy są około cztery razy większe, ale nadal rzędu 1e-13. Czas
rozwiązania z początku maleje i dla 100 zaczyna rosnąć wykładniczo. Czas rozwiązań dla danych
macierzy i macierzy danych w poprzednim eksperymencie pozostaje praktycznie taki sam z lekkimi
odchyleniami dla niższych rzędów.
Dla metody Gaussa-Seidla błąd rozwiązania jest rzędu 1e-8, choć dla niewielkiej ilości równań
gwałtownie rośnie, a następnie maleje dla 100 równań, dalej rośnie. Trudno jest określić jego
dokładną charakterystykę ze względu na małą ilość danych. Podobnie czas rozwiązania jest
nieregularny-znacząco maleje dla mniejszych rzędów, dalej rośnie w przybliżeniu wykładniczo.
Porównując te dwie metody, druga jest zdecydowanie szybsza dla większej liczby równań, za to
kosztem większego błędu obliczeń.
gdzie
oraz
Algorytmy:
Gauss-Jordan
function [a] = approxGJ(xi, yi, n)
A = zeros(numel(xi), n+1);
for i = 0 : n
A(:, i + 1) = xi.^(i);
end
b = A'*yi;
G = A'*A;
a = GJ(G, b);
a = flip(a);
Gauss-Seidel
function [a] = approxGS(xi, yi, n)
A = zeros(numel(xi), n+1);
for i = 0 : n
A(:, i + 1) = xi.^(i);
end
b = A'*yi;
G = A'*A;
a = GJ(G, b);
a = flip(a);
Rozkład QR
Ponieważ macierz Grama jest źle uwarunkowana, możemy zastosować rozkład QR macierzy A.
Następnie mnożymy obustronnie z lewej strony przez transponowaną macierz QT . Ponieważ macierz
R jest macierzą trójkątną górną, współczynniki wyznaczamy metodą backward substitution.
Algorytm
function [a] = approxQR(xi, yi, n)
A = zeros(numel(xi), n+1);
for i = 0 : n
A(:, i + 1) = xi.^(i);
end
[Q, R] = qr(A);
b = Q'*yi;
n = n+1;
a = zeros(n,1);
a(n) = b(n)/R(n,n);
for k = n-1:-1:1
sum = 0;
for j = k+1:n
sum = sum + R(k,j)*a(j);
end
a(k) = (b(k) - sum)/R(k,k);
end
a = flip(a);
Porównanie kolejno metod Gaussa-Jordana, Gaussa-Seidla oraz rozkładu QR na
wykresach oraz w tabeli.
Błąd liczony w normie euklidesowej
Stopień GJ GS QR
3 0.8109 0.8109 0.8109
5 0.6792 0.6792 0.6792
7 0.6178 1.3095e+4 0.6178
9 0.0036 6.5882e+5 0.0036
10 1.333e-10 2.3186e+7 1.1191e-13
stopień GJ GS QR
3 1.3700 1.3700 1.3700
5 1.1866 1.1866 1.1866
7 1.0173 2.7716e+4 1.0173
9 0.0062 1.0648e+6 0.0062
10 1.5643e-10 4.5446e+7 1.1908e-13
Metody Gaussa-Jordana oraz rozkład QR dają prawie identyczne wyniki z wyjątkiem stopnia 10, dla
którego rozkład QR ma około 1000 razy mniejszy błąd, przy czym dla obu metod jest on niewielki,
nieprzekraczający rzędu 1e-10. Metoda Gaussa-Seidla daje te same wyniki dla stopni 3 i 5, natomiast
dla reszty błąd gwałtownie rośnie aż do rzędu 1e+7, co widoczne jest na wykresach-funkcja
aproksymująca ma znaczne odchylenia od danych.
Wszystkie metody dobrze generalizują rozkład danych dla małych stopni, natomiast dla większych
metoda Gaussa-Seidla jest zupełnie nieefektywna, a pozostałe dwie zbyt mocno skupiają się na
przecięciu wykresu z danymi, gdzie sensowniejszy jest ogólny zarys rozkładu danych.