哪种编程语言或库可以处理无限级数?
-
23-09-2019 - |
题
哪种编程语言或库能够处理无限级数(例如几何级数或调和级数)?它可能必须有一些众所周知的系列的数据库,并在收敛的情况下自动给出适当的值,并且可能在发散的情况下生成异常。
例如,在 Python 中,它可能如下所示:
sum = 0
sign = -1.0
for i in range(1,Infinity,2):
sign = -sign
sum += sign / i
那么,sum 必须是 math.pi/4,而不在循环中进行任何计算(因为它是众所周知的和)。
解决方案
您需要的东西,可以做一个符号计算如数学。 你也可以考虑quering的 wolframaplha:SUM(( - 1)^ I * 1 / I,I,1,INF)
其他提示
其中懒惰地评估大多数功能的语言可以模拟的无穷级数的处理。当然,有限的计算机上无法处理无穷级数,因为我相信大家都知道。关闭我的头顶,我猜的数学的可以做你最可能想要的东西,我怀疑的枫的也可以,也许的贤者的和其他计算机代数系统,如果你不能找到一个Haskell实现,西装我会惊讶你。
EDIT澄清OP:我不打算产生无限循环。懒惰的评价让你写的程序(或功能),它模拟无穷级数,程序,它本身在有限的时间和空间。有了这样的语言,你可以决定许多特性,如收敛具有相当的准确性和一定程度的确定性模拟的无穷级数的。尝试的数学的,或者,如果你没有访问它,尝试 Wolfram Alpha的看什么一个系统能为你做什么。
在同一个地方看可能是计算机代数系统。
有两种可用的工具在Haskell这个超越了简单的支持无限列表。
首先出现的是一个模块,它支持查找在OEIS序列。这可以应用到你的系列的第一几个术语,可以帮助你找出了一系列你不知道的封闭形式,等等。另一种是可计算实数的“CReal”库。如果你有产生对你的价值不断提高的约束的能力(即通过求和前缀,你可以声明作为录取偏序等。在许多方面是一个可计算的实数,这给你一个值,你可以使用像上述的总和。
然而,在通用计算两个数据流的平等需要停机问题的神谕,所以没有语言会做你想做的事,完全的通用性,虽然喜欢数学的一些计算机代数系统可以试试。
千里马可以计算出无穷的一些资金,但在这种特定情况下它似乎并没有找到答案:-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
您可以解决贤者系列问题(一个免费的基于Python的数学软件系统)正好如下:
sage: k = var('k'); sum((-1)^k/(2*k+1), k, 1, infinity)
1/4*pi - 1
在幕后,这是真的使用最大值(SAGE的组件)。
有一个图书馆称为mpmath(蟒),sympy的模块,它提供了sympy系列载体(我相信它也备份鼠尾草)。 点击 更具体地讲,所有的东西系列可以在这里找到:系列文档
在C ++库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);
};
我在几个巨大的数据系列的工作了研究的目的。 我用的 Matlab的 作为这一点。我不知道它可以/不可以处理无限系列。
但我认为有可能。 U可以尝试:)
这可以在例如sympy和鼠尾草完成(开源替代中)在下文中,使用sympy几个例子:
在[10]:求和(1 / K ** 2,(K,1,∞)) 出[10]: 2 π ── 6
在[11]:求和(1 / K ** 4,(K,1,∞)) 出[11]: 4 π ── 90
在[12]:求和((-1)** K / K,(K,1,∞)) 出[12]:-log(2)
在[13]:求和((-1)**(K + 1)/ K,(K,1,∞)) 出[13]:日志(2)
在幕后,这是利用理论超几何级数,一个很好的介绍被书“A = B”由马尔科Petkoveks,赫伯特S.维尔夫 和多龙·泽尔贝格您可以通过google搜索找到。 ¿什么是超几何级数?
大家都知道的几何级数是什么:$ X_1,X_2,X_3,\点,X_K,\点$是几何如果contecutive术语比$ X_ {K + 1} / X_K $是恒定的。它是超几何,如果连任比在$ķ$理性的功能! sympy可以处理基本上都是无限的资金,其中最后这个条件被满足,但其他人只是极少数。
把你的电脑上安装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()
结果将是:π/ 4