Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function [x] = GAUSS(A,b)
- %gaussova eliminace
- close all; clc;
- if nargin == 0
- A = [1 1 2 3; 1 3 2 2; 0 9 1 6; 1 2 3 4];
- b = [1 ; 2 ; 3 ; 6];
- %A = randi ([1,3], [6,6]);
- %b = randi ([1,3], [6,1]);
- %A=[1 3 4 2 2; 0 1 3 3 2; 0 0 2 3 1; 0 0 0 0 0; 0 0 0 0 0]
- %b=[3 ; 2 ; 1 ; 0 ; 0]
- end
- n = size (A,1);
- p = size (A,1);
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %overeni resitelnosti
- if rank (A) ~= rank ([A b])
- disp('NEMA RESENI');
- normalni=rank (A)
- rozsirena=rank ([A b])
- return;
- end
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %prevod matice do HTT
- for i=1:n-1
- if A(i,i)== 0
- ind = find (A(i:end,i)~=0);
- if isempty(ind)
- continue;
- else
- p=A(i,:);
- A(i,:) = A(ind(1)+i-1,:);
- A(ind(1)+i-1,:) = p;
- m=b(i,1);
- b(i,1) = b(ind(1)+i-1,1);
- b(ind(1)+i-1,1) = m;
- end
- end
- for j=i+1:n
- f=A(j,i)/A(i,i)
- for k=i:n
- A(j,k)=A(j,k)-A(i,k)*f
- end
- b(j,1)=b(j,1)-f*b(i,1)
- end
- end
- %nyni mame matici v HORNIM tt
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %osetreni nekonecne mnoha reseni
- if A(n,n)==0 %tj bude nekonecne mnoho reseni
- for i=n:-1:2
- if A(i,i)==0
- disp('nekonecne mnoho reseni, konecne x je jedno z mnoha');
- null(A)
- for j=1:n
- a=1; %nastaveni slozky vzsledneho vektoru
- b(j,1)=b(j,1)-a*A(j,i)
- end
- A=A(1:n-1,1:n-1) %zmenseni rozmeru
- b=b(1:n-1,:)
- n = size (A,1);
- else
- break;
- end
- end
- disp('nasledne vypadaji matice a A a vektor b pred spustenim zpetneho chodu');
- A
- b
- %zpetny chod
- for i=n:-1:2
- for j=i-1:-1:1
- f=A(j,i)/A(i,i)
- for k=n:-1:i
- A(j,k)=A(j,k)-A(i,k)*f
- end
- b(j,1)=b(j,1)-f*b(i,1)
- end
- end %nyni mame matici v diagonalnim tvaru
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %reseni
- x=ones(p,1);
- for m=1:n
- x(m)=b(m,1)/A(m,m);
- end %vysledek
- x
- else %tj bude jedno reseni
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %zpetny chod
- for i=n:-1:2
- for j=i-1:-1:1
- f=A(j,i)/A(i,i)
- for k=n:-1:i
- A(j,k)=A(j,k)-A(i,k)*f
- end
- b(j,1)=b(j,1)-f*b(i,1)
- end
- end %nyni mame matici v diagonalnim tvaru
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- %reseni
- x=zeros(n,1);
- for m=1:n
- x(m)=b(m,1)/A(m,m);
- end %vysledek
- A
- b
- x
- end
- end
Add Comment
Please, Sign In to add comment