Date: Apr 5, 2013 10:50 AM
Author: Steven Lord
Subject: Re: determinant calculation of integer matrices



"Bruno Luong" <b.luong@fogale.findmycountry> wrote in message
news:kjklfi$il6$1@newscl01ah.mathworks.com...
> Someone asks me off line why det (magic(9) - 41) = 0. Here is how I see
> it:
>
> It is easy to check sum( magic(9) ) / 9 = 41
>
> Thus
> sum(magic(9) - 41) = 0.
>
> That means
>
> (magic(9) - 41) * ones(9,1) = 0.
>
> Therefore A = (magic(9) - 41) is not full rank (because A*x = 0 has non
> trivial solution).
>
> So det (magic(9) - 41) = 0.


Taking this a little further aside, if you want to tell if a matrix is
singular or not, do NOT use DET.

% Sample matrix
A = 0.1*eye(400);

d = det(A)
% Since this is 0, A is singular! Right???

c = cond(A)
% But it's well conditioned!

s = svd(A);
ms = max(abs(s-0.1))
% All singular values are extremely close to 0.1. That's good, right?

x = rand(400, 1);
y = A\x;
% MATLAB has no problem solving this system

n = norm(A*y-x)
% The residual norm should be very small which is another good sign.
% How do we reconcile this with the fact that DET told us A is singular?

Use COND or RCOND for singularity checking instead.

--
Steve Lord
slord@mathworks.com
To contact Technical Support use the Contact Us link on
http://www.mathworks.com