Ситуация интересная. Приведу код:
Код:
In[1]:= f = Sum[x[i], {i, 1, n}]
In[2]:= Sum[D[f, x[k]], {k, 1, n}]
Out[2]= 0
In[3]:= Sum[D[f, x[i]], {i, 1, n}]
Out[3]= n^2
In[4]:= D[f, x[i]]
Out[4]= n
Что мы здесь видим?
f равняется в точности
Sum[x[i], {i, 1, n}], когда
n свободна от значения. При дифференцировании по
x[k] получается нуль, поскольку
D[Sum[x[i], {i,1,n}], x[k]] = Sum[D[x[i],x[k]], {i,1,n}] и
D[x[i],x[k]]=0. Последнее справедливо потому, что для Математики
x[i] и
x[k] настолько же одинаковые символы, как
x и
y: действительно,
D[x,y]=0. Если дифференцировать по
x[i], то будет
Sum[Sum[D[x[i],x[i]], {i,1,n}], {i,1,n}], которое равняется
n^2.
В то же время, если дать значение
n, то
f редуцируется до конечной суммы вида
Plus[x[1], x[2], x[3], ..., x[n]] и дальнейшие вычисления происходят правильно.
Разрешить проблему я могу предложить следующий способ:
Код:
Unprotect[D];
D[Sum[e_, i_], v_] := Sum[D[e, v], i];
x /: D[x[i_], x[k_]] = KroneckerDelta[i, k];
FullSimplify[Sum[D[f, x[k]], {k, 1, n}], Element[{k}, Integers]]
Out= n