background image

Politechnika Wrocławska

Wydział Elektryczny

Wojciech Calów

Rok studiów : III
Semestr : VI
Rok akad.: 2012/13

 Laboratorium Metod Numerycznych

Data: 

Temat : 

Rozwiązywanie układów równań 

liniowych metodą Gaussa-Seidla

Ocena: 

1. Cel ćwiczenia:

Utworzenie algorytmu Gaussa-Seidla dla podanego układu równań, znalezienie jego 
rozwiązania numerycznego.

2. Programy:

%% GAUSS SEIDEL PARAMET ===========================================

clc; clear 

all

; close 

all

A = [-7 8 2 21; 12 -20 3 4; 2 -1 9 1; -10 6 2 0];

B = [12 -1 4 14];
c = 1;

n = size(A,1);  

% rozmiar A

x1 = ones(n,1); 

% wartosci poczatkowe

k=1;            

% inicjalizacja zmiennej k 

m=20;           

% inicjalizacja zmiennej m 

%% SORTOWANIE =====================================================

for

 i=1:1:n                 

%kolumny

    

for

 j=i:1:n             

%wiersze

        

if

 abs(A(i,i)) < abs(A(j,i)) 

% sprawdzanaie wartosc

            c=j;        

% zapisanie najwiekszego elemetu z wiersza

        

elseif

 abs(A(i,i))== abs(A(j,i))

            c=j;
        

end

;

    

end

;

    tab=A(i,:);     

% zapis tymczasowy wiersza

    A(i,:)=A(c,:);  

% przepisanie wartosci najwiekszej na kolejny 

wiersz

    A(c,:)=tab;
    tabb=B(i);      

% zapis tymczasowy wiersza macierzy B

    B(i)=B(c);      

% przepisanie wartosci najwiekszej na kolejny 

wiersz

    B(c)= tabb;

end

;                

%sprawdzenie obliczen

 

%% PROGRAM

while

 m > 0.000001          

%zadanie dokladno?ci wyniku

    

for

 i=1:n               

%p?tla licz?ca macierz rozwi?za? x   

        S1=B(i)/A(i,i);     

%obliczanie pierwszego sk?adnika

        S2=0;

        

for

 j=1:(i-1)       

%obliczanie drugiego sk?adnika sumy

            S2=S2+A(i,j)*x1(j)/A(i,i);

        

end

        S3=0;

        

for

 j=i+1:n         

%obliczanie trzeciego sk?adnika sumy

background image

            S3=S3+A(i,j)*x1(j)/A(i,i);

        

end

 

        x(i)=S1-S2-S3;   

%obliczanie i-tego wsp macierzy wyniku

    

end

    m=0;

    

for

 i=1:n            

% petla wyszukujaca najwieksza roznice

        

if

 abs(x1(i)-x(i))>m

            m=abs(x1(i)-x(i));  

% wpisywana ona jest do zmiennej m

        

end

  

    

end

  

    x1=x;       

% wprowadzenie nowych wyników jako poprzednie

    k=k+1;      

% zwiekszenie numeru kroku o 1

end

             

% koniec petli while

3. Wyniki

Wynik sortowania :

A =

   -10     6     2     0
    12   -20     3     4
     2    -1     9     1
    -7     8     2    21

Wynik metody Gausa Seidla :

>> x1'

ans =

   -1.7712
   -0.8574
    0.7162
    0.2395

Błąd metody :

>> A*x1'-B'

ans =

  1.0e-005 *

   -0.3605
   -0.7179
   -0.0605
   -0.0415

3. Wnioski

Metoda Gaussa-Seidla ma tą przewagę nad algorytmem Gaussa że możemy znaleźć 
rozwiązania w dokładniejszej postaci, lub możemy tą dokładność zwiększać gdy 
takową potrzebujemy.