psi*_*lia 26 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
Run Code Online (Sandbox Code Playgroud)
那么,sum必须是math.pi/4而不在循环中进行任何计算(因为它是一个众所周知的总和).
Hig*_*ark 18
大多数懒惰评估的函数语言都可以模拟无限级数的处理.当然,在有限的计算机上,不可能处理无限系列,因为我相信你知道.在我的脑海中,我猜Mathematica可以完成您可能想要的大部分工作,我怀疑Maple也可以,也许是Sage和其他计算机代数系统,如果你找不到Haskell实现,我会感到惊讶适合你.
编辑澄清OP:我不建议生成无限循环.延迟评估允许您编写模拟无限系列的程序(或函数),这些程序本身在时间和空间上是有限的.使用这些语言,您可以确定模拟无限级数的许多属性,例如收敛,具有相当高的准确性和一定程度的确定性.试试Mathematica,或者,如果您无法访问它,请尝试Wolfram Alpha查看一个系统可以为您做什么.
Edw*_*ETT 13
除了简单地支持无限列表之外,Haskell中有两种工具可供使用.
首先,有一个模块支持在OEIS中查找序列.这可以应用于系列的前几个术语,可以帮助您识别您不知道封闭形式等的系列.另一个是可计算实数的"CReal"库.如果你有能力生成一个不断改进的价值界限(即通过对前缀进行求和,你可以将其声明为可计算的实数,允许部分排序等.在很多方面,这给你一个值,你可以使用像上面的总和.
然而,一般来说,计算两个流的相等性需要一个oracle来解决问题,所以没有语言可以完全通用地完成你想要的,尽管像Mathematica这样的计算机代数系统可以尝试.
for*_*ran 12
千里马可以计算一些无限和,但在这种特殊情况下它似乎没有找到答案:-s
(%i1) sum((-1)^k/(2*k), k, 1, inf), simpsum;
inf
==== k
\ (- 1)
> ------
/ k
====
k = 1
(%o1) ------------
2
Run Code Online (Sandbox Code Playgroud)
但是,例如,那些工作:
(%i2) sum(1/(k^2), k, 1, inf), simpsum;
2
%pi
(%o2) ----
6
(%i3) sum((1/2^k), k, 1, inf), simpsum;
(%o3) 1
Run Code Online (Sandbox Code Playgroud)
你可以在Sage(一个免费的基于Python的数学软件系统)中解决系列问题,具体如下:
sage: k = var('k'); sum((-1)^k/(2*k+1), k, 1, infinity)
1/4*pi - 1
Run Code Online (Sandbox Code Playgroud)
在幕后,这真的是使用Maxima(Sage的一个组件).