Zakład Teorii Sterowania
WYDZIAŁ: EEIiA ROK AKADEMICKI: 2010/2011
KIERUNEK: AIR SEMESTR: IV
NR. GRUPY LAB: 4C3.1
SPRAWOZDANIE Z ĆWICZENIA NR 2
Numeryczne zagadnienia algebry liniowej
Data wykonania ćwiczenia |
Nazwisko prowadzącego ćw, |
Data oddania sprawozdania |
Podpis prowadzącego ćw, |
24.03.2011-07.04.2011
|
Mosiołek |
05.05.2011 |
|
Imię i nazwisko |
Nr Indeksu |
||
Andrzej Biela |
155656 |
||
Patryk Sitek |
161122 |
Cele cwiczenia
Celem cwiczenia jest zapoznanie sie z podstawowymi zagadnieniami numerycznymi algebry liniowej oraz numerycznymi sposobami ich realizacji.
Eliminacja Gaussa bez wyboru elementu głównego
Kod programu:
function[x,L,U]=gauss(A,b)
format long
r=length(A)
U[A b];
for i=1:r
L(i,i)=1
L(i+1:r,i)=Ui+1:r,i)/Ab(i,i)
U(+1:r,:)=Ui+1:r,:)-(L(i+1:r,i)*Ui,:));
end
Eliminacja Gaussa z częściowym wyborem elementu głównego
Kod programu:
function[x,L,U]=gauss(A,b)
format long
r=length(A);
U=[A,b];
for i=1:r
temp=abs(U(i,i));
for j=i:r
if temp<abs(U(j,i))
temp=abs(U(j,i));
temp2=j;
end
end
zamiana=U(i,:);
U(i,:)=U(temp2,:);
U(temp2,:)=zamiana;
if i>1
zamiana=L(i,:);
L(i,:)=L(temp2,:);
L(temp2,:)=zamiana;
end
L(i,i)=1;
L(i+1:r,i)=U(i+1:r,i)/U(i,i);
U(i+1:r,:)=U(i+1:r,:)-(L(i+1:r,i)*U(i,:));
end
Zależność czasu od obliczeń na macierzach pseudolosowych
Kod programu:
function[] = stoper()
macierze=[2 4 8 16 32 64];
format long
for i=1:6
M1=rand(macierze(1,i));
M2=rand(macierze(1,i));
tic,
for j=1:100000
M1*M2; %iloczyn macierzy
end
time(1,i)=toc;
W=rand(macierze(1,i),1);
tic,
for j=1:100000
M1*W; %iloczyn macierzy i wektora
end
time(2,i)=toc;
tic,
for j=1:100000
det(M1); %wyznacznik macierzy
end
time(3,i)=toc;
r=macierze(1,i);
tic,
for j=1:10000
for k=1:r
L(k+1:r,k)=M1(k+1:r,k)/M1(k,k); % Eliminacja Gaussa
M1(k+1:r,:)=M1(k+1:r,:)-(L(k+1:r,k)*M1(k,:));
end
end
time(4,i)=toc;
tic,
for j=1:10000
U=M1;
r=length(U); % Eliminacja Gaussa z częściowym wyborem elementu głównego
for i=1:r
temp=abs(U(i,i));
for j=i:r
if temp<abs(U(j,i))
temp=abs(U(j,i));
temp2=j;
end
end
zamiana=U(i,:);
U(i,:)=U(temp2,:);
U(temp2,:)=zamiana;
if i>1
zamiana=L(i,:);
L(i,:)=L(temp2,:);
L(temp2,:)=zamiana;
end
L(i,i)=1;
L(i+1:r,i)=U(i+1:r,i)/U(i,i);
U(i+1:r,:)=U(i+1:r,:)-(L(i+1:r,i)*U(i,:));
end
end
time(9,i)=toc
tic,
for j=1:10000
trace(M1); %ślad macierzy
end
time(5,i)=toc;
tic,
for j=1:1000
for k=1:r
L(k,k)=1; %rozkład LU
L(k+1:r,k)=M1(k+1:r,k)/M1(k,k);
M1(k+1:r,:)=M1(k+1:r,:)-(L(k+1:r,k)*M1(k,:));
end
time(6,i)=toc;
end
tic,
for j=1:10000
lu(M1); %rozkład LU funkcją lu
end
time(7,i)=toc;
tic,
for j=1:10000
[Q,R]=qr(M1); %rozkład QR funkcją qr
end
time(8,i)=toc;
end
time=time/10000;
plot(1:6,time(1,:),'*')
title('Wykres czasu obliczania iloczynu dwoch macierzy pseudolosowych');
hold on;
semilogy (1:6,time(2,:),'*')
title('Wykres czasu obliczania iloczynu macierzy pseudolosowych i wektora pseudolosowego');
semilogy (1:6,time(3,:),'*')
hold on;
title('Wykres czasu obliczania wyznacznika macierzy pseudolosowych');
semilogy (1:6,time(4,:),'*')
hold on;
title('Wykres czasu obliczania eliminacji Gaussa macierzy pseudolosowych');
semilogy (1:6,time(5,:),'*')
hold on;
title('Wykres czasu obliczania sladu macierzy pseudolosowych');
semilogy (1:6,time(6,:),'*')
hold on;
title('Wykres czasu obliczania rozkladu LU macierzy pseudolosowych');
semilogy (1:6,time(7,:),'*')
hold on;
title('Wykres czasu obliczania rozkladu LU fukcja lu macierzy pseudolosowych');
semilogy (1:6,time(8,:),'*')
hold on;
title('Wykres czasu obliczania rozkladu QR funkcja qr macierzy pseudolosowych');
hold on;
semilogy(1:6,time(9,:),'*')
title('Wykres czasu obliczania eliminacji Gaussa z czesciowym wyborem elementu glównego');
% hold on;
xlabel('Wielkosc macierzy')
ylabel('Czas obliczen')
set(gca,'XTick',1:1:6)
set(gca,'XTickLabel',{'2x2' '4x4' '8x8' '16x16' '32x32' '64x64'})
Wykres
Wnioski
Wygenerowaliśmy 2 macierze 4x4 za pomocą plików tstmat.m i tstcnd.m
Macierz dobrze uwarunkowana
-24 -63 18 -32 153 1
A = -91 65 10 119 b = 328 x = -5
7 65 -10 -7 -390 3
16 -2 40 6 182 6
Wskaźnik uwarunkowania macierzy cond(A)= 6.2387
Macierz źle uwarunkowana
-7162 5027 8671 10247 -777 -3
A = 73433 -51410 -88708 -104859 b = 7609 x = 2
-11789 8243 14225 16818 -1194 1
-48355 33862 58427 69064 -5040 -4
Wskaźnik uwarunkowania macierzy cond(A)= 6.3277e+005
Kod programu:
format long
for i=1:100
A =[ -7162 5027 8671 10247;
73433 -51410 -88708 -104859;
-11789 8243 14225 16818;
-48355 33862 58427 69064];
b =[ -777; 7609; -1194; -5040]
x =[-3; 2; 1; -4];
normaA=inv(A)*b
normaA1=inv(A1)*b1;
eps=0.00001*i;
% w tym miejscu wstawiamy element zaburzający
A1=A1*eps; %skalowanie macierzy A
A=A*eps;
% A(1,1)=(A(1,1)*(1+eps)); %zmiana elementu macierzy A
% A1(1,1)=(A1(1,1)*(1+eps));
% b=b*eps; %skalowanie wektora b
% b1=b*eps;
% b1(1,1)=(b1(1,1)*(1+eps)); %zmiana elementu macierzy b
% b(1,1)=(b(1,1)*(1+eps));%
norma21=inv(A1)*b1;
norma2=inv(A)*b;
zmiana(1,i)=norm(normaA1-norma21);
zmiana(2,i)=norm(normaA-norma2);
epsil(1,i)=eps;
end
%plot(epsil(1,:),zmiana(1,:),'.r'),xlabel('zaburzenie'),ylabel('norma macierzy') %dobrze uwarunkowana
plot(epsil(1,:),zmiana(2,:),'.b'),xlabel('zaburzenie'),ylabel('norma macierzy') %źle uwarunkowana
title('Wykres dla macierzy zle uwarunkowanej, zmiana elementu wektora b');
Wykresy
Wnioski
Porównując wykresy czasów obliczeń dla macierzach pseudolosowych stwierdzamy, że czas obliczeń:
-iloczynu dwóch macierzy wzrasta w kwadracie i jest w przedziale 10-5-10-2
-rozkład LU wzrasta w kwadracie i jest w przedziale 10-5-10-2
-rozkład LU naszą funkcja wzrasta w kwadracie i jest w przedziale 10-6-10-2 wynika z tego, iż nasz program jest wolniejszy od funkcji lu dla macierzy powyżej 32x32
-śladu macierzy utrzymuje się na stałym poziomie
-eliminacja Gaussa wzrasta w kwadracie i jest w przedziale 10-6-10-2
- eliminacja Gaussa wzrasta liniowo i jest w przedziale 10-5-10-2
-wyznacznik macierzy wzrasta liniowo i jest w przedziale 10-5-10-2
- iloczyn macierzy i wektora wzrasta kwadratowo i jest w przedziale 10-4,8-10-4,1
Dla każdego typu zaburzeń można stwierdzić, że dla macierzy dobrze uwarunkowane zmiana normy jest zawsze dużo mniejsza niż zmiana normy dla macierzy źle uwarunkowanej.
Im większe zaburzenie jednego z elementów macierzy A lub wektora b to wartość normy wzrasta, przy skalowaniu macierzy lub wektora wartość normy zmniejsza się.