Как заставить Mathematica выполнить сумму, если определена только ее часть? - PullRequest
5 голосов
/ 03 ноября 2011

У меня такая сумма:

Sum[1 + x[i], {i, 1, n}]

Mathematica больше не упрощает это. Что бы мне нужно было сделать, чтобы оно перевело:

n + Sum[x[i],{i,1,n}]

Ответы [ 5 ]

10 голосов
/ 04 ноября 2011

Может быть, это?

Distribute[Sum[1 + x[i], {i, 1, n}]]

, который возвращает:

n + Sum[x[i], {i, 1, n}]
5 голосов
/ 03 ноября 2011

Быстрый и грязный способ - использовать Thread, например,

Thread[Sum[Expand[sigma + (x[i] - X)^2], {i, 1, n}], Plus, 1]
5 голосов
/ 03 ноября 2011

AFAIK Sum просто не даст частичных ответов.Но вы всегда можете отделить добавочную часть вручную или полуавтоматически.Если взять ваш пример,

In[1]:= sigma + (x[i] - X)^2 // Expand

Out[1]= sigma + X^2 - 2 X x[i] + x[i]^2

Мы ничего не можем сделать с частями, которые содержат x[i], ничего не зная о x[i], поэтому мы просто отделим остальное:

In[2]:= Plus @@ Cases[%, e_ /; FreeQ[e, x[i]]]

Out[2]= sigma + X^2

In[3]:= Sum[%, {i, 1, n}]

Out[3]= n (sigma + X^2)

Несвязанный: хорошая идея - никогда не использовать символы, начинающиеся с заглавных букв, чтобы избежать конфликтов со встроенными.N уже имеет значение, и вы не должны использовать его в качестве переменной.

2 голосов
/ 03 ноября 2011

Более простой способ будет

Total[Sum[#, {i, 1, n}] & /@ {sigma, x[i]}]

enter image description here

Если ваше выражение длиннее, это должно дать вам ответ без необходимости вручную разбивать термины

expr = sigma + (x[i] + i)^2 + Cos[Sin[i - x[i]]];
Total[Sum[#, {i, 1, n}] & /@ Level[expr, {1}]]

enter image description here

1 голос
/ 03 ноября 2011

Это также можно сделать простым для понимания способом с помощью правил:

sumofsumsrule = Sum[a_+b_,{i_,c_,d_}] :> Sum[a,{i,c,d}]+Sum[b,{i,c,d}];
expandsummandrule = Sum[a_,{i_,c_,d_}] :> Sum[Expand[a],{i,c,d}];
MyRules = {sumofsumsrule, expandsummandrule};

Теперь, если вы бездельничаете, вы можете использовать это (вот несколько примеров):

error = Sum[sigma+(x[i]-X)^2,{i,1,n}]

error /. sumofsumsrule

% /. expandsummandrule

error //. MyRules
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...