Path: news.mathworks.com!not-for-mail
From: "Steven_Lord" <slord@mathworks.com>
Newsgroups: comp.soft-sys.matlab
Subject: Re: DETERMINANT OF 20 BY 20 MATRIX - higher precision for eigenvectors
Date: Thu, 14 Apr 2011 10:09:50 -0400
Organization: MathWorks
Lines: 115
Message-ID: <io6v73$a4a$1@fred.mathworks.com>
References: <io5er6$cos$1@fred.mathworks.com> <io5sg3$gmj$1@fred.mathworks.com> <io6gmt$qth$1@fred.mathworks.com>
NNTP-Posting-Host: ah-slord.dhcp.mathworks.com
Mime-Version: 1.0
Content-Type: text/plain;
	format=flowed;
	charset="UTF-8";
	reply-type=response
Content-Transfer-Encoding: 7bit
X-Trace: fred.mathworks.com 1302790179 10378 172.31.44.225 (14 Apr 2011 14:09:39 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Thu, 14 Apr 2011 14:09:39 +0000 (UTC)
In-Reply-To: <io6gmt$qth$1@fred.mathworks.com>
X-Priority: 3
X-MSMail-Priority: Normal
Importance: Normal
X-Newsreader: Microsoft Windows Live Mail 14.0.8089.726
X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8089.726
Xref: news.mathworks.com comp.soft-sys.matlab:721887



"Leo Kay" <anousleshommes@hotmail.com> wrote in message 
news:io6gmt$qth$1@fred.mathworks.com...
> "Roger Stafford" wrote in message <io5sg3$gmj$1@fred.mathworks.com>...
>> "Leo Kay" <anousleshommes@hotmail.com> wrote in message 
>> <io5er6$cos$1@fred.mathworks.com>...
>> > Hello,
>> > I am trying to work out the determinant of a 20 by 20 matrix in Matlab. 
>> > When I run det(M), Matlab simply stalls. I would not have suspected 
>> > this to be an issue. The matrix has lots of 0s and ALL ENTRIES ARE 
>> > EXPONENTIALS so I could theoretically take the log before fining the 
>> > det, but I dont wanna do that.
>> >
>> > Also, when I ask for the EIG(M), which is the eigenvectors, the 
>> > precision I obtain from Matlab is close to abysmal, as I need to find a 
>> > ridiculous number of eignvectors by averaging over entries of M, then 
>> > adding such vectors. The trouble is, unless precision is high, errors 
>> > add up exponentially fast in my problem.
>> >
>> > CAN ANYONE HELP PLEASE?
>> >
>> > I mean I have formulated things as simply as I possibly coul so please 
>> > help.
>> - - - - - - - - - - -
>>   Your description of your problem does not make much sense to me.  You 
>> mention that you could take the logarithm of the matrix entries before 
>> finding its determinant (but "dont wanna",) but this is surely not how to 
>> find a determinant.  The determinant of element logarithms is not equal 
>> to the logarithm of the determinant, just as the logarithm of a product 
>> is not equal to the product of the logarithms of its factors.
>>
>>   You state that your 20 x 20 matrix has a ridiculous number of 
>> eigenvectors.  Is 20 a ridiculous number?  That is the largest number it 
>> can have.  If M has a full set of 20 independent eigenvectors, then its 
>> determinant will be equal to the product of its eigenvalues.  Your 
>> statement that "The matrix has lots of 0s" would lead one to suspect that 
>> it might not have 20 independent eigenvectors, and it could well have a 
>> determinant value of zero.
>>
>> Roger Stafford
>
> WHAT A STUPID AND HIGHLY PATRONIZING REPLY!!!

I just reread Roger's comment and it seems to be fine to me. It seems to be 
more appropriate to someone who has little to no experience with 
determinants, eigenvectors, and eigenvalue computations, but nothing in your 
original message indicated to either Roger or I your level of experience. 
Perhaps you have a higher level of experience than Roger thought you did and 
that's why you thought it patronizing.

> First off I am looking for the zero eigenvalue.

So you're looking for a vector V such that M*V is the zero vector? In that 
case, you're not looking for an eigenvalue/eigenvector pair. You're looking 
for the null space of the matrix, and in that case you should use the NULL 
function instead of EIG.

> Secondly, by taking logarithm, I mean diagonalizing, then taking 
> exponential of the log trace. BUT I DONT WANNA DO THAT BECAUSE I HAVE 
> SYMBOLIC ENTRIES!!!

That's a VERY important detail that you left out of your original message!

Finding the eigenvalues of a general symbolic matrix requires finding the 
roots of a polynomial of order equal to the number of rows in the matrix.

http://en.wikipedia.org/wiki/Eigenvalue#Characteristic_polynomial

Depending on how complicated the coefficients in your matrix are, this could 
be very difficult or even IMPOSSIBLE to solve generally.

http://en.wikipedia.org/wiki/Abel%E2%80%93Ruffini_theorem

> Please, let's not be patronizing, by ridiculous amount of eigenvectors, I 
> meant after averaging (ie, randomize entries, and find a ridicuous amount 
> fof eigenvectors, say 10 000), so I need high precision.

That statement makes no sense to me, unless you're doing some sort of Monte 
Carlo problem where the entries of your matrix are randomly generated and 
you expect the eigenvalues and eigenvectors of those random matrices to 
converge. Please clarify what exactly you're doing.

Also, it's often _not_ the case that simply throwing higher precision at the 
problem is the correct solution to difficulties you may be experiencing.

> Anyways, can anyone tell me why finding the determininant of a 20 y 20 
> symbolic matrix  fails?

Why are you computing the determinant? If you're computing the determinant 
to try to decide if the matrix is singular, that's a BAD IDEA. Use the 
condition number instead.

http://en.wikipedia.org/wiki/Condition_number

As an example:

A = (1e-20)*eye(20);
det(A)
cond(A)

The determinant of A is 0 (it underflows in double precision) so A is 
singular, right? But the condition number is 1, indicating that A is well 
conditioned. In fact, A does have an exact inverse:

Ainv = (1e20)*eye(20);
norm(A*Ainv-eye(20)) % 0
norm(Ainv*A-eye(20)) % 0

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