MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Eigenvalues works very slow

  • To: mathgroup at
  • Subject: [mg128493] Re: Eigenvalues works very slow
  • From: Bill Rowe <readnews at>
  • Date: Thu, 25 Oct 2012 01:41:13 -0400 (EDT)
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:

On 10/24/12 at 3:30 AM, lapajne.jure at (jure lapajne) wrote:

>Hello, I'm trying to calculate eigenvalues of different sized
>matrices (from 10x10 to 1000x1000) using mathematica's built-in
>function - Eigenvalues. For smaller matrices it works ok, but for
>larger matrices it's just too slow. I tried writing the code in
>another system and it finds eigenvalues very quickly (in a second or
>two at most) even for big matrices. I'm not sure whether am I doing
>something wrong or is the speed difference really this big. My code
>(you only need to change d to change the size of matrix):

>d = 25;
>q = Table[Table[1/2*Sqrt[i + j + 1]*KroneckerDelta[Abs[i - j], 1], {j, 0, d-1}],{i, 0, d - 1}];
>h0 = Table[Table[(i + 1/2)*KroneckerDelta[i, j], {j, 0, d - 1}], {i, 0,d-1}];
>lambda = 1/2;
>q4 = lambda*q.q.q.q;
>N[Eigenvalues[q4 + h0]]

Your code asks Mathematica to obtain the exact value of each
eigenvalue and later convert these values to machine precision
numbers. I am certain the reason the other system is so much
faster is that it never computes the exact values for any eigenvalue.

Instead of doing:

N[Eigenvalues[q4 + h0]]


Eigenvalues[q4 + h0//N]

and you will find it is much faster for large matrices.

The general rule in Mathematica is if you want speed convert
values to machine precision as early as possible in your code.
If you want accuracy and are not concerned with speed, convert
values to numeric values as late as possible in your code.

  • Prev by Date: Re: Creating a recursive function which returns a sequence
  • Next by Date: CDF Security
  • Previous by thread: Re: Eigenvalues works very slow
  • Next by thread: Re: Eigenvalues works very slow