diff --git a/matlab/utilities/general/isdiagonal.m b/matlab/utilities/general/isdiagonal.m new file mode 100644 index 000000000..f76e43797 --- /dev/null +++ b/matlab/utilities/general/isdiagonal.m @@ -0,0 +1,64 @@ +function b = isdiagonal(A) % --*-- Unitary tests --*-- + +% Copyright (C) 2014 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see . + +if isnumeric(A) + if isquare(A) + % Find non zero elements in matrix A... + [ir, ic] = find(A); + % If the non zero elements are on the diagonal, the corresponding elements + % in ir and ic (row and column numbers) should be equal. + b = isequal(ir, ic); + else + error('isdiagonal: Input must be a square matrix!') + end +else + error('isdiagonal: Input must be numeric!') +end + +%@test:1 +%$ A = zeros(3,3); +%$ t = isdiagonal(A); +%$ T = all(t); +%@eof:1 + +%@test:2 +%$ A = zeros(3,3); A(1,3) = 1; +%$ t = ~isdiagonal(A); +%$ T = all(t); +%@eof:2 + +%@test:3 +%$ A = randn(3,3); +%$ t = ~isdiagonal(A); +%$ T = all(t); +%@eof:3 + +%@test:4 +%$ A = diag(randn(3,1)); +%$ t = isdiagonal(A); +%$ T = all(t); +%@eof:4 + +%@test:5 +%$ A = diag(randn(3,1)); A(1,1) = 0; +%$ t = isdiagonal(A); +%$ T = all(t); +%@eof:5 + +