Ćwiczenie 2- Eliminacja Gaussa-Jordana
W środowisku Matlab opracować funkcje realizującą eliminacje Gaussa-Jordana.
Przeprowadzić obliczenia dla następujących układów równań
a)
x
1
+ x
2
+ 3x
3
=a
2x
1
+ 2x
2
+ x
3
=b
2x
1
+ 3x
2
+ x
3
=c
x
1
+ x
2
+ x
3
=2
b)
2x
1
+ x
2
+ x
3
+
=5
x
1
+ 2x
2
+ x
3
+ x
4
=6
2x
1
+ 2x
2
=4
x
1
+ x
2
+ 2x
3
+ x
4
=7
c)
2x
1
+ x
2
+ x
3
=a
x
1
+ 2x
2
+ x
3
+ x
4
=b
2x
1
+ 2x
2
=1
x
1
+ x
2
+ 2x
3
+ x
4
=c
a – ilość liter w nazwisku
b – ilość liter w imieniu
c=a/b
d)
10
-9
x
1
+
x
2
+ 2x
3
=3
3x
1
+ 2*10
-6
x
2
+ 10
-7
x
3
=10
-3
10
8
x
1
+ 5x
2
+ x
3
=10
Porównać wyniki otrzymane przy użyciu metody z wyborem elementu podstawowego i bez
dla układów równań b i d.
Przykładowy skrypt realizujący algorytm eliminacji Gaussa-Jordana bez wyboru elementu
podstawowego.
function [X]=gj(Ab);
[ia,ja]=size(Ab);
col_indx=[1:ja];
if(ia+1<=ja)
ja=ia;
end;
il_op=min([ia, ja]);
for i=1:il_op
% poszukuje elementu centralnego
indx=i;
if(abs(Ab(i, indx)) < 10^-14)
disp('Blad')
pause
break
end
Ab(i,:)=Ab(i,:)/Ab(i,indx);
rozm=length(col_indx);
tmp=ones(ia,1)*Ab(i,col_indx);
tmp= tmp .* (-Ab(:,indx)*ones(1,rozm));
tmp(i,:)=zeros(1,rozm); % nie chce zmieniac aktualnego wiersza
Ab(:,col_indx)=Ab(:,col_indx)+tmp;
col_indx(find(col_indx==indx))=[];
end%for
X=Ab;