2015-02-05 2 views
2

У меня есть следующий код: Maximaмаксимумы: расширение вложенного суммирования

m:sum(x[i],i,1,N)/N; 

, а затем я хочу, чтобы вычислить $ M^2 $.

m2:m^2, sumexpand; 

Тогда я получаю двойное суммирование:

sum(sum(x[i1]*x[i2],i1,1,N),i2,1,N)/N^2 

То, что я хочу, чтобы достичь является, чтобы развернуть его в двух сумм.

Первый - sum(x[i]^2,i,1,N), а второй - rest over non-equal indices. Как мне это сделать? Как мне это сделать с произвольной мощностью m?

ответ

4

sum не объявляется линейным по умолчанию; вы можете объявить его линейным и resimplify. Обратите внимание, что для получения ожидаемого эффекта вам необходимо объявить форму существительного sum.

(%i1) m:sum(x[i],i,1,N)/N; 
            N 
            ==== 
            \ 
            > x 
           / i 
            ==== 
            i = 1 
(%o1)        -------- 
             N 
(%i2) m2:m^2, sumexpand; 
           N  N 
          ==== ==== 
          \  \ 
           >  >  x x 
          / /  i1 i2 
          ==== ==== 
          i1 = 1 i2 = 1 
(%o2)      --------------------- 
             2 
             N 
(%i3) declare (nounify(sum), linear); 
(%o3)        done 
(%i4) ''%o2; 
           N   N 
          ====  ==== 
          \   \ 
          (>  x ) >  x 
          /  i1/  i2 
          ====  ==== 
          i1 = 1  i2 = 1 
(%o4)      ----------------------- 
             2 
             N 
Смежные вопросы