Подтвердить что ты не робот

Какой язык программирования или библиотека могут обрабатывать Infinite Series?

Какой язык программирования или библиотека способны обрабатывать бесконечные ряды (например, геометрические или гармонические)? Возможно, он должен иметь базу данных некоторых известных серий и автоматически давать правильные значения в случае конвергенции и, возможно, генерировать исключение в случае расхождения.

Например, в Python это может выглядеть так:

sum  = 0
sign = -1.0
for i in range(1,Infinity,2):
     sign = -sign
     sum += sign / i

тогда сумма должна быть math.pi/4 без каких-либо вычислений в цикле (потому что это хорошо известная сумма).

4b9b3361

Ответ 2

Большинство функциональных языков, которые оценивают лениво, могут имитировать обработку бесконечных рядов. Конечно, на конечном компьютере невозможно обработать бесконечные ряды, так как я уверен, что вы знаете. С моей точки зрения, Mathematica может сделать большую часть того, что вам может понадобиться, я подозреваю, что Maple тоже может быть, может быть, Sage и другие системы компьютерной алгебры, и я был бы удивлен, если вы не сможете найти реализацию Haskell, подходит вам.

EDIT уточнить для OP: я не предлагаю создавать бесконечные циклы. Ленивая оценка позволяет писать программы (или функции), которые имитируют бесконечные серии, программы, которые сами по себе ограничены во времени и пространстве. С такими языками вы можете определить многие свойства, такие как сходимость, моделируемых бесконечных рядов со значительной точностью и некоторой степенью определенности. Попробуйте Mathematica или, если у вас нет доступа к нему, попробуйте Wolfram Alpha, чтобы увидеть, что может сделать для вас одна система.

Ответ 4

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

Сначала есть модуль, который поддерживает поисковые последовательности в OEIS. Это может быть применено к первым нескольким терминам вашей серии и может помочь вам определить серию, для которой вы не знаете закрытую форму и т.д. Другая - библиотека CReal вычислимых реалов. Если у вас есть возможность генерировать постоянно улучшающуюся привязку к вашему значению (то есть путем суммирования по префиксу, вы можете объявить это как вычислимое реальное число, которое допускает частичный порядок заказа и т.д. Во многих отношениях это дает вам значение, которое вы можете используйте сумму, указанную выше.

Однако при общем вычислении равенство двух потоков требует оракула для проблемы остановки, поэтому ни один язык не будет делать то, что вы хотите, в полной общности, хотя некоторые системы компьютерной алгебры, такие как Mathematica, могут попробовать.

Ответ 5

Maxima может вычислять некоторые бесконечные суммы, но в этом конкретном случае он, похоже, не находит ответа: -s

(%i1) sum((-1)^k/(2*k), k, 1, inf), simpsum;
                                 inf
                                 ====       k
                                 \     (- 1)
                                  >    ------
                                 /       k
                                 ====
                                 k = 1
(%o1)                            ------------
                                      2

но, например, эти работы:

(%i2) sum(1/(k^2), k, 1, inf), simpsum;
                                        2
                                     %pi
(%o2)                                ----
                                      6

(%i3) sum((1/2^k), k, 1, inf), simpsum;
(%o3)                                  1

Ответ 6

Вы можете решить проблему серии в Sage (бесплатную программную систему на основе Python) в точности следующим образом:

sage: k = var('k'); sum((-1)^k/(2*k+1), k, 1, infinity)
1/4*pi - 1

За кулисами это действительно использует Maxima (компонент Sage).

Ответ 7

Для Python проверьте SymPy - клон Mathematica и Matlab.

Существует также более тяжелый инструмент для обработки математики на основе Python под названием Sage.

Ответ 8

Существует библиотека под названием mpmath (python), модуль sympy, который обеспечивает поддержку ряда для sympy (я считаю, что это также поддерживает шалфей).

Более конкретно, все материалы серии можно найти здесь: Документация по сериям

Ответ 9

Библиотека С++ iRRAM точно выполняет настоящую арифметику. Помимо прочего, он может точно вычислить предельные значения с использованием предельной функции. Домашняя страница для iRRAM здесь. Проверьте личную функцию в документации. Обратите внимание, что я не говорю о арифметике произвольной точности. Это точная арифметика, для разумного определения точного. Здесь их код, чтобы точно вычислить e, вытащил из примера на своем веб-сайте:

//---------------------------------------------------------------------
// Compute an approximation to e=2.71.. up to an error of 2^p
 REAL e_approx (int p)
{
  if ( p >= 2 ) return 0;

  REAL y=1,z=2;
  int i=2;
  while ( !bound(y,p-1) ) {
    y=y/i;
    z=z+y;
    i+=1;
  }
  return z;
};

//---------------------------------------------------------------------
// Compute the exact value of  e=2.71.. 
REAL e()
{
  return limit(e_approx);
};

Ответ 10

Clojure и Haskell от верхней части головы.

Извините, я не смог найти лучшую ссылку на последовательности haskell, если у кого-то еще есть это, сообщите мне, и я обновлю.

Ответ 11

Я работал в нескольких сериях Huge Data Series для исследований. Для этого я использовал Matlab. Я не знал, что он может/не может обрабатывать бесконечную серию.

Но я думаю, что есть возможность. U может попробовать:)

Ответ 12

Это можно сделать, например, для sympy и sage (среди альтернатив с открытым исходным кодом). В следующем примере несколько примеров с использованием sympy:

В [10]: суммирование (1/k ** 2, (k, 1, oo)) Из [10]:  2 π ── 6

В [11]: суммирование (1/k ** 4, (k, 1, oo)) Из [11]:  4 π ── 90

В [12]: суммирование ((-1) ** k/k, (k, 1, oo)) Out [12]: -log (2)

В [13]: суммирование ((-1) ** (k + 1)/k, (k, 1, oo)) Out [13]: log (2)

За кулисами это использует теорию для гипергеометрических рядов, красивое введение - книга "A = B" Марко Петковека, Герберта С. Уилфа и Дорона Цайльбергера, который вы можете найти по поиску. ¿Что такое гипергеометрический ряд?

Все знают, что такое геометрический ряд: $X_1, x_2, x_3,\dots, x_k,\dots $является геометрическим, если отношение последовательных членов $x_ {k + 1}/x_k $постоянное. Он гипергеометричен, если отношение последовательных членов является рациональной функцией в $k $! sympy может обрабатывать в основном все бесконечные суммы, в которых выполняется это последнее условие, но только очень мало других.

Ответ 13

Просто установите sympy на свой компьютер. Затем выполните следующий код:

from sympy.abc import i, k, m, n, x
from sympy import Sum, factorial, oo, IndexedBase, Function
Sum((-1)**k/(2*k+1), (k, 0, oo)).doit()

Результат будет: pi/4