Skrypt realizujący algorytm eliminacji Gaussa bez wyboru elementu głównego dla macierzy kwadratowej stopnia n.
function y=rozkladlu(A)
rozmiar=size(A);
n=rozmiar(2);
U=A;
L=zeros(rozmiar);
L(1,1)=1;
for k=1:n-1
for i=k+1:n
L(i,k)=U(i,k)/U(k,k);
L(i,i)=1;
U(i,k)=0;
for j=k+1:n
U(i,j)=U(i,j)-L(i,k)*U(k,j);
end
end
end
U
L
A oto wyniki dla szczególnej macierzy stopnia trzeciego.
macierz=
0.5377 0.8622 -0.4336
1.8339 0.3188 0.3426
-2.2588 -1.3077 3.5784
Rozkład tu tej macierzy:
U =
0.5377 0.8622 -0.4336
0 -2.6220 1.8215
0 0 3.3647
L =
1.0000 0 0
3.4108 1.0000 0
-4.2012 -0.8827 1.0000
Iloczyn macierzy L i U daje w wyniku macierz wyjściową co jest przesłanką poprawnego działania skryptu.
2. Skrypt realizujący algorytm eleminacji Gaussa z częściowym wyborem elementu głównego.
function y=rozkladlu(A)
rozmiar=size(A);
n=rozmiar(2);
U=A;
L=zeros(rozmiar);
L(1,1)=1;
%czêœæ odpowiedzialna za wybór elementu g³ównego
for k=1:n-1
jeden=abs(max(U(:,k)));
dwa=abs(min(U(:,k)));
element_glowny=max(jeden,dwa);
spr=1;
while(abs(U(spr,k)) ~= element_glowny)
spr=spr+1;
end
if(k ~= n-1)
DD=U(spr,:);
U(spr,:)=U(k,:);
U(k,:)=DD;
end
%koniec czêœci odpowiedzialnej za wybór el. glownego
for i=k+1:n
L(i,k)=U(i,k)/U(k,k);
L(i,i)=1;
U(i,k)=0;
for j=k+1:n
U(i,j)=U(i,j)-L(i,k)*U(k,j);
end
end
end
L*U
U
L
macierz testowa:
2.7694 -0.0631 1.4897 -1.2075
-1.3499 0.7147 1.4090 0.7172
3.0349 -0.2050 1.4172 1.6302
0.7254 -0.1241 0.6715 0.4889
LU =
3.0349 -0.2050 1.4172 1.6302
-1.3499 0.7147 1.4090 0.7172
2.7694 -0.0631 1.4897 -1.2075
0.7254 -0.1241 0.6715 0.4889
U =
3.0349 -0.2050 1.4172 1.6302
0 0.6236 2.0394 1.4423
0 0 -0.2090 -2.9819
0 0 0 -7.9814
L =
1.0000 0 0 0
-0.4448 1.0000 0 0
0.9125 0.1988 1.0000 0
0.2390 -0.1205 -2.7682 1.0000
Macierz L*U jest macierzą wejściową pomnożoną przez macierz permutacji P.
Zbadanie zależności czasu potrzebnego na wykonanie zadań w programie Matlab.
Mnożenie macierzy A przez samą siebie
Mnożenie macierzy A przez inną macierz B
Mnożenie macierzy A przez wektor kolumnowy B
Obliczanie wyznacznika macierzy
Wyznaczenie śladu macierzy
Eliminacja Gaussa
Rozkład LU
Rozkład QR
Jeden z przykładowych skryptów do generacji wykresów.
for i=1:64
A=randn(i);
B=randn(i);
tic
%tu wklejamy początek operacji, których chcemy obliczyć czas wykonania
A*B;
czas(i)=toc;
j(i)=i;
end
plot(j,czas,'.'),xlabel('stopieñ macierzy'),ylabel('czas w sekundach')
Analiza wrażliwości numerycznej. Porównanie obliczeń na
macierzach źle i dobrze uwarunkowanych.
Za pomocą plików tstmat.m i s tstcnd.m generujemy macierz odpowiednio dobrze i źle uwarunkowaną.
Macierz dobrze uwarunkowana:
Ans = A =
40 77 -4 -113 -68 56 97 42 -31 33 -81 -106 -24 -66 -12 -156 |
b =
1032 124 985 390
|
x =
-2 7 -2 -5
|
Wskaźnik uwarunkowania: 3.3504
Macierz źle uwarunkowana:
ans = A 11780 8971 58825 5245 -536 -409 -2681 -238 29184 22189 145567 13017 22161 16857 110572 9880 |
x =
1 0 1 3 |
b =
-314555 14340 -778271 -591195
|
Wskaźnik uwarunkowania: 3.0714e+006
Macierz dobrze uwarunkowana; zaburzenie w macierzy b:
Macierz źle uwarunkowana; zaburzenie w macierzy b:
Macierz dobrze uwarunkowana; zaburzenie w macierzy A:
Macierz źle uwarunkowana; zaburzenie w macierzy A:
Przykładowy listing dla macierzy źle uwarunkowanej przy zaburzeniu w macierzy b
for i=1:100
A1 =[40 77 -4 -113; -68 56 97 42; -31 33 -81 -106; -24 -66 -12 -156];
b1 =[1032; 124; 985; 390];
A2 =[11780 8971 58825 5245; -536 -409 -2681 -238; 29184 22189 145567 13017; 22161 16857 110572 9880];
b2 =[1; 0; 1; 3];
eps(i)=0.0001*i;
bez_zaburzen=A2*b2;
b2(1)=b2(1)*(1+eps(i));
zaburz=A2*b2;
norma2(i)=norm(bez_zaburzen-zaburz);
end
plot(eps,norma2,'*'),xlabel('zaburzenie'),ylabel('norma macierzy')
title('Wykres');
;
Wnioski: