POLITECHNIKA LUBELSKA
LABORATORIUM
„Metod numerycznych”
Rok akademicki
2012/2013
Temat ćwiczenia:
Rozwiązywanie układów równań liniowych metodami:
- eliminacji Gaussa – metoda skończona.
- iteracji prostych Jacobiego – metoda przybliżona.
Data wykonania
01.12.2012
Piotr Grobel EIST 3.1
1. Schemat układu:
2. Parametry elementów obwodu:
R=10Ω
E=100V
Eliminacja Gaussa – metoda skończona.
Skrypt:
clear;
clc;
format(9,"v");
A= [40,-10,0,-10,0,0,0,0,0,0,0;..
-10,40,-10,0,-10,0,0,0,0,0,0;..
0,-10,40,0,0,-10,0,0,0,0,0;..
-10,0,0,40,-10,0,-10,0,0,0,0;..
0,-10,0,-10,60,-10,-10,-10,0,-10,0;..
0,0,-10,0,-10,40,0,-10,0,0,0;..
0,0,0,-10,-10,0,40,0,-10,0,0;..
0,0,0,0,-10,-10,0,40,0,0,-10;..
0,0,0,0,0,0,-10,0,40,-10,0;..
0,0,0,0,-10,0,0,0,-10,40,-10;..
0,0,0,0,0,0,0,-10,0,-10,40]
//Zapisanie macierzy współczynników
b=[0;0;0;0;0;0;0;0;100;0;100;] //Zapisanie wektora wyrazów wolnych
Ab=[A b]
//Zerowanie macierzy
for j=1:11
for i=j+1:11
L=Ab(i,j)/Ab(j,j)
Ab(i,:)=Ab(i,:)-L*Ab(j,:)
end;
end;
// Postępowanie odwrotne
for i=11:-1:1
S= Ab(i,11+1);
if i<11 then
for j=i+1:11
S=S-X(j)*Ab(i,j)
end
end
X(i)=S/Ab(i,i)
end
Xtest=linsolve(A,-b) // Sprawdzenie funkcją linsolve
Iteracji prostych Jacobiego – metoda przybliżona.
Dokładność do 0.001
clear;
clc;
format(9,"v");
A= [40,-10,0,-10,0,0,0,0,0,0,0;..
-10,40,-10,0,-10,0,0,0,0,0,0;..
0,-10,40,0,0,-10,0,0,0,0,0;..
-10,0,0,40,-10,0,-10,0,0,0,0;..
0,-10,0,-10,60,-10,-10,-10,0,-10,0;..
0,0,-10,0,-10,40,0,-10,0,0,0;..
0,0,0,-10,-10,0,40,0,-10,0,0;..
0,0,0,0,-10,-10,0,40,0,0,-10;..
0,0,0,0,0,0,-10,0,40,-10,0;..
0,0,0,0,-10,0,0,0,-10,40,-10;..
0,0,0,0,0,0,0,-10,0,-10,40] //macierz współczynników
b=[0;0;0;0;0;0;0;0;100;0;100;] //macierz wyrazów wolnych
k=50; // liczba iteracji
L=tril(A, -1) // macierz poddiagonalna
D=diag(diag(A)) // macierz diagonalna
U=triu(A,1) // macierz naddiagonalna
Dinv = inv(D) // macierz odwrotna z D
X(:,1)=b // Pierwsze przybliżenie
for i=2:k // Dokładność 0.001
X(:,i)=-Dinv*(L+U)*X(:,i-1)+Dinv*b // Iteracje
if sum(abs(X(:,i)-X(:,i-1)))<0.001 // Dokładność
plot(1:i-1, X(:, 1:i-1)) // Rysowanie wykresu
break; // Przerwanie pętli
end; // Koniec if
end; // Koniec pętli for
Wykres:
Dokładność do 0.000001
clear;
clc;
format(9,"v");
A= [40,-10,0,-10,0,0,0,0,0,0,0;..
-10,40,-10,0,-10,0,0,0,0,0,0;..
0,-10,40,0,0,-10,0,0,0,0,0;..
-10,0,0,40,-10,0,-10,0,0,0,0;..
0,-10,0,-10,60,-10,-10,-10,0,-10,0;..
0,0,-10,0,-10,40,0,-10,0,0,0;..
0,0,0,-10,-10,0,40,0,-10,0,0;..
0,0,0,0,-10,-10,0,40,0,0,-10;..
0,0,0,0,0,0,-10,0,40,-10,0;..
0,0,0,0,-10,0,0,0,-10,40,-10;..
0,0,0,0,0,0,0,-10,0,-10,40] //macierz współczynników
b=[0;0;0;0;0;0;0;0;100;0;100;] //macierz wyrazów wolnych
k=50; // liczba iteracji
L=tril(A, -1) // macierz poddiagonalna
D=diag(diag(A)) // macierz diagonalna
U=triu(A,1) // macierz naddiagonalna
Dinv = inv(D) // macierz odwrotna z D
X(:,1)=b // Pierwsze przybliżenie
for i=2:k // Dokładność 0.000001
X(:,i)=-Dinv*(L+U)*X(:,i-1)+Dinv*b // Iteracje
if sum(abs(X(:,i)-X(:,i-1)))<0.000001 // Dokładność
plot(1:i-1, X(:, 1:i-1)) // Rysowanie wykresu
break; // Przerwanie pętli
end; // Koniec if
end; // Koniec pętli for
Zestawienie wyników:
Gaussa | Linsolve | Jacobiego z dokładnością 0.001 (36 iteracji) |
Jacobiego z dokładnością 0.000001 (50 iteracji) |
---|---|---|---|
0.245412 | 0.245412 | 0.245574 | 0.245414 |
0.369185 | 0.369185 | 0.369408 | 0.369188 |
0.245412 | 0.245412 | 0.245574 | 0.245414 |
0.612463 | 0.612463 | 0.612717 | 0.612466 |
0.985915 | 0.985915 | 0.986247 | 0.98592 |
0.612463 | 0.612463 | 0.612717 | 0.612466 |
1.218523 | 1.218523 | 1.218778 | 1.218527 |
1.218523 | 1.218523 | 1.218778 | 1.218527 |
3.275715 | 3.275715 | 3.275877 | 3.275717 |
1.884336 | 1.884336 | 1.88456 | 1.884339 |
3.275715 | 3.275715 | 3.275877 | 3.275717 |
Wnioski:
Porównując wszystkie wyniki uzyskane przez wszystkie metody stwierdzamy, że najdokładniejsza jest metoda Gaussa, ponieważ jej rezultaty są identyczne jak w przypadku funkcji Linsolve. Mniej dokładną okazuje się metoda Jacobiego, otrzymane wyniki różnią się w zależności od przyjętej dokładności lecz różnice w wyniku są nieznaczne.