Re: [sympy] Re: why eigenvectors very slow
I think I understand, but is there an implementation of this technique that can actually perform the linear algebra on a symbolic matrix at such improved compute-time? On Tuesday, October 9, 2018 at 1:58:04 PM UTC-6, Isuru Fernando wrote: > > First k-1 entries of the k th eigenvector for an upper triangular matrix U > is U[:k-1,:k-1]^-1 @ U[:k-1,k], which is a triangular solve since > U[:k-1,:k-1] is a triangular matrix and it can be done in O(k^2) time. > > Isuru > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at https://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/7a801808-9dde-4b56-ab8b-f2c9b98334e8%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Re: [sympy] Re: why eigenvectors very slow
First k-1 entries of the k th eigenvector for an upper triangular matrix U is U[:k-1,:k-1]^-1 @ U[:k-1,k], which is a triangular solve since U[:k-1,:k-1] is a triangular matrix and it can be done in O(k^2) time. Isuru On Tue, Oct 9, 2018 at 1:27 PM Jacob Miner wrote: > Isuru, > > I went into Heath's text to get your reference, and it helps layout the > method, but can you please clarify what you meant by 'triangular solves'? > > Thank you. > > On Tue, Oct 9, 2018, 10:45 Aaron Meurer wrote: > >> Your matrix is far simpler than I had imagined (you should have >> mentioned that it was triangular). I think as Isuru said we can likely >> implement a faster method for triangular matrices. The eigenvalues >> themselves (the diagonals) are already computed very quickly. >> >> Aaron Meurer >> On Tue, Oct 9, 2018 at 10:36 AM Isuru Fernando wrote: >> > >> > Hi, >> > >> > For triangular matrices, it's straightforward to calculate >> eigenvectors. You just need triangular solves. See Section 4.4.1 of Heath's >> Scientific Computing 2nd Edition. >> > >> > Isuru >> > >> > On Tue, Oct 9, 2018 at 11:27 AM Jacob Miner >> wrote: >> >> >> >> I will show you a representation of the 7x7 form of my matrix, the >> 10x10 includes a couple additional elements, but has the same overall >> structure and layout. >> >> >> >> The key point is that the diagonal elements are differences of >> multiple values, and each of these values occupies a certain element in the >> lower left of the matrix - the upper right is all 0s. The last two columns >> are also all 0s. >> >> It is not really possible to simplify it further. >> >> >> >> >>> woVIt = >> Matrix([[-(k+kcSD),0,0,0,0,0,0],[k,-(kEI+kcED),0,0,0,0,0],[0,kEI,-(kIH+kIR+kcID),0,0,0,0],[0,0,kIH,-(kHHt+kHD+kHR+kcHD),0,0,0],[0,0,0,kHHt,-(kHtD+kHtR),0,0],[kcSD,kcED,kcID,(kHD+kcHD),kHtD,0,0],[0,0,kIR,kHR,kHtR,0,0]]) >> >> >>> woVIt.eigenvals() >> >> {0: 2, -kIH - kIR - kcID: 1, -kHD - kHHt - kHR - kcHD: 1, -k - kcSD: >> 1, -kEI - kcED: 1, -kHtD - kHtR: 1} >> >> >> >> >>> woVIt.eigenvects() >> >> [(0, 2, [Matrix([ >> >> [0], >> >> [0], >> >> [0], >> >> [0], >> >> [0], >> >> [1], >> >> [0]]), Matrix([ >> >> [0], >> >> [0], >> >> [0], >> >> [0], >> >> [0], >> >> [0], >> >> [1]])]), (-k - kcSD, 1, [Matrix([ >> >> [ >> -(k + kcSD)*(k - kEI - kcED + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR >> - kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(k*kEI*(kHHt*kHtR*kIH - >> (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD)))], >> >> [ >>(k + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - >> kIR - kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(kEI*(kHHt*kHtR*kIH >> - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD)))], >> >> [ >> -(k + >> kcSD)*(k - kHtD - kHtR + kcSD)*(k - kHD - kHHt - kHR - kcHD + >> kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + >> kcSD))*(k - kHtD - kHtR + kcSD))], >> >> [ >> >> kIH*(k + kcSD)*(k - kHtD - kHtR + kcSD)/(kHHt*kHtR*kIH >> - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD))], >> >> [ >> >>-kHHt*kIH*(k + kcSD)/(kHHt*kHtR*kIH >> - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD))], >> >> [(k*kEI*kHHt*kHtD*kIH - (k*kEI*kIH*(kHD + kcHD) - (k*kEI*kcID - >> (k*kcED - kcSD*(k - kEI - kcED + kcSD))*(k - kIH - kIR - kcID + kcSD))*(k - >> kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD))/(k*kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD >> + kcSD))*(k - kHtD - kHtR + kcSD)))], >> >> [ >> >> >> >> 1]])]), (-kEI - kcED, 1, [Matrix([ >> >> [ >> >> >> >> >> 0], >> >> [ >> >>(kEI + kcED)*(kEI - kHtD - kHtR + kcED)*(kEI >> - kIH - kIR + kcED - kcID)*(kEI - kHD - kHHt - kHR + kcED - >> kcHD)/(kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - >> kcHD))*(kEI - kHtD - kHtR + kcED)))], >> >> [ >> >> -(kEI + >> kcED)*(kEI - kHtD - kHtR + kcED)*(kEI - kHD - kHHt - kHR + kcED - >> kcHD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - >> kcHD))*(kEI - kHtD - kHtR + kcED))], >> >> [ >> >> >> kIH*(kEI + kcED)*(kEI - kHtD - kHtR + >> kcED)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - >> kcHD))*(kEI - kHtD - kHtR + kcED))], >> >> [ >> >> >> -kHHt*kIH*(kEI + >> kcED)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - >> kcHD))*(kEI - kHtD - kHtR + kcED))], >> >> [(kEI*kHHt*kHtD*kIH*(-k + kEI + kcED - kcSD) - (kEI*kIH*(kHD + >> kcHD)*(-k + kEI + kcED - kcSD) - (kEI*kcID*(-k + kEI + kcED - kcSD) - >> kcED*(-k + kEI + kcED - kcSD)*(kEI - kIH - kIR + kcED - kcID))*(kEI - kHD - >> kHHt - kHR + kcED -
Re: [sympy] Re: why eigenvectors very slow
Isuru, I went into Heath's text to get your reference, and it helps layout the method, but can you please clarify what you meant by 'triangular solves'? Thank you. On Tue, Oct 9, 2018, 10:45 Aaron Meurer wrote: > Your matrix is far simpler than I had imagined (you should have > mentioned that it was triangular). I think as Isuru said we can likely > implement a faster method for triangular matrices. The eigenvalues > themselves (the diagonals) are already computed very quickly. > > Aaron Meurer > On Tue, Oct 9, 2018 at 10:36 AM Isuru Fernando wrote: > > > > Hi, > > > > For triangular matrices, it's straightforward to calculate eigenvectors. > You just need triangular solves. See Section 4.4.1 of Heath's Scientific > Computing 2nd Edition. > > > > Isuru > > > > On Tue, Oct 9, 2018 at 11:27 AM Jacob Miner wrote: > >> > >> I will show you a representation of the 7x7 form of my matrix, the > 10x10 includes a couple additional elements, but has the same overall > structure and layout. > >> > >> The key point is that the diagonal elements are differences of multiple > values, and each of these values occupies a certain element in the lower > left of the matrix - the upper right is all 0s. The last two columns are > also all 0s. > >> It is not really possible to simplify it further. > >> > >> >>> woVIt = > Matrix([[-(k+kcSD),0,0,0,0,0,0],[k,-(kEI+kcED),0,0,0,0,0],[0,kEI,-(kIH+kIR+kcID),0,0,0,0],[0,0,kIH,-(kHHt+kHD+kHR+kcHD),0,0,0],[0,0,0,kHHt,-(kHtD+kHtR),0,0],[kcSD,kcED,kcID,(kHD+kcHD),kHtD,0,0],[0,0,kIR,kHR,kHtR,0,0]]) > >> >>> woVIt.eigenvals() > >> {0: 2, -kIH - kIR - kcID: 1, -kHD - kHHt - kHR - kcHD: 1, -k - kcSD: 1, > -kEI - kcED: 1, -kHtD - kHtR: 1} > >> > >> >>> woVIt.eigenvects() > >> [(0, 2, [Matrix([ > >> [0], > >> [0], > >> [0], > >> [0], > >> [0], > >> [1], > >> [0]]), Matrix([ > >> [0], > >> [0], > >> [0], > >> [0], > >> [0], > >> [0], > >> [1]])]), (-k - kcSD, 1, [Matrix([ > >> [ > -(k + kcSD)*(k - kEI - kcED + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR > - kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(k*kEI*(kHHt*kHtR*kIH - > (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + > kcSD)))], > >> [ >(k + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - > kIR - kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(kEI*(kHHt*kHtR*kIH > - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + > kcSD)))], > >> [ > -(k + > kcSD)*(k - kHtD - kHtR + kcSD)*(k - kHD - kHHt - kHR - kcHD + > kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + > kcSD))*(k - kHtD - kHtR + kcSD))], > >> [ > > kIH*(k + kcSD)*(k - kHtD - kHtR + kcSD)/(kHHt*kHtR*kIH > - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + > kcSD))], > >> [ > >-kHHt*kIH*(k + kcSD)/(kHHt*kHtR*kIH > - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + > kcSD))], > >> [(k*kEI*kHHt*kHtD*kIH - (k*kEI*kIH*(kHD + kcHD) - (k*kEI*kcID - (k*kcED > - kcSD*(k - kEI - kcED + kcSD))*(k - kIH - kIR - kcID + kcSD))*(k - kHD - > kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))/(k*kEI*(kHHt*kHtR*kIH > - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + > kcSD)))], > >> [ > > > > 1]])]), (-kEI - kcED, 1, [Matrix([ > >> [ > > > > > 0], > >> [ > >(kEI + kcED)*(kEI - kHtD - kHtR + kcED)*(kEI > - kIH - kIR + kcED - kcID)*(kEI - kHD - kHHt - kHR + kcED - > kcHD)/(kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - > kcHD))*(kEI - kHtD - kHtR + kcED)))], > >> [ > > -(kEI + > kcED)*(kEI - kHtD - kHtR + kcED)*(kEI - kHD - kHHt - kHR + kcED - > kcHD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - > kcHD))*(kEI - kHtD - kHtR + kcED))], > >> [ > > > kIH*(kEI + kcED)*(kEI - kHtD - kHtR + > kcED)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - > kcHD))*(kEI - kHtD - kHtR + kcED))], > >> [ > > > -kHHt*kIH*(kEI + > kcED)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - > kcHD))*(kEI - kHtD - kHtR + kcED))], > >> [(kEI*kHHt*kHtD*kIH*(-k + kEI + kcED - kcSD) - (kEI*kIH*(kHD + > kcHD)*(-k + kEI + kcED - kcSD) - (kEI*kcID*(-k + kEI + kcED - kcSD) - > kcED*(-k + kEI + kcED - kcSD)*(kEI - kIH - kIR + kcED - kcID))*(kEI - kHD - > kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED))/(kEI*(kHHt*kHtR*kIH > - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR > + kcED))*(-k + kEI + kcED - kcSD))], > >> [ > > > > > 1]])]), (-kHtD - kHtR, 1, [Matrix([ > >> [ 0], > >> [ 0], > >> [ 0], > >> [ 0], > >> [-(kHtD + kHtR)/kHtR], > >> [ kHtD/kHtR], > >> [
Re: [sympy] Re: why eigenvectors very slow
Your matrix is far simpler than I had imagined (you should have mentioned that it was triangular). I think as Isuru said we can likely implement a faster method for triangular matrices. The eigenvalues themselves (the diagonals) are already computed very quickly. Aaron Meurer On Tue, Oct 9, 2018 at 10:36 AM Isuru Fernando wrote: > > Hi, > > For triangular matrices, it's straightforward to calculate eigenvectors. You > just need triangular solves. See Section 4.4.1 of Heath's Scientific > Computing 2nd Edition. > > Isuru > > On Tue, Oct 9, 2018 at 11:27 AM Jacob Miner wrote: >> >> I will show you a representation of the 7x7 form of my matrix, the 10x10 >> includes a couple additional elements, but has the same overall structure >> and layout. >> >> The key point is that the diagonal elements are differences of multiple >> values, and each of these values occupies a certain element in the lower >> left of the matrix - the upper right is all 0s. The last two columns are >> also all 0s. >> It is not really possible to simplify it further. >> >> >>> woVIt = >> >>> Matrix([[-(k+kcSD),0,0,0,0,0,0],[k,-(kEI+kcED),0,0,0,0,0],[0,kEI,-(kIH+kIR+kcID),0,0,0,0],[0,0,kIH,-(kHHt+kHD+kHR+kcHD),0,0,0],[0,0,0,kHHt,-(kHtD+kHtR),0,0],[kcSD,kcED,kcID,(kHD+kcHD),kHtD,0,0],[0,0,kIR,kHR,kHtR,0,0]]) >> >>> woVIt.eigenvals() >> {0: 2, -kIH - kIR - kcID: 1, -kHD - kHHt - kHR - kcHD: 1, -k - kcSD: 1, -kEI >> - kcED: 1, -kHtD - kHtR: 1} >> >> >>> woVIt.eigenvects() >> [(0, 2, [Matrix([ >> [0], >> [0], >> [0], >> [0], >> [0], >> [1], >> [0]]), Matrix([ >> [0], >> [0], >> [0], >> [0], >> [0], >> [0], >> [1]])]), (-k - kcSD, 1, [Matrix([ >> [ -(k + >> kcSD)*(k - kEI - kcED + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR - kcID >> + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(k*kEI*(kHHt*kHtR*kIH - >> (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD)))], >> [ >> (k + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR - >> kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(kEI*(kHHt*kHtR*kIH - >> (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD)))], >> [ >> -(k + kcSD)*(k - >> kHtD - kHtR + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(kHHt*kHtR*kIH - >> (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD))], >> [ >> >> kIH*(k + kcSD)*(k - kHtD - kHtR + kcSD)/(kHHt*kHtR*kIH - >> (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD))], >> [ >> >> -kHHt*kIH*(k + kcSD)/(kHHt*kHtR*kIH - >> (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD))], >> [(k*kEI*kHHt*kHtD*kIH - (k*kEI*kIH*(kHD + kcHD) - (k*kEI*kcID - (k*kcED - >> kcSD*(k - kEI - kcED + kcSD))*(k - kIH - kIR - kcID + kcSD))*(k - kHD - kHHt >> - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))/(k*kEI*(kHHt*kHtR*kIH - >> (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + >> kcSD)))], >> [ >> >> >> >> 1]])]), (-kEI - kcED, 1, [Matrix([ >> [ >> >> >> >> >> 0], >> [ >> >> (kEI + kcED)*(kEI - kHtD - kHtR + kcED)*(kEI - kIH - >> kIR + kcED - kcID)*(kEI - kHD - kHHt - kHR + kcED - >> kcHD)/(kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - >> kcHD))*(kEI - kHtD - kHtR + kcED)))], >> [ >> >>
Re: [sympy] Re: why eigenvectors very slow
Hi, For triangular matrices, it's straightforward to calculate eigenvectors. You just need triangular solves. See Section 4.4.1 of Heath's Scientific Computing 2nd Edition. Isuru On Tue, Oct 9, 2018 at 11:27 AM Jacob Miner wrote: > I will show you a representation of the 7x7 form of my matrix, the 10x10 > includes a couple additional elements, but has the same overall structure > and layout. > > The key point is that the diagonal elements are differences of multiple > values, and each of these values occupies a certain element in the lower > left of the matrix - the upper right is all 0s. The last two columns are > also all 0s. > It is not really possible to simplify it further. > > >>> woVIt = > Matrix([[-(k+kcSD),0,0,0,0,0,0],[k,-(kEI+kcED),0,0,0,0,0],[0,kEI,-(kIH+kIR+kcID),0,0,0,0],[0,0,kIH,-(kHHt+kHD+kHR+kcHD),0,0,0],[0,0,0,kHHt,-(kHtD+kHtR),0,0],[kcSD,kcED,kcID,(kHD+kcHD),kHtD,0,0],[0,0,kIR,kHR,kHtR,0,0]]) > >>> woVIt.eigenvals() > {0: 2, -kIH - kIR - kcID: 1, -kHD - kHHt - kHR - kcHD: 1, -k - kcSD: 1, > -kEI - kcED: 1, -kHtD - kHtR: 1} > > >>> woVIt.eigenvects() > [(0, 2, [Matrix([ > [0], > [0], > [0], > [0], > [0], > [1], > [0]]), Matrix([ > [0], > [0], > [0], > [0], > [0], > [0], > [1]])]), (-k - kcSD, 1, [Matrix([ > [ -(k > + kcSD)*(k - kEI - kcED + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR - > kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(k*kEI*(kHHt*kHtR*kIH - > (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + > kcSD)))], > [ > (k + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR - kcID + kcSD)*(k - kHD > - kHHt - kHR - kcHD + kcSD)/(kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - > kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD)))], > [ > -(k + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kHD - kHHt - kHR - kcHD + > kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + > kcSD))*(k - kHtD - kHtR + kcSD))], > [ > kIH*(k + kcSD)*(k - kHtD - kHtR + kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k > - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))], > [ > -kHHt*kIH*(k + kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR > - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))], > [(k*kEI*kHHt*kHtD*kIH - (k*kEI*kIH*(kHD + kcHD) - (k*kEI*kcID - (k*kcED - > kcSD*(k - kEI - kcED + kcSD))*(k - kIH - kIR - kcID + kcSD))*(k - kHD - > kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))/(k*kEI*(kHHt*kHtR*kIH > - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + > kcSD)))], > [ > 1]])]), (-kEI - kcED, 1, [Matrix([ > [ > 0], > [ > (kEI + kcED)*(kEI - kHtD - kHtR + kcED)*(kEI - kIH - kIR + kcED - > kcID)*(kEI - kHD - kHHt - kHR + kcED - kcHD)/(kEI*(kHHt*kHtR*kIH - (kHR*kIH > - kIR*(kEI - kHD - kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED)))], > [ > -(kEI + kcED)*(kEI - kHtD - kHtR + kcED)*(kEI - kHD - kHHt - kHR + kcED - > kcHD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - > kcHD))*(kEI - kHtD - kHtR + kcED))], > [ > kIH*(kEI + kcED)*(kEI - kHtD - kHtR + kcED)/(kHHt*kHtR*kIH - (kHR*kIH - > kIR*(kEI - kHD - kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED))], > [ > -kHHt*kIH*(kEI + kcED)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - > kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED))], > [(kEI*kHHt*kHtD*kIH*(-k + kEI + kcED - kcSD) - (kEI*kIH*(kHD + kcHD)*(-k + > kEI + kcED - kcSD) - (kEI*kcID*(-k + kEI + kcED - kcSD) - kcED*(-k + kEI + > kcED - kcSD)*(kEI - kIH - kIR + kcED - kcID))*(kEI - kHD - kHHt - kHR + > kcED - kcHD))*(kEI - kHtD - kHtR + kcED))/(kEI*(kHHt*kHtR*kIH - (kHR*kIH - > kIR*(kEI - kHD - kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED))*(-k > + kEI + kcED - kcSD))], > [ > 1]])]), (-kHtD - kHtR, 1, [Matrix([ > [ 0], > [ 0], > [ 0], > [ 0], > [-(kHtD + kHtR)/kHtR], > [ kHtD/kHtR], > [ 1]])]), (-kIH - kIR - kcID, 1, [Matrix([ > [ > 0], > [ > 0], > [ > -(kIH + kIR + kcID)*(-kHtD - kHtR + kIH + kIR + kcID)*(-kHD - kHHt - kHR + > kIH + kIR - kcHD + kcID)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(-kHD - kHHt - kHR > + kIH + kIR - kcHD + kcID))*(-kHtD - kHtR + kIH + kIR + kcID))], > [ > kIH*(kIH + kIR + kcID)*(-kHtD - kHtR + kIH + kIR + kcID)/(kHHt*kHtR*kIH - > (kHR*kIH - kIR*(-kHD - kHHt - kHR + kIH + kIR - kcHD + kcID))*(-kHtD - kHtR > + kIH + kIR + kcID))], > [ > -kHHt*kIH*(kIH + kIR + kcID)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(-kHD - kHHt - > kHR + kIH + kIR - kcHD + kcID))*(-kHtD - kHtR + kIH + kIR + kcID))], > [(kHHt*kHtD*kIH*(-k + kIH + kIR + kcID - kcSD)**2*(-kEI + kIH + kIR - kcED > + kcID) - (kIH*(kHD + kcHD)*(-k + kIH + kIR + kcID - kcSD)**2*(-kEI + kIH + > kIR - kcED + kcID) - kcID*(-k + kIH + kIR + kcID - kcSD)**2*(-kEI + kIH + > kIR - kcED + kcID)*(-kHD - kHHt - kHR + kIH + kIR - kcHD + kcID))*(-kHtD - > kHtR + kIH + kIR + kcID))/((kHHt*kHtR*kIH - (kHR*kIH - kIR*(-kHD - kHHt - > kHR + kIH + kIR - kcHD + kcID))*(-kHtD - kHtR + kIH + kIR
Re: [sympy] Re: why eigenvectors very slow
I will show you a representation of the 7x7 form of my matrix, the 10x10 includes a couple additional elements, but has the same overall structure and layout. The key point is that the diagonal elements are differences of multiple values, and each of these values occupies a certain element in the lower left of the matrix - the upper right is all 0s. The last two columns are also all 0s. It is not really possible to simplify it further. >>> woVIt = Matrix([[-(k+kcSD),0,0,0,0,0,0],[k,-(kEI+kcED),0,0,0,0,0],[0,kEI,-(kIH+kIR+kcID),0,0,0,0],[0,0,kIH,-(kHHt+kHD+kHR+kcHD),0,0,0],[0,0,0,kHHt,-(kHtD+kHtR),0,0],[kcSD,kcED,kcID,(kHD+kcHD),kHtD,0,0],[0,0,kIR,kHR,kHtR,0,0]]) >>> woVIt.eigenvals() {0: 2, -kIH - kIR - kcID: 1, -kHD - kHHt - kHR - kcHD: 1, -k - kcSD: 1, -kEI - kcED: 1, -kHtD - kHtR: 1} >>> woVIt.eigenvects() [(0, 2, [Matrix([ [0], [0], [0], [0], [0], [1], [0]]), Matrix([ [0], [0], [0], [0], [0], [0], [1]])]), (-k - kcSD, 1, [Matrix([ [ -(k + kcSD)*(k - kEI - kcED + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR - kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(k*kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD)))], [ (k + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kIH - kIR - kcID + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD)))], [ -(k + kcSD)*(k - kHtD - kHtR + kcSD)*(k - kHD - kHHt - kHR - kcHD + kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))], [ kIH*(k + kcSD)*(k - kHtD - kHtR + kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))], [ -kHHt*kIH*(k + kcSD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))], [(k*kEI*kHHt*kHtD*kIH - (k*kEI*kIH*(kHD + kcHD) - (k*kEI*kcID - (k*kcED - kcSD*(k - kEI - kcED + kcSD))*(k - kIH - kIR - kcID + kcSD))*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD))/(k*kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(k - kHD - kHHt - kHR - kcHD + kcSD))*(k - kHtD - kHtR + kcSD)))], [ 1]])]), (-kEI - kcED, 1, [Matrix([ [ 0], [ (kEI + kcED)*(kEI - kHtD - kHtR + kcED)*(kEI - kIH - kIR + kcED - kcID)*(kEI - kHD - kHHt - kHR + kcED - kcHD)/(kEI*(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED)))], [ -(kEI + kcED)*(kEI - kHtD - kHtR + kcED)*(kEI - kHD - kHHt - kHR + kcED - kcHD)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED))], [ kIH*(kEI + kcED)*(kEI - kHtD - kHtR + kcED)/(kHHt*kHtR*kIH - (kHR*kIH - kIR*(kEI - kHD - kHHt - kHR + kcED - kcHD))*(kEI - kHtD - kHtR + kcED))], [