Re: Eigenvalues works very slow

*To*: mathgroup at smc.vnet.net*Subject*: [mg128493] Re: Eigenvalues works very slow*From*: Bill Rowe <readnews at sbcglobal.net>*Date*: Thu, 25 Oct 2012 01:41:13 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-newout@smc.vnet.net*Delivered-to*: mathgroup-newsend@smc.vnet.net

On 10/24/12 at 3:30 AM, lapajne.jure at gmail.com (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]] try 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.