I have a symbolic matrix that I would like to diagonalize to find its eigenvalues. I used the SymPy diagonalize
function, but my code doesnt complete even after running for two hours. No error is given, it just doesn't terminate. This example uses the similar protocol but completes immediately. Does anybody know why this would not complete?
import sympy
from sympy import Symbol
from sympy import *
J1 = Symbol('J1')
J2= Symbol('J2')
S1 = Symbol('S1')
S2 = Symbol('S2')
S3 = Symbol('S3')
S4 = Symbol('S4')
Alistmatrix=sympy.Matrix([[0, -2*J1*S1*S2, -J2*S1*S3, 0],
[-2*J1*S1*S2, 0, -2*J1*S2*S3, -J2*S2*S4],
[-J2*S1*S3, -2*J1*S2*S3, 0, -2*J1*S3*S4],
[0, -J2*S2*S4, -2*J1*S3*S4, 0]])
print (Alistmatrix.eigenvects())
print (Alistmatrix.eigenvals())
There is a huge difference in complexity between diagonalizing a 2 by 2 matrix and a 4 by 4 matrix. In fact, Alistmatrix.eigenvals()
returns four eigenvalues, the first of which is:
{Piecewise((-sqrt(8*J1**2*S1**2*S2**2/3 + 8*J1**2*S2**2*S3**2/3 + 8*J1**2*S3**2*S4**2/3 + 2*J2**2*S1**2*S3**2/3 + 2*J2**2*S2**2*S4**2/3 - 2*(-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**(1/3))/2 + sqrt(16*J1**2*S1**2*S2**2/3 + 16*J1**2*S2**2*S3**2/3 + 16*J1**2*S3**2*S4**2/3 + 4*J2**2*S1**2*S3**2/3 + 4*J2**2*S2**2*S4**2/3 + (16*J1**2*J2*S1**2*S2**2*S3**2 + 16*J1**2*J2*S2**2*S3**2*S4**2)/sqrt(8*J1**2*S1**2*S2**2/3 + 8*J1**2*S2**2*S3**2/3 + 8*J1**2*S3**2*S4**2/3 + 2*J2**2*S1**2*S3**2/3 + 2*J2**2*S2**2*S4**2/3 - 2*(-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**(1/3)) + 2*(-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**(1/3))/2, Eq(-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12, 0)), (-sqrt(8*J1**2*S1**2*S2**2/3 + 8*J1**2*S2**2*S3**2/3 + 8*J1**2*S3**2*S4**2/3 + 2*J2**2*S1**2*S3**2/3 + 2*J2**2*S2**2*S4**2/3 - 2*(-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)/(3*((8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/16 + sqrt((-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**2/4 + (-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)**3/27) - (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/6 + (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/216)**(1/3)) + 2*((8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/16 + sqrt((-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**2/4 + (-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)**3/27) - (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/6 + (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/216)**(1/3))/2 + sqrt(16*J1**2*S1**2*S2**2/3 + 16*J1**2*S2**2*S3**2/3 + 16*J1**2*S3**2*S4**2/3 + 4*J2**2*S1**2*S3**2/3 + 4*J2**2*S2**2*S4**2/3 + (16*J1**2*J2*S1**2*S2**2*S3**2 + 16*J1**2*J2*S2**2*S3**2*S4**2)/sqrt(8*J1**2*S1**2*S2**2/3 + 8*J1**2*S2**2*S3**2/3 + 8*J1**2*S3**2*S4**2/3 + 2*J2**2*S1**2*S3**2/3 + 2*J2**2*S2**2*S4**2/3 - 2*(-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)/(3*((8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/16 + sqrt((-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**2/4 + (-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)**3/27) - (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/6 + (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/216)**(1/3)) + 2*((8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/16 + sqrt((-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**2/4 + (-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)**3/27) - (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/6 + (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/216)**(1/3)) + 2*(-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)/(3*((8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/16 + sqrt((-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**2/4 + (-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)**3/27) - (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/6 + (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/216)**(1/3)) - 2*((8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/16 + sqrt((-(8*J1**2*J2*S1**2*S2**2*S3**2 + 8*J1**2*J2*S2**2*S3**2*S4**2)**2/8 + (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/3 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/108)**2/4 + (-16*J1**4*S1**2*S2**2*S3**2*S4**2 + 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 - J2**4*S1**2*S2**2*S3**2*S4**2 - (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**2/12)**3/27) - (16*J1**4*S1**2*S2**2*S3**2*S4**2 - 8*J1**2*J2**2*S1**2*S2**2*S3**2*S4**2 + J2**4*S1**2*S2**2*S3**2*S4**2)*(-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)/6 + (-4*J1**2*S1**2*S2**2 - 4*J1**2*S2**2*S3**2 - 4*J1**2*S3**2*S4**2 - J2**2*S1**2*S3**2 - J2**2*S2**2*S4**2)**3/216)**(1/3))/2, True)): 1, ...
Scroll to the right to fully appreciate this formula. I could not paste the entire output of eigenvals
here, as it exceeds the Stack Overflow post limit.
So it's little surprise that eigenvects()
subsequently chokes, as it has to find eigenvectors for eigenvalues of that complexity, which are Piecewise on top of all.
Perhaps the right thing to do here is to step back and ask: what would you do with a 38000-character formula for eigenvalues even if it was accompanied by a 200000-character formula for eigenvectors? Some problems are just not meant to be solved symbolically.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.