# Adding counter to count the number of row swaps for GEA

4 views (last 30 days)
Simon Porteous on 6 Oct 2021
I want to add a counter to a function to count the number of row interchanges for a determinant calculation but it isnt incrementing.
Im getting the right answer for the determinant but only 0 for the count.
here is my code and thanks for your guidance:
function Det = Det_with_RI(A)
% This function calculates determinant of a square matrix A.
%
% Input : A -- a square matrix.
% Output : Det -- determiant of A.
Det = 1; % Initial value of determinant: expecting to be changed.
Count = 0; % inital value for number of row swaps
function ProcessPivotElement
if abs(A(k,k))<10^(-10),
% We use here a variable ii in the following for-cycle,
% unlike the usual i variable, since a child-function
% sees parent-function's variables and changes them.
for ii=k+1:n,
if A(ii,k)~=0, % If a(i,k) is non-zero,
cc=A(ii,:); % swap row i and row k.
A(ii,:)=A(k,:);
A(k,:)=cc;
Count = Count + 1; % Increment the row swap counter
disp(Count);
return
end
Det = Det*(-1);
end
error('The system is indeterminate.');
end
end
[m,n] = size(A);
if m~=n error('The argument must be a square matrix.'); end;
% Forward Phase of GEA:
for k = 1:n-1
ProcessPivotElement;
for i = k+1:n
% Pivoting multiplier:
m = A(i,k)/A(k,k);
% Now we apply Elementary Row Operation of type~I.
% As is known, ERO's of type~I do not change determinant.
A(i,:)=A(i,:)-m*A(k,:);
end
end
% Now, A is an upper triangular matrix.
% In calculation of determinant the Backward Phase is not necessary.
% It is because determinant of an upper triangular matrix
% is the product of its diagonal entries, which we calculate here:
for k=1:n, Det=Det*A(k,k);
end
disp(Count)
det(A)
end
##### 2 CommentsShowHide 1 older comment
Simon Porteous on 6 Oct 2021
A is a square 41x41 matrix

Shravan Kumar Vankaramoni on 12 Oct 2021
Hi,
if abs(A(k,k))<10^(-10)
The above line looks suspicious to me. What is the range of values you have in your input matrix (A). Because the above line is checking whether the value at A(k,k) is less than 10^(-10) i.e 0.0000000001. So if you have values less than 10^(-10), count will be incremented otherwise count is 0.

### Categories

Find more on Axes Transformations in Help Center and File Exchange

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!