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 <[email protected]> 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 + kcID))*(-k +
> kIH + kIR + kcID - kcSD)**2*(-kEI + kIH + kIR - kcED + kcID))],
> [
> 1]])]), (-kHD - kHHt - kHR - kcHD, 1, [Matrix([
> [
> 0],
> [
> 0],
> [
> 0],
> [
> (kHD + kHHt + kHR + kcHD)*(-k + kHD + kHHt + kHR + kcHD - kcSD)*(-kEI + kHD
> + kHHt + kHR - kcED + kcHD)*(kHD + kHHt + kHR - kHtD - kHtR + kcHD)*(kHD +
> kHHt + kHR - kIH - kIR + kcHD - kcID)/(kHHt*kHtR*(-k + kHD + kHHt + kHR +
> kcHD - kcSD)*(-kEI + kHD + kHHt + kHR - kcED + kcHD)*(kHD + kHHt + kHR -
> kIH - kIR + kcHD - kcID) - kHR*(-k + kHD + kHHt + kHR + kcHD - kcSD)*(-kEI
> + kHD + kHHt + kHR - kcED + kcHD)*(kHD + kHHt + kHR - kHtD - kHtR +
> kcHD)*(kHD + kHHt + kHR - kIH - kIR + kcHD - kcID))],
> [
> -kHHt*(kHD + kHHt + kHR + kcHD)*(-k + kHD + kHHt + kHR + kcHD - kcSD)*(-kEI
> + kHD + kHHt + kHR - kcED + kcHD)*(kHD + kHHt + kHR - kIH - kIR + kcHD -
> kcID)/(kHHt*kHtR*(-k + kHD + kHHt + kHR + kcHD - kcSD)*(-kEI + kHD + kHHt +
> kHR - kcED + kcHD)*(kHD + kHHt + kHR - kIH - kIR + kcHD - kcID) - kHR*(-k +
> kHD + kHHt + kHR + kcHD - kcSD)*(-kEI + kHD + kHHt + kHR - kcED +
> kcHD)*(kHD + kHHt + kHR - kHtD - kHtR + kcHD)*(kHD + kHHt + kHR - kIH - kIR
> + kcHD - kcID))],
> [(kHHt*kHtD*(-k + kHD + kHHt + kHR + kcHD - kcSD)**3*(-kEI + kHD + kHHt +
> kHR - kcED + kcHD)**2*(kHD + kHHt + kHR - kIH - kIR + kcHD - kcID) - (kHD +
> kcHD)*(-k + kHD + kHHt + kHR + kcHD - kcSD)**3*(-kEI + kHD + kHHt + kHR -
> kcED + kcHD)**2*(kHD + kHHt + kHR - kHtD - kHtR + kcHD)*(kHD + kHHt + kHR -
> kIH - kIR + kcHD - kcID))/((kHHt*kHtR*(-k + kHD + kHHt + kHR + kcHD -
> kcSD)*(-kEI + kHD + kHHt + kHR - kcED + kcHD)*(kHD + kHHt + kHR - kIH - kIR
> + kcHD - kcID) - kHR*(-k + kHD + kHHt + kHR + kcHD - kcSD)*(-kEI + kHD +
> kHHt + kHR - kcED + kcHD)*(kHD + kHHt + kHR - kHtD - kHtR + kcHD)*(kHD +
> kHHt + kHR - kIH - kIR + kcHD - kcID))*(-k + kHD + kHHt + kHR + kcHD -
> kcSD)**2*(-kEI + kHD + kHHt + kHR - kcED + kcHD))],
> [
> 1]])])]
>
>
> So that is the issue - I cannot really simplify the eigenvalues, and I am
> still not sure how to proceed.
>
> Any ideas?
>
> Thank you.
>
>
> On Thursday, October 4, 2018 at 6:22:54 PM UTC-6, Aaron Meurer wrote:
>>
>> How sparse is the matrix, and what do the entries look like?
>>
>> One thing that can help depending on what your matrix looks like is to
>> replace large subexpressions with symbols (if there are common
>> subexpressions, cse() can help with this). That way the simplification
>> algorithms don't get caught up trying to simplify the subexpressions.
>> However if you expect the subexpressions to cancel each other out in
>> the result, this can be detrimental.
>>
>> I would start with the eigenvalues. Once you can get those, you will
>> want to simplify them if possible, before computing the eigenvectors.
>>
>> Aaron Meurer
>> On Thu, Oct 4, 2018 at 6:12 PM Jacob Miner <[email protected]> wrote:
>> >
>> >
>> >
>> > On Friday, July 10, 2015 at 3:07:17 PM UTC-6, Ondřej Čertík wrote:
>> >>
>> >> Hi,
>> >>
>> >> On Fri, Jul 10, 2015 at 7:30 AM, 刘金国 <[email protected]> wrote:
>> >> > 4 x 4 is needed ~~
>> >> > mathematica runs extremely fast for 4 x 4 matrix as it should be,
>> but ...
>> >>
>> >> Can you post the Mathematica result? So that we know what you are
>> >> trying to get and we can then help you get it with SymPy.
>> >>
>> >> Ondrej
>> >>
>> >> >
>> >> > 在 2014年2月12日星期三 UTC+8上午5:40:19,Vinzent Steinberg写道:
>> >> >>
>> >> >> On Monday, February 10, 2014 11:27:09 PM UTC-5, monde wilson wrote:
>> >> >>>
>> >> >>> why eigenvectors very slow
>> >> >>>
>> >> >>> what is the difference between numpy and sympy when doing matrix
>> >> >>> calculation
>> >> >>
>> >> >>
>> >> >> Sympy calculates eigenvectors symbolically (thus exactly), numpy
>> >> >> calculates them numerically using floating point arithmetic.
>> >> >> In general you don't want to use sympy to calculate the
>> eigenvectors for
>> >> >> matrices larger than 2x2, because the symbolic results can be very
>> >> >> complicated. (IIRC, the eigenvalues are calculated by finding roots
>> of the
>> >> >> characteristic polynomial, which can lead to nasty expressions for
>> dimension
>> >> >> 3 and beyond.)
>> >> >>
>> >> >>>
>> >> >>> will numpy faster and more accurately
>> >> >>
>> >> >>
>> >> >> Numpy will be a lot faster, but not more accurate. If you only need
>> >> >> numerical results, you probably should use numpy for this.
>> >> >>
>> >> >> Vinzent
>> >> >
>> >> > --
>> >> > 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 [email protected].
>> >> > To post to this group, send email to [email protected].
>> >> > Visit this group at http://groups.google.com/group/sympy.
>> >> > To view this discussion on the web visit
>> >> >
>> https://groups.google.com/d/msgid/sympy/62a17328-bcd2-4955-9534-ae5358e89041%40googlegroups.com.
>>
>> >> > For more options, visit https://groups.google.com/d/optout.
>> >
>> >
>> >
>> > If I wanted to get the eigenvectors (and eigenvalues) of a 10x10
>> symbolic matrix that is relatively sparse, is it possible to use sympy to
>> solve this issue? Can the eigenvects() operation be parallelized in any
>> way?
>> >
>> > I am trying to use OCTAVE as well (which calls from sympy), but once I
>> get above 4x4 the time required to get a solution seems to scale
>> geometrically: (2x2 in <1 sec, 3x3 in ~2 sec, 4x4 in ~minutes, 5x5 ~hr, 7x7
>> ~12 hr).
>> >
>> > Is there some code somewhere with a robust eigensolver that can
>> generate the eigenfunctions and eigenvalues of a 10x10 symbolic matrix?
>> Based on my 7x7 matrix I know the denominators of the solution can be huge,
>> but this is an important problem that I need to solve.
>> >
>> > Thanks.
>> >
>> > --
>> > 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 [email protected].
>> > To post to this group, send email to [email protected].
>> > 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/d95a66fe-9135-4365-9386-6641bf51d9fa%40googlegroups.com.
>>
>> > For more options, visit https://groups.google.com/d/optout.
>>
> --
> 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 [email protected].
> To post to this group, send email to [email protected].
> 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/45532240-28a4-49ac-80d4-4df276ab1f81%40googlegroups.com
> <https://groups.google.com/d/msgid/sympy/45532240-28a4-49ac-80d4-4df276ab1f81%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
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/CA%2B01voMMNUm2PXZ76nKto6_wQRmdWGLXaE0wu92YEcjjrT1r5A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to