Problem
How to simplify the following rules?
The rules simplify (single, double, triple ...) summations of Kronecker delta.
Replacement should occur if any summation and the Kronecker delta share an index.
The rules
Single summation:
expr /. Sum[y_ KroneckerDelta[r_, s_], {s1_, 1, p1_}] :> (y /. s1 -> r)
Double summation:
expr /. Sum[y_ KroneckerDelta[r_, s_], {s1_, 1, p1_}, {s2_, 1, p2_}] :>
Sum[(y /. s1 -> r), {s2, 1, p2}]
Tripple summation:
Sum[y_ KroneckerDelta[r_, s_], {s1_, 1, p1_}, {s2_, 1, p2_}, {s3_, 1, p3_}] :>
Sum[(y /. s1 -> r), {s2, 1, p2}, {s3_, 1, p3_}]
Test Case
expr0 = Sum[Log[Sum[A[j, k, l]*B[j, k, l], {l, 1, L}]],
{j, 1, J}, {k, 1, K}]
expr = Simplify[D[expr0, A[a, b, c]]]
expr = expr /. Sum[y_ KroneckerDelta[r_, s_], {s_, 1, p_}] :>
(y /. s -> r)
expr = expr /. Sum[y_ KroneckerDelta[r_, s_], {s1_, 1, p1_}, {s2_, 1, p2_}] :>
Sum[(y /. s1 -> r), {s2, 1, p2}]
expr = expr /. Sum[y_ KroneckerDelta[r_, s_], {s_, 1, p_}] :>
(y /. s -> r)
Attempt
I try to replace all the rules with the following rule:
Sum[y_ KroneckerDelta[r_, s_], {s_, 1, p_}, z___] :> Sum[(y /. s -> r), z]
Doesn't work because sum needs at least 2 arguments but z___ can match with nothing. In that case, Sum[(y /. s -> r), z] is a Sum with only 1 argument.
Comments
Post a Comment