# Revision history [back]

### Determinants of Quotients of Symmetric Functions

I'm interested in calculating the determinant of the matrix $A = (a_{i+j})$ for $0\leq i,j\leq n$ in which $a_{k} = \frac{h_k}{e_k}$ where $h_k, e_k$ are the homogeneous (elementary, resp.) symmetric functions of degree $k$. I would like to express the numerator of $\det(A)$ in terms of monomial symmetric functions.

I have written some code that I think does the job, but it seems an incredibly hacky way of doing it in my opinion. Since I am quite new to sage I was wondering whether someone might be able to take a look at what I've done and suggest a more sage-like way to tackle this problem? My code is below.

I define a set of functions:

# set up two matrices containing symbolic functions hh(i+j), ee(i+j), which are later replaced with symmetric functions h and e

def heMatrices(N):
hh = function('hh')
ee = function('ee')
H = matrix(SR,N,N,lambda i,j:hh(i+j))
E = matrix(SR,N,N,lambda i,j:ee(i+j))
return H,E

# Pointwise divides two matrices (a bit like Hadamard division??)

def elementwiseDivision( M, N ):

assert( M.parent() == N.parent() )

nc, nr = M.ncols(), M.nrows()
A = copy( M.parent().zero() )

for r in range(nr):
for c in range(nc):
A[r,c] = M[r,c] / N[r,c]

return A

# extracts numerator of determinant

def extractNumerator(M):
return det(M).numerator()

# extracts denominator of determinant
def extractDenominator(M):
return det(M).denominator()

# This is dodgy - treates expression as a python string and replaces e(x) with e[x], h(x) with h[x]

def convertToSymmetricString(expr):
st = str(expr)
st = st.replace('(','[')
st = st.replace(')',']')
st = st.replace('ee','e')
st = st.replace('hh','h')
return st

# Puts together the above functions.

def evaluateDeterminant(N):
h,e = heMatrices(N)
A = elementwiseDivision(h,e)
srExpression = extractNumerator(A)
sageExpression = convertToSymmetricString(srExpression)
return sageExpression


Then I open sage in the command line and type the following:

sage: Sym = SymmetricFunctions(QQ)
sage: Sym.inject_shorthands(verbose=False)
sage: ee = evaluateDeterminant(2)
sage: ans = sage_eval(ee, locals=vars())
sage: ans = m(ans)


which returns

2*m[2, 1, 1] + 2*m[2, 2] + 2*m[3, 1] + m[4]


which I believe is what I'm after.