2. Вычисление сумм

 

Вычисление сумм

 

Вычисление сумм в аналитическом виде

В числе операций математического анализа прежде всего надо отметить суммы


Сумма от i=min до imax по fi

В этих операциях индекс i принимает целочисленные значения от минимального (начального) imin до максимального (конечного) imax с шагом, равным +1.

Суммы и произведения легко вычисляются численными математическими системами, такие вычисления просто описываются на всех языках программирования. Однако важным достоинством систем символьной математики, включая Ма-thematica, является вычисление сумм и произведений в аналитическом виде (если это возможно) и при большом числе членов — вплоть до стремящегося к бесконечности.

Для вычисления сумм в системе Mathematica предусмотрена функция Sum, используемая в ряде форм:

  • Sum [ f, {i, imax} ] — вычисляет сумму значений f при изменении индекса i от 1 до imax с шагом +1;
  • Sum[f, {i, imin, imax}]—вычисляет сумму значений f при изменении индекса i от минимального значения i=imin до максимального i=imax с шагом +1;
  • Sum[f, {i, imin, imax, di}]— вычисляет сумму значений f при изменении управляющей переменной вещественного типа от минимального значения i=imin до максимального i=imax с шагом di;
  • Sum[f, {i, imin, imax}, {j, jmin, jmax},...] — вычисляет многократную сумму значений f при изменении индексов i от imin до imax с шагом +1, j от jmin до jmax с шагом +1 и т. д. (число индексов не ограничено).

Таким образом, эта функция обеспечивает расширенные возможности вычисления сумм — как при целочисленных, так и при вещественных значениях управляющих переменных, задающих циклы вычислений. Примеры использования функций суммирования:


Sum[i^2,{i,10}]

385

Sum[i*2,{i,l,10}]

385

Sum[i^2, {1,1,2,0.25}]

11.875

Sum[i*j, {i,1,10},{j, 2, 5}]

770

В последнем примере использована стандартная форма вывода — при ней функция суммирования представляется в виде оператора суммирования.

Обычно в математических системах недопустима перестановка imin и imax, хотя в математике известно школьное правило — от перестановки слагаемых сумма не изменяется. Рискнем проверить это:


Sum[i,{i, 1,100}]

5050

Sum[i, {1,100,1}]

0

Sum[i, {1,100, 1,-1}]

5050

Второй пример тут дал явно ошибочный результат, хотя третий с честью оправдал указанное правило.

Не применяйте установки параметров, противоречащие синтаксису записи той или иной функции — в частности, Sum. Это чревато возникновением серьезных ошибок.

Приведем еще ряд примеров выполнения операции суммирования:


Sum[ xn/n! , {n, 0, 8}]

1+X+X2/2 X3/6 X4/24 X5/120 X6/720 X7/5040 X8/40320

Sum[xn/n! , {n, 1, 9, 2}]

X+X3/3 X5/120 X7/5040 X9/362880


Sum[xi yi , {i, 1, 4},{j, 1, i}]

xy+ x2 у + x3 у + x4 у + x2:/2 + x3 у2 + x4y2 + x3 у3 + x4 у3 + x4y4

Sum[1/n*n , {n, 1, бесконечность}]

л2/6

Sum[i4 {i, 1, n}]

1/30n(1-n)(1+2n) (-l + 3n+3n2)

1/3(3 - 3 EulerGamma + 2 n + n3) - PolyGamma[0, 2 + n]

Из этих примеров видно, что Mathematica 3/4 обеспечивает возможность символьного вычисления сумм, в том числе с бесконечным пределом суммирования. Вычисляются даже суммы, выраженные через специальные математические функции (см. последний пример). При этом для вычисления сумм в символьном виде, в отличие от предшествующих версий Mathematica, уже не требуется загрузка специального пакета для расширенных (символьных) операций с суммами.

Вычисление сумм в численном виде

Для вычисления сумм в численном виде используются следующие функции:

  • NSum[f, {i, imin, imax }]— возвращает численное значение суммы f [ i ] при i, изменяющемся от imin до imax с шагом +1;
  • NSumff, {i, imin, imax, di }]— возвращает сумму численных значений функции f [i] при i, изменяющемся от imin до imax с шагом di;
  • NSum[f, {i, imin, imax}, {j, jmin, j max },...]— выполняет многомерное суммирование. Функция NSum[... ] эквивалентна выражению N[Sum[...] ].

Особенностью этой функции является возможность использования ряда опций, управляющих вычислительным процессом. Одной из них является NSumTerms, задающая число членов, которые явно должны быть включены в сумму перед экстраполяцией. Вы можете просмотреть список опций, используя команду Options [NSum] . 

Пример применения функции NSum представлен ниже:


NSum[1/i3, {i, 1, бесконечность}]

1.20206

Пример точного вычисления суммы (для сравнения) с помощью функции Sum:


truesum = Sum [1+k/ 2k k/ 3k{k, 1, 50}

1818632874295681087853745424762603034467 / 808281277464764060643139600456536293376

N[%]

2.25

Пример вычисления той же суммы с помощью функции NSum с опциями:


NSum [ 1+k/ 2 k -3k, {k, 1, 50}, Method -> SequenceLimit,

NSumTerms -> 2 , NSumExtraTerms -> 4 ] - truesum

0.0530365

При следующем наборе опций результат еще лучше:


NSum [ 1+k/ 2 k -3k, {k, 1, 50}, Method -> SequenceLimit, WorkingPrecision -> 30 , NSumTerms -> 2 ,

NSumExtraTerms -> 10, WynnDegree -> 4] - truesum

0.x10-26

Функция вычисления суммы NSum выполняется заметно быстрее, чем функция Sum, хотя на практике заметить это трудно — все приведенные выше примеры выполняются за доли секунды. Возвращаемый функцией NSum результат вещественный.