Dear All,
I would like to take the derivative symbolically of a function but it
doesn't seem to work. Basically W and S are matrices, Z=f(W,S) and
loglikelihood=f(eta,Z). I would like the partial derivatives of the
loglikelihood wrt eta and W_ij. It works for eta but not the W_ij. Here is
the code

##
Advertising

n = 3
T = 5
eta = sympy.Symbol('eta')
W = sympy.MatrixSymbol('W', n, n)
S = sympy.MatrixSymbol('S',n,T)
def detdyn(s,w):
'''Z if a function of S and W'''
f = w*s
f_average = sympy.HadamardProduct(f, s)
f_average = sympy.ones(1,f_average.shape[0]) * f_average #row sum
#compute coefficients of Z
c=f.as_mutable()
for r in range(T):
c.col_op(r, lambda i,j: i / f_average[0, r])
z = sympy.HadamardProduct(c,s)
return z
Tk = S.shape[1] #length of the data
Zk = detdyn(S,W)[:,:-1] #compute the deterministic dynamics
Sk = S[:,1:] #drop first observation
Sl = sympy.IndexedBase("Sk")
Zl = sympy.IndexedBase("Zk")
i, t = sympy.symbols('i t', cls=sympy.Idx)
loglikelihood=(Tk-1)*sympy.loggamma(eta)+sympy.Sum(sympy.Sum(-sympy.loggamma(eta*Zl[i,t])+(eta*Zl[i,t]-1)*sympy.ln(Sl[i,t]),(i,
0, 2)),(t, 0, Tk-1))
For example
sympy.diff(loglikelihood,W[0,0])
gives
Sum(0, (i, 0, 2), (t, 0, 4))
which is not correct.
What am I doing wrong?
Thank you,
Holi
--
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/dd702a92-de7f-4bc7-a506-ca372a889203%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.