代码之家  ›  专栏  ›  技术社区  ›  psihodelia

哪种编程语言或库可以处理无限系列?

  •  26
  • psihodelia  · 技术社区  · 15 年前

    哪种编程语言或库能够处理无限系列(如几何或谐波)?它可能必须有一个已知序列的数据库,并在收敛时自动给出适当的值,在发散时可能生成一个异常。

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

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

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

    13 回复  |  直到 9 年前
        1
  •  4
  •   Piotr Czapla    15 年前

    你需要做一些符号计算,比如 Mathematica . 你也可以考虑询问 wolframaplha: sum((-1)^i*1/i, i, 1 , inf)

        2
  •  18
  •   High Performance Mark    15 年前

    大多数延迟计算的函数语言都可以模拟无限级数的处理。当然,在一台有限的计算机上,不可能处理无穷大的级数,我相信你已经知道了。我想是从我头上掉下来的 数学软件 我想你可以做你想做的大部分事情 枫树 也可以,也许 鼠尾草 还有其他的计算机代数系统,如果你找不到适合你的haskell实现,我会很惊讶的。

    编辑以澄清OP:我不建议生成无限循环。Lazy Evaluation允许您编写模拟无限序列的程序(或函数),这些程序本身在时间和空间上是有限的。使用这种语言,您可以确定模拟无限级数的许多特性,例如收敛性,并具有相当的准确性和一定程度的确定性。尝试 数学软件 或者,如果您没有访问权限,请尝试 Wolfram Alpha 看看一个系统能为你做些什么。

        3
  •  15
  •   John    15 年前

    其中一个地方可能是维基百科 Computer Algebra Systems .

        4
  •  13
  •   Edward Kmett    15 年前

    haskell中有两种工具可用于此目的,而不仅仅是支持无限列表。

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

    然而,一般来说,计算两个流的相等性需要一个解决停顿问题的Oracle,因此没有任何语言可以完全通用地执行您想要的操作,尽管一些计算机代数系统(如Mathematica)可以尝试。

        5
  •  12
  •   fortran    15 年前

    Maxima可以计算出一些无穷的和,但在这种情况下,它似乎找不到答案:

    (%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
  •  8
  •   William Stein    14 年前

    你可以用 Sage (基于python的免费数学软件系统)具体如下:

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

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

        7
  •  7
  •   rlotun    15 年前

    对于python,请查看 SymPy -Mathematica和Matlab的克隆。

    还有一个更重的基于python的数学处理工具叫做 Sage .

        8
  •  3
  •   mpd    15 年前

    有一个名为mpmath(python)的库,是sympy的一个模块,它为sympy提供了系列支持(我相信它也支持sage)。
    更具体地说,所有系列资料都可以在这里找到: Series documentation

        9
  •  3
  •   sigfpe    15 年前

    C++ IRAM库实现实运算 确切地 . 此外,它还可以使用极限函数精确计算极限。IRRAM的主页是 here . 查看文档中的限制功能。注意,我不是在谈论任意精度的算术。这是 准确的 算术,对精确的合理定义。下面是他们精确计算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
  •  2
  •   dsm    15 年前

    Clojure Haskell 从我的头顶上。

    抱歉,我找不到哈斯克尔序列的更好链接,如果有人有,请告诉我,我会更新。

        11
  •  1
  •   Imrul    15 年前

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

    但我认为有可能。 你可以试试看:)

        12
  •  1
  •   kjetil b halvorsen    13 年前

    这可以在sympy和sage(在开放源代码备选方案中)中完成,下面是使用sympy的几个示例:

    在[10]中:求和(1/k**2,(k,1,oo) 输出[10]: 二 γ __ 六

    在[11]中:求和(1/k**4,(k,1,oo) 输出[11]: 四 γ __ 九十

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

    在[13]中:求和((-1)**(k+1)/k,(k,1,oo) 输出[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$中的有理函数,则为超几何!sympy基本上可以处理所有满足最后一个条件的无穷和,但只有很少的其他条件。

        13
  •  1
  •   Stefan Gruenwald    9 年前

    只需在计算机上安装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