|
POLITECHNIKA WROCŁAWSKA
|
Łukasz Kopeć 177127 |
Wydział: Elektryczny Termin: Wtorek Godz. 1315-1445
|
|
|
|
|
Data ćw: 21.02.2012 |
|
Prowadzący:
Dr inż. Piotr Pierz |
Laboratorium - metody numeryczne |
|||
|
SPRAWOZDANIE NR 1 TEMAT: Metoda eliminacji Gaussa rozwiązywania układu równań liniowych |
Ocena:
|
Cel ćwiczenia.
Wykorzystanie metody eliminacji Gaussa w środowisku Matlab do rozwiązywania układów równań liniowych
Przebieg ćwiczenia.
rozwiązanie układu równań liniowych
clear all;
clc;
% Przykladowa macierz:
A=[5,-2,1,-1;1,6,-2,3;1,-3,4,0;2,1,-5,4];
% wektor prawej strony
B=[4;3;12;10];
disp('Macierz wspolczynnikow:'); A,
disp('Wektor prawej strony:'); B,
% Rozmiar macierzy
n=size(A,1);
% I krok: eliminacja zmiennych
for i=2:n, % zacznij od drugiego wiersza
for k=i:n, % w każdym przejściu zmień wszystkie wiers
% zaczynając od wiersza i-tego
p=A(k,i-1)/A(i-1,i-1); % współczynnik skalujący
for l=1:n, % odejmij wiersze od siebie
if l<i,
A(k,l)=0;
else
A(k,l)=A(k,l)-A(i-1,l)*p;
end;
end;
B(k)=B(k)-B(i-1)*p; % odejmij wiersze wektora prawej strony
end;
end;
% II krok: odwrotne podstawianie
for i=n:-1:1,
p=0;
for k=(i+1):n,
p=p+A(i,k)*X(k);
end;
X(i,1)=(B(i)-p)/A(i,i);
end;
disp('Rozwiązanie:'); X,
% Sprawdzenie
disp('Błąd rozwiązania:');
E=A*X-B,
Wyniki:
Macierz wspolczynnikow |
Wektor prawej strony |
Rozwiązanie |
Błąd rozwiązania |
A =
5 -2 1 -1 1 6 -2 3 1 -3 4 0 2 1 -5 4 |
B =
4 3 12 10 |
X =
0.8270 -1.3676 1.7676 4.6378 |
E =
1.0e-015 * 0 -0.8882 0 0 |
b) obliczanie wyznacznika macierzy
clear all
clc
A=[5 -2 1 -1;1 6 -2 3;1 -3 4 0; 2 1 -5 4],
B=[4;3;12;10],
n=size(A,1);
detA=1;
detA2=det(A);
A2=A;
%utworzenie macierzy trójkątnej z macierzy A
for i=2:n,
for k=i:n,
p=A(k,i-1)/A(i-1,i-1);
for l=1:n,
if l<i,
A(k,l)=0;
else
A(k,l)=A(k,l)-A(i-1,l)*p;
end;
end;
B(k)=B(k)-B(i-1)*p;
end;
end;
disp('Macierz trójkątna:'); A,
%obliczanie wyznacznika macierzy trójkątnej
for i=1:n,
detA=detA*A(i,i);
end
disp('Wyznacznik macierzy A:'); detA,
disp('Błąd metody:'); d=detA-detA2,
Wyniki:
Macierz trójkątna |
Wyznacznik macierzy A |
Błąd metody |
A =
5.0000 -2.0000 1.0000 -1.0000 0 6.4000 -2.2000 3.2000 0 0 2.9063 1.5000 0 0 0 5.9677 |
detA =
555.0000 |
Błąd metody:
d =
0 |
c) odwracanie macierzy kwadratowej
n=size(A,1);
B=eye(n);
for k=1:n
b=B(:,k);
x=gauss(A,b);
A1(:,k)=x;
end
disp('wartość');A1
%porównanie z procedurą MATLABA inv(A)
C=inv(A)
Macierz A1 |
Odwrócona macierz A1 |
inv(A) |
A1 = 0.1968 0.1968 0.1968 0.1968 0.0683 0.0683 0.0683 0.0683 -0.1486 -0.1486 -0.1486 -0.1486 -0.3012 -0.3012 -0.3012 -0.3012 |
A1 = 0.1968 0.0522 -0.0281 -0.0040 0.0683 0.1406 -0.1526 -0.1647 -0.1486 0.1647 0.4498 0.0643 -0.3012 0.1446 0.6145 0.3735 |
C = 0.1968 0.0522 -0.0281 -0.0040 0.0683 0.1406 -0.1526 -0.1647 -0.1486 0.1647 0.4498 0.0643 -0.3012 0.1446 0.6145 0.3735
|
Wnioski:
Przeprowadzone ćwiczenia miały na celu rozwiązanie układu równań liniowych metodą eliminacji Gaussa. W pierwszym punkcie zadeklarowałem przykładowe macierze- macierz A ze współczynników układu równań oraz macierz B jako wektor prawej strony układu. Wykorzystałem plik „EL_GAUSA.m” , w którym dzięki pętli for i odpowiedniej modyfikacji otrzymałem rozwiązanie układu oraz jego błąd.
W punkcie drugim skorzystałem z pętli for z pierwszego etapu do utworzenia macierzy trójkątnej i opracowanie procedury do obliczania wyznacznika macierzy. Widać, że metoda ta nie wykazała błędu rozwiązania.W ostatnim punkcie opracowałem program do odwracania macierzy kwadratowej. Porównując wynik do procedury Matlaba inv(A) nie widać różnicy. Jest ona na tyle mała, że liczby różnią się kilka miejsc po przecinku.