Sprawozdanie Laboratorium Metod Numerycznych
Numeryczne zagadnienia algebry liniowej (Ćw.2)
Data oddania : 18.04.2013
Rafał Bonecki 171321
Konrad Mirecki 171382
Eliminacja Gaussa z wyborem elementu głównego
A=[1 1 1; 2 1 1; 1 -1 5]
b=[4; 5; 2]
n = length(b);
x = zeros(2, n);
for i=1:n
x(1, i) = i
end
mnoznik = 1;
for j=1:n
[elem, indeks] = max(A(j:n, j));
indeks = indeks + j -1;
A([j indeks],:) = A([indeks j],:)
b([j indeks]) = b([indeks j])
if j ~= indeks
mnoznik = mnoznik * -1;
end
[elem, indeks] = max(A(j, j:n));
indeks = indeks+j-1;
A(:,[j indeks]) = A(:,[indeks j])
x(:,[j indeks]) = x(:,[indeks j])
for i=j:n
if i == j
continue
end
w = A(i,j)/A(j,j);
A(i, 1:n) = A(i, 1:n)-w*A(j, 1:n)
b(i) = b(i) - w*b(j)
end
end
wspolna=[A b];
b(n) = b(n)/wspolna(n,n);
for i=n-1:-1:1
for j=i+1:n
b(i)=(b(i)-wspolna(i,j)*b(j))/wspolna(i,i);
end
end
x =
1 2 3
0 0 0
A =
2.0000 1.0000 1.0000
0 0.5000 0.5000
0 0 6.0000
b =
0.3333
2.3333
0.6667
Eliminacja Gaussa bez wyboru elementu
function [L, U] = bez(A)
b=size(A);
b=b(1);
U=A;
L=eye(size(A));
for a=1:(b-1)
for i=a:(b-1)
L(i+1,a)=U(i+1,a)/U(a,a);
U(i+1,:)=U(i+1,:)-U(i+1,a)/U(a,a)*U(a,:);
end
end
ans = 1.0000 0 0
1.1118 1.0000 0
0.1559 0.1170 1.0000
Funckje Tic Toc
1)Ślad macierzy
A=rand(2,2)
tic
sum(A)
x=toc
A =
0.6801 0.8884
0.6904 0.4139
ans =
1.3705 1.3023
x =
3.3958e-04
We wzorze zmieniamy rozmiar losowej macierzy na macierze 4x4. 8x8, 16x16, 32x32, 64x64. Podane czasy są w tej kolejności
x = 5.0681e-04
x= 6.7949e-04
x= 0.0012
x= 0.0014
x= 2.9530e-04
2)Iloczyn macierzy
B=rand(2,2)
A=rand(2,2)
tic
c=A*B
x=toc
B =
0.0295 0.7404
0.0755 0.8566
A =
0.3979 0.4124
0.8844 0.2417
c =
0.0429 0.6479
0.0444 0.8618
x =
5.2112e-05
Analogicznie jak wczesniej.
X= 6.8801e-05
X= 0.0431
X= 6.9959e-04
X= 0.0427
X= 0.0095
3)Iloczyn macierzy kwadratowej i wektora kolumnowego
B=rand(2,1)
A=rand(2,2)
tic
c=A*B
x=toc
B =
0.5564
0.7055
A =
0.2779 0.9239
0.1343 0.4205
c =
0.8064
0.3714
x =
3.9169e-05
Analogicznie.
X= 4.4959e-05
X= 4.0872e-05
X= 8.3447e-05
X= 1.3862e-04
X= 0.0125
4)Eliminacja Gaussa
A=rand(2,2)
b=rand(2,1)
tic
n = length(b);
x = zeros(2, n);
for i=1:n
x(1, i) = i
end
mnoznik = 1;
for j=1:n
[elem, indeks] = max(A(j:n, j));
indeks = indeks + j -1;
A([j indeks],:) = A([indeks j],:)
b([j indeks]) = b([indeks j])
if j ~= indeks
mnoznik = mnoznik * -1;
end
[elem, indeks] = max(A(j, j:n));
indeks = indeks+j-1;
A(:,[j indeks]) = A(:,[indeks j])
x(:,[j indeks]) = x(:,[indeks j])
for i=j:n
if i == j
continue
end
w = A(i,j)/A(j,j);
A(i, 1:n) = A(i, 1:n)-w*A(j, 1:n)
b(i) = b(i) - w*b(j)
end end
wspolna=[A b];
b(n) = b(n)/wspolna(n,n);
for i=n-1:-1:1
for j=i+1:n
b(i)=(b(i)-wspolna(i,j)*b(j))/wspolna(i,i);
end
end
z=toc
A
b
z= 4.2405e-04
Analogicznie
Z= 0.0012
Z= 0.0060
Z= 0.1316
Z= 2.2840
z= 26.7305
5)Rozkład L U
function [C]=rozklad(A)
A=rand(2,2)
tic
[w k]=size(A);
if w==k;
L=eye(w);
U=A;
for k1=1:k-1
for w1=k1+1:w
L(w1,k1)=(U(w1,k1)/U(k1,k1)); U(w1,:)=U(w1,:)-(U(w1,k1)/U(k1,k1))*U(k1,:);
end
end
C=[L U];
L
U
else
end
x=toc
x= 4.8433e-04
Analogicznie.
X= 1.7268e-04
X= 0.0010
X= 1.8052e-04
X= 1.8018e-04
x= 0.0032
6)Wyznacznik macierzy
A=rand(2,2)
tic
c=det(A)
x=toc
x= 0.0734
Analogicznie.
x =5.4836e-05
x= 8.9237e-05
x= 0.0632
x= 1.4339e-04
x= 0.0182
Wykres zależności czasu od rozmiaru macierzy dla konkretnych czynności.
Eliminacja Gaussa z wyborem elementu głównego jest zdecydowanie dokładniejsza od eliminacji bez wyboru.