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