Eliminacja Gaussa
Z wyborem elementu głównego
A=input( ' Podaj macierz: ')
a=size(A,1);
b=size(A,2);
[C,I]=max(A);
if a==b
disp('Macierz ma poprawne wymiary')
else
disp ('Macierz musi być kwadratowa')
end
for i=1:a,
c=A(i,i);
if c==0,
z=I(i);
D=A(i,:);
A(i,:)=A(z,:)
A(z,:)=D
else
end
end
A
for i=1:a,
c=A(i,:)/A(i,i)
for j=i+1:a,
A(j,:)=c*A(j,i)-A(j,:)
end
end
Bez wyboru elementu głównego
A=input( ' Podaj macierz: ')
a=size(A,1);
b=size(A,2);
X=A;
Z=tril(A); % Z - macierz L
X=A; % X - macierz U
d=diag(A);
e=min(d);
if e==0
disp('Macierz nie moze miec 0 na glownej przekatnej')
break
else
if a==b
disp('Macierz ma poprawne wymiary')
else
disp ('Macierz musi być kwadratowa')
end
for i=1:a,
Z(:,i)=Z(:,i)/Z(i,i)
end
for i=2:a,
for j=i:a,
p=0;
for k = 1:i-1;
X(i,k) = 0
p = p + Z(i,k)*X(k,j);
end
X(i,j) = X(i,j) - p
end
end
end
Z
Zależność czasu od rozmiaru macierzy
function [iloczyn,wyznacznik,slad,LU]=czas(N)
A=tstcnd(N)
B=tstcnd(N)
tic
for i=1:100
end
toc
p=toc
tic
for i=1:100
C=A*B
end
toc
a=toc
iloczyn=a/100-p;
tic
for i=1:100
det(A)
end
b=toc
wyznacznik=b/100-p;
tic
for i=1:100
trace(A)
end
toc
c=toc
slad=c/100-p;
tic
for i=1:100
lu(A)
end
toc
d=toc
LU=d/100-p;
disp(iloczyn)
disp(wyznacznik)
disp(slad)
disp(LU)
Wielkość macierzy | Wyznacznik | Ślad | Iloczyn | LU |
---|---|---|---|---|
2 | 8.7980e-005 | 1.0470e-004 | 2.3030e-005 | 1.0910e-004 |
4 | 2.5573e-005 | 1.9276e-005 | 8.3811e-005 | 2.4059e-004 |
8 | 1.6075e-004 | 8.4109e-005 | 0.0020 | 2.4363e-004 |
16 | 4.8006e-005 | 2.1959e-005 | 7.8761e-004 | 7.6916e-004 |
32 | 5.3571e-005 | 2.1010e-005 | 0.0039 | 0.0039 |
Wpływ zmiany uwarunkowania na zmianę macierzy A.
Dla macierzy dobrze uwarunkowanej
Zaburzenie | Wartość przy zmianie jednego elementu | Wartość przy zmianie wszystkich elementów |
---|---|---|
0,1 | -93.5234 | -99.8099 |
0,01 | -98.9985 | -99.6445 |
0,001 | -99.9608 | -99.8543 |
function [roz_1,roz_all]=uwarunkowanie(C)
[A,b,x]=tstmat(16);
D=A;
F=rcond(D);
D(1,1)=D(1,1)*(1+C);
R=rcond(D)
roz_1=(R-F/R)*100;
N=A*(1+C);
Y=rcond(N);
roz_all=(Y-F/F)*100;
Dla macierzy źle uwarunkowanej
Zaburzenie | Wartość przy zmianie jednego elementu | Wartość przy zmianie wszystkich elementów |
---|---|---|
0,1 | -45.8191 | -100.0000 |
0,01 | -13.6609 | -100.0000 |
0,001 | -32.6603 | -100.0000 |
function [roz_1,roz_all]=uwarunkowanie(C)
[A,b,x]=tstcnd(16);
D=A;
F=rcond(D);
D(1,1)=D(1,1)*(1+C);
R=rcond(D)
roz_1=(R-F/R)*100;
N=A*(1+C);
Y=rcond(N);
roz_all=(Y-F/F)*100;
eliminacja Gaussa z czesciowym wyborem elementu jest dokladniejsza od eliminacji Gaussa bez wyboru elementu głównego.