| 1 | initial version |
The IndexError makes perfect sense:
sage: n = 3
sage: R = PolynomialRing(RR,[['r','t'][cmp(int(i/n),i%n)]+'_'+str(1+int(i/n))+str(1+i%n) for i in range(n^2)])
sage: S = matrix(R,3,R.gens())
sage:
sage: [(S[i][int(k/n)]*S[i][k%n]*S[j][k%n]*S[j][int(k/n)])*(int(k/n)!=k%n)for k in range(n^2)]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
[...]
IndexError: matrix index out of range
in this line you use both i and j but don't define them. So i is still what it was left at the end of the R list comprehension, and j is undefined:
sage: i
8
sage: j
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
[...]
NameError: name 'j' is not defined
So even if i happened to be a valid index, the lack of j would mean the line wouldn't work.
Incidentally, rather than int(k/n) you can simply use k//n for truncating division:
sage: int(5/2)
2
sage: parent(_)
<type 'int'>
sage: 5//2
2
sage: parent(_)
Integer Ring
which has the advantage of staying a Sage Integer. (Not so relevant here, I admit, where the result is being used as an index immediately and then discarded, but it's handy elsewhere.)
| 2 | matched update |
The IndexError makes perfect sense:
sage: n = 3
sage: R = PolynomialRing(RR,[['r','t'][cmp(int(i/n),i%n)]+'_'+str(1+int(i/n))+str(1+i%n) for i in range(n^2)])
sage: S = matrix(R,3,R.gens())
sage:
sage: [(S[i][int(k/n)]*S[i][k%n]*S[j][k%n]*S[j][int(k/n)])*(int(k/n)!=k%n)for k in range(n^2)]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
[...]
IndexError: matrix index out of range
in this line you use both i and j but don't define them. So i is still what it was left at the end of the R list comprehension, and j is undefined:
sage: i
8
sage: j
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
[...]
NameError: name 'j' is not defined
So even if i happened to be a valid index, the lack of j would mean the line wouldn't work.
Incidentally, rather than int(k/n) you can simply use k//n for truncating division:
sage: int(5/2)
2
sage: parent(_)
<type 'int'>
sage: 5//2
2
sage: parent(_)
Integer Ring
which has the advantage of staying a Sage Integer. (Not so relevant here, I admit, where the result is being used as an index immediately and then discarded, but it's handy elsewhere.)
Edit:
As for your updated question:
Shot = matrix(RR,n,n, Sh)
tries to make an n x n matrix over a 53-bit real field, but the entries live somewhere else:
sage: Sh(0,0)
2.00000000000000*r_11^2*t_12^2 + 2.00000000000000*r_11^2*t_13^2 + 2.00000000000000*t_12^2*t_13^2
sage: parent(Sh(0,0))
Multivariate Polynomial Ring in r_11, t_12, t_13, t_21, r_22, t_23, t_31, t_32, r_33 over Real Field with 53 bits of precision
i.e. in R, not in RR:
sage: Shot = matrix(R,n,n, Sh)
sage: Shot
[ 2.00000000000000*r_11^2*t_12^2 + 2.00000000000000*r_11^2*t_13^2 + 2.00000000000000*t_12^2*t_13^2 2.00000000000000*r_11*t_12*t_21*r_22 + 2.00000000000000*r_11*t_13*t_21*t_23 + 2.00000000000000*t_12*t_13*r_22*t_23 2.00000000000000*r_11*t_12*t_31*t_32 + 2.00000000000000*r_11*t_13*t_31*r_33 + 2.00000000000000*t_12*t_13*t_32*r_33]
[2.00000000000000*r_11*t_12*t_21*r_22 + 2.00000000000000*r_11*t_13*t_21*t_23 + 2.00000000000000*t_12*t_13*r_22*t_23 2.00000000000000*t_21^2*r_22^2 + 2.00000000000000*t_21^2*t_23^2 + 2.00000000000000*r_22^2*t_23^2 2.00000000000000*t_21*r_22*t_31*t_32 + 2.00000000000000*t_21*t_23*t_31*r_33 + 2.00000000000000*r_22*t_23*t_32*r_33]
[2.00000000000000*r_11*t_12*t_31*t_32 + 2.00000000000000*r_11*t_13*t_31*r_33 + 2.00000000000000*t_12*t_13*t_32*r_33 2.00000000000000*t_21*r_22*t_31*t_32 + 2.00000000000000*t_21*t_23*t_31*r_33 + 2.00000000000000*r_22*t_23*t_32*r_33 2.00000000000000*t_31^2*t_32^2 + 2.00000000000000*t_31^2*r_33^2 + 2.00000000000000*t_32^2*r_33^2]
| 3 | No.3 Revision |
The IndexError makes perfect sense:
sage: n = 3
sage: R = PolynomialRing(RR,[['r','t'][cmp(int(i/n),i%n)]+'_'+str(1+int(i/n))+str(1+i%n) for i in range(n^2)])
sage: S = matrix(R,3,R.gens())
sage:
sage: [(S[i][int(k/n)]*S[i][k%n]*S[j][k%n]*S[j][int(k/n)])*(int(k/n)!=k%n)for k in range(n^2)]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
[...]
IndexError: matrix index out of range
in this line you use both i and j but don't define them. So i is still what it was left at the end of the R list comprehension, and j is undefined:
sage: i
8
sage: j
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
[...]
NameError: name 'j' is not defined
So even if i happened to be a valid index, the lack of j would mean the line wouldn't work.
Incidentally, rather than int(k/n) you can simply use k//n for truncating division:
sage: int(5/2)
2
sage: parent(_)
<type 'int'>
sage: 5//2
2
sage: parent(_)
Integer Ring
which has the advantage of staying a Sage Integer. (Not so relevant here, I admit, where the result is being used as an index immediately and then discarded, but it's handy elsewhere.)
Edit:
As for your updated question:
Shot = matrix(RR,n,n, Sh)
tries to make an n x n matrix over a 53-bit real field, but the entries live somewhere else:
sage: Sh(0,0)
2.00000000000000*r_11^2*t_12^2 + 2.00000000000000*r_11^2*t_13^2 + 2.00000000000000*t_12^2*t_13^2
sage: parent(Sh(0,0))
Multivariate Polynomial Ring in r_11, t_12, t_13, t_21, r_22, t_23, t_31, t_32, r_33 over Real Field with 53 bits of precision
i.e. in R, not in RR:
sage: Shot = matrix(R,n,n, Sh)
sage: Shot
[ 2.00000000000000*r_11^2*t_12^2 + 2.00000000000000*r_11^2*t_13^2 + 2.00000000000000*t_12^2*t_13^2 2.00000000000000*r_11*t_12*t_21*r_22 + 2.00000000000000*r_11*t_13*t_21*t_23 + 2.00000000000000*t_12*t_13*r_22*t_23 2.00000000000000*r_11*t_12*t_31*t_32 + 2.00000000000000*r_11*t_13*t_31*r_33 + 2.00000000000000*t_12*t_13*t_32*r_33]
[2.00000000000000*r_11*t_12*t_21*r_22 + 2.00000000000000*r_11*t_13*t_21*t_23 + 2.00000000000000*t_12*t_13*r_22*t_23 2.00000000000000*t_21^2*r_22^2 + 2.00000000000000*t_21^2*t_23^2 + 2.00000000000000*r_22^2*t_23^2 2.00000000000000*t_21*r_22*t_31*t_32 + 2.00000000000000*t_21*t_23*t_31*r_33 + 2.00000000000000*r_22*t_23*t_32*r_33]
[2.00000000000000*r_11*t_12*t_31*t_32 + 2.00000000000000*r_11*t_13*t_31*r_33 + 2.00000000000000*t_12*t_13*t_32*r_33 2.00000000000000*t_21*r_22*t_31*t_32 + 2.00000000000000*t_21*t_23*t_31*r_33 + 2.00000000000000*r_22*t_23*t_32*r_33 2.00000000000000*t_31^2*t_32^2 + 2.00000000000000*t_31^2*r_33^2 + 2.00000000000000*t_32^2*r_33^2]
It can take a while to get used to Sage's structures, but eventually it all starts to make sense.
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.