Python 哪种编程语言或库可以处理无穷级数?

Python 哪种编程语言或库可以处理无穷级数?,python,math,programming-languages,functional-programming,series,Python,Math,Programming Languages,Functional Programming,Series,哪种编程语言或库能够处理无穷级数(如几何级数或调和级数)?它可能必须有一个关于某个已知序列的数据库,在收敛时自动给出适当的值,在发散时可能生成异常 例如,在Python中,它可能看起来像: sum = 0 sign = -1.0 for i in range(1,Infinity,2): sign = -sign sum += sign / i 然后,sum必须是math.pi/4,而不在循环中进行任何计算(因为它是一个众所周知的sum)。大多数惰性计算的函数式语言都可以

哪种编程语言或库能够处理无穷级数(如几何级数或调和级数)?它可能必须有一个关于某个已知序列的数据库,在收敛时自动给出适当的值,在发散时可能生成异常

例如,在Python中,它可能看起来像:

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

然后,sum必须是math.pi/4,而不在循环中进行任何计算(因为它是一个众所周知的sum)。

大多数惰性计算的函数式语言都可以模拟无穷级数的处理。当然,在有限的计算机上,不可能处理无穷级数,我相信你们都知道。在我脑海中,我猜Mathematica可以做你可能想做的大部分事情,我怀疑Maple也可以,也许Sage和其他计算机代数系统,如果你找不到适合你的Haskell实现,我会感到惊讶


编辑以澄清OP:我不建议生成无限循环。惰性计算允许您编写模拟无限系列的程序(或函数),这些程序本身在时间和空间上都是有限的。使用这些语言,您可以以相当高的精度和一定程度的确定性来确定模拟无穷级数的许多属性,例如收敛性。试试Mathematica,或者,如果你没有访问权限,试试看一个系统能为你做些什么。

为了研究的目的,我在几个大型数据系列中工作过。 我用了。我不知道它能/不能处理无穷级数

但我认为有一种可能性。
你可以试试:)

一个可以查看的地方可能是Wikipedia的类别。

关于Python的检查-Mathematica和Matlab的克隆

还有一个更重的基于Python的数学处理工具,名为。

,在我的脑子里


抱歉,我找不到更好的haskell序列链接,如果其他人有,请告诉我,我会更新。

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

在Haskell中,除了支持无限列表之外,还有两种工具可用于此目的

首先,有一个模块支持在OEIS中查找序列。这可以应用于系列的前几个术语,并可以帮助您识别不知道封闭形式的系列,等等。另一个是可计算实数的“CReal”库。如果您有能力对您的值生成一个不断改进的界(即,通过对前缀求和,您可以将其声明为允许偏序等的可计算实数)。这在许多方面为您提供了一个值,您可以像上面的和一样使用该值


然而,在一般情况下,计算两条流的相等性需要一个oracle来解决停止问题,因此没有任何语言可以完全通用地做你想要做的事情,尽管像Mathematica这样的计算机代数系统可以尝试。

你需要一些可以做符号计算的东西,比如。
你也可以考虑Que/

< P>有一个名为MPMyPyt(Python)的库,它是Syry的一个模块,它为Syry提供了系列支持(我相信它也支持SaGE)。


更具体地说,这里的所有系列内容都可以找到:

< P> C++的IrRAM库,它可以精确地执行实际的算术运算。除此之外,它可以使用极限函数精确地计算极限。IRAM的主页是:检查文档中的极限函数。注意,我不是在讨论任意精度的算术。是精确的算术,用于精确的合理定义。以下是他们计算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);
};

您可以在(一个免费的基于Python的数学软件系统)中精确地解决该系列问题,如下所示:

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

在幕后,这实际上是在使用Maxima(Sage的一个组件)。

这可以在Symphy和Sage(在开源替代方案中)中实现,下面是使用Symphy的几个示例:

[10]中:求和(1/k**2,(k,1,oo)) 出[10]: 2. π ── 六,

[11]中:求和(1/k**4,(k,1,oo)) 出[11]: 4. π ── 九十

[12]中:求和(-1)**k/k,(k,1,oo)) 输出[12]:-log(2)

[13]中:求和(-1)**(k+1)/k,(k,1,oo)) Out[13]:日志(2)

在幕后,这是使用超几何级数的理论,一个很好的介绍是Marko Petkovˇeks,Herbert S.Wilf的《a=B》一书 还有Doron Zeilberger,你可以通过谷歌搜索找到。什么是超几何级数


每个人都知道几何级数是什么:$X_1,X_2,X_3,\dots,X_k,\dots$是几何级数,如果上下文项比率为$X{k+1}/x_k$是常数。如果连续项比率是$k$中的有理函数,则为超几何函数!Symphy基本上可以处理满足最后一个条件的所有无限和,但只能处理极少数其他条件。

只需在计算机上安装Symphy。然后执行以下代码:

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

但我对生成无限循环不感兴趣,我需要的是基于已经学习过的和的知识的答案。然后你需要计算机代数系统,而不是编程语言。Mathematica是我最喜欢的日常工具之一,如果你想漂亮地打印t,它或类似的代数系统确实是必需的如果你只想保证正确处理极限,那么像SML/Haskell/OCaml这样的惰性函数语言提供了构建极限计算器所需的框架,它可以根据需要动态生成尽可能多的答案数字,从而保证算术运算和比较具有c正确的行为。这个例子真的有效吗?@CiscolPPhone:是的,如果你用一个足够大的正整数替换无穷大,它是有效的。但是你只能得到一个近似的和。这个例子可以写成:
sum(-1)**k/(2*k+1)代表k in