On Monday, April 28, 2014 12:56:48 AM UTC-7, [email protected] wrote: > > It takes less than two minutes to run > > ./sage -c "n=121; l=range(1,n+1); x=matrix([[floor(n/lcm(i,j)) for i in l] > for j in l]).eigenvalues();" > > But with n=122 calculation seems to get stuck. > > Well, 122=61*2, so maybe it's because of a big factor? However, n=118=59*2 > takes only about a minute. And n=123 takes less than one minute, so the > size of the matrix is not a problem in itself. >
Nor is computing the characteristic polynomial. Note that `eigenvalues` returns its answer in the "field of algebraic numbers". Equality testing is notoriously difficult there, and since the characteristic polynomials of your matrices are not square-free, you will run into some nasty comparisons. The fact that the code finishes for n=121 is pretty good! sage: n=122 sage: l=range(1,n+1); M=matrix([[floor(n/lcm(i,j)) for i in l] for j in l]) sage: f=M.characteristic_polynomial() sage: x=flatten([[a.roots(QQbar,multiplicities=False)]*d for a,d in factor(f)]) works pretty quickly. Upon inspection, it turns out that M.eigenvalues does something like that, but via a much less efficient route. The implementation can probably be streamlined considerably. In reality, there's probably never a compelling reason to work with the eigenvalues of a matrix as explicit algebraic numbers. Either you need their embedding in CC, in which case a numerical approximation should suffice, or you need their algebraic properties, in which case the factorization of the characteristic polynomial over the base ring probably gives you the information you need. -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.
