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.HadamardProduct(f, s) f_average = sympy.ones(1,f_average.shape) * 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 #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 firstname.lastname@example.org. 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.