Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
70
Task/Gaussian-elimination/MATLAB/gaussian-elimination.m
Normal file
70
Task/Gaussian-elimination/MATLAB/gaussian-elimination.m
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
function [ x ] = GaussElim( A, b)
|
||||
|
||||
% Ensures A is n by n
|
||||
sz = size(A);
|
||||
if sz(1)~=sz(2)
|
||||
fprintf('A is not n by n\n');
|
||||
clear x;
|
||||
return;
|
||||
end
|
||||
|
||||
n = sz(1);
|
||||
|
||||
% Ensures b is n x 1.
|
||||
if n~=sz(1)
|
||||
fprintf('b is not 1 by n.\n');
|
||||
return
|
||||
end
|
||||
|
||||
x = zeros(n,1);
|
||||
aug = [A b];
|
||||
tempmatrix = aug;
|
||||
|
||||
for i=2:sz(1)
|
||||
|
||||
|
||||
% Find maximum of row and divide by the maximum
|
||||
tempmatrix(1,:) = tempmatrix(1,:)/max(tempmatrix(1,:));
|
||||
|
||||
% Finds the maximum in column
|
||||
temp = find(abs(tempmatrix) - max(abs(tempmatrix(:,1))));
|
||||
if length(temp)>2
|
||||
for j=1:length(temp)-1
|
||||
if j~=temp(j)
|
||||
maxi = j; %maxi = column number of maximum
|
||||
break;
|
||||
end
|
||||
end
|
||||
else % length(temp)==2
|
||||
maxi=1;
|
||||
end
|
||||
|
||||
% Row swap if maxi is not 1
|
||||
if maxi~=1
|
||||
temp = tempmatrix(maxi,:);
|
||||
tempmatrix(maxi,:) = tempmatrix(1,:);
|
||||
tempmatrix(1,:) = temp;
|
||||
end
|
||||
|
||||
% Row reducing
|
||||
for j=2:length(tempmatrix)-1
|
||||
tempmatrix(j,:) = tempmatrix(j,:)-tempmatrix(j,1)/tempmatrix(1,1)*tempmatrix(1,:);
|
||||
if tempmatrix(j,j)==0 || isnan(tempmatrix(j,j)) || abs(tempmatrix(j,j))==Inf
|
||||
fprintf('Error: Matrix is singular.\n');
|
||||
clear x;
|
||||
return
|
||||
end
|
||||
end
|
||||
aug(i-1:end,i-1:end) = tempmatrix;
|
||||
|
||||
% Decrease matrix size
|
||||
tempmatrix = tempmatrix(2:end,2:end);
|
||||
end
|
||||
|
||||
% Backwards Substitution
|
||||
x(end) = aug(end,end)/aug(end,end-1);
|
||||
for i=n-1:-1:1
|
||||
x(i) = (aug(i,end)-dot(aug(i,1:end-1),x))/aug(i,i);
|
||||
end
|
||||
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue