# [sympy] Help with chain rule

```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```
```
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.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])
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