与克罗内克三角洲的紧张关系同情

时间:2017-05-04 21:26:56

标签: sympy

我试图用sympy为我做一些指数体操。我试图计算看起来像

的成本函数的导数

cost = sum i (M ii 2

其中M由旋转给出

M ij = U * ki M 0 kl U LJ

我已经为旋转矩阵编写了参数化,从中我得到了衍生物作为Kronecker deltas的产品。我到目前为止所做的是

def Uder(p,q,r,s):
    return KroneckerDelta(p,r)*KroneckerDelta(q,s) - KroneckerDelta(p,s)*KroneckerDelta(q,r)

from sympy import *

# Matrix size                                                                                                                                                                                 
n = symbols('n')
p = symbols('p');
i = Dummy('i')
k = Dummy('k')
l = Dummy('l')

# Matrix elements                                                                                                                                                                             
M0 = IndexedBase('M')
U = IndexedBase('U')

# Indices                                                                                                                                                                                     
r, s = map(tensor.Idx, ['r', 's'])

# Derivative                                                                                                                                                                                  
cost_x = Sum(Sum(Sum(M0[i,i]*(Uder(k,i,r,s)*M0[k,l]*U[l,i] + U[k,i]*M0[k,l]*Uder(l,i,r,s)),(k,1,n)),(l,1,n)),(i,1,n))

print cost_x

但是,同情心并没有评估我的收缩,这应该减少到r和s的简单总和,这是旋转指数。相反,我得到的是

Sum(((-KroneckerDelta(_i, r)*KroneckerDelta(_k, s) + KroneckerDelta(_i, s)*KroneckerDelta(_k, r))*M[_k, _l]*U[_l, _i] + (-KroneckerDelta(_i, r)*KroneckerDelta(_l, s) + KroneckerDelta(_i, s)*KroneckerDelta(_l, r))*M[_k, _l]*U[_k, _i])*M[_i, _i], (_k, 1, n), (_l, 1, n), (_i, 1, n))

我正在使用最新的git快照4633fd5713c434c3286e3412a2399bd40fbd9569。

0 个答案:

没有答案