%% IS A GIVEN SQUARE MATRIX A DIAGONAL MATRIX?
% Language : Matlab 2007a
% Authors : Autar Kaw
% Last Revised : November 15, 2008
% Abstract: This program shows you three ways of finding out
% if a square matrix is a diagonal matrix. A square matrix is
% diagonal if all the off-diagonal elements are zero, that is
% A(i,j)=0 for i~=j.
clc
clear all
disp('This program shows you three ways of finding out')
disp('if a square matrix is a diagonal matrix.')
disp('A square matrix is diagonal if all the off-diagonal')
disp('elements are zero, that is A(i,j)=0 for i~=j.')
disp('  ')
%% INPUTS
% The square matrix
A=[1  0  0  0;0  3.4  0  0; 0  0  -4.5 0;0  0  0  0];
disp ('INPUTS')
disp('Here is the square matrix')
A
disp(' ')

%% FIRST SOLUTION
% This is based on counting the number of zeros on
% off the diagonal.  If this count is n^2-n then it
% is a diagonal matrix, otherwise it is not a diagonal matrix

%size gives how many rows and columns in the A matrix
rowcol=size(A);
n=rowcol(1);
% count = how many zeros not on the diagonal
count=0;
for i=1:1:n
    for j=1:1:n
        if A(i,j)==0 & i~=j
            count=count+1;
        end
    end
end
disp('FIRST WAY')
if count==n^2-n
    disp('Matrix is diagonal')
else
    disp('Matrix is NOT diagonal')
end

%% SECOND SOLUTION
% This is based on finding if any of the off-diagonal elements
% are nozero.  As soon as this condition is met, the matrix can be
% deemed not diagonal. If the condition is never met, the matrix is
% diagonal

%size gives how many rows and columns in the A matrix
rowcol=size(A);
n=rowcol(1);
% flag = keeps track if it is diagonal or not
% flag = 1 if matrix is diagonal
% flag = 2 if matrix is not diagonal

% Assuming matrix is diagonal
flag=1;
for i=1:1:n
    for j=1:1:n
        % flag=2 if off-diagonal element is nonzero.
        if A(i,j)~=0 & i~=j
            flag=2;
        end
    end
end
disp('  ')
disp('SECOND WAY')
if flag==1
    disp('Matrix is diagonal')
else
    disp('Matrix is NOT diagonal')
end

%% THIRD SOLUTION
% This is based on finding if the sum of the absolute value of
% the off-diagonal elements is nonzero.
% If the sum is nonzero, the matrix is NOT diagonal.
% If the sum is zero, the matrix is diagonal

%size gives how many rows and columns in the A matrix
rowcol=size(A);
n=rowcol(1);

% sum_off_diagonal= sum of absolute value of off-diagonal elements
sum_off_diagonal=0;
for i=1:1:n
    for j=1:1:n
        if i~=j
            sum_off_diagonal=sum_off_diagonal+abs(A(i,j));
        end
    end
end

disp('  ')
disp('THIRD WAY')
if sum_off_diagonal==0
    disp('Matrix is diagonal')
else
    disp('Matrix is NOT diagonal')
end
