我们知道1+2+...+n
等于n(n+1)/2
。
但是如果我们事先不知道它,我们可以以编程方式获得相同的结果吗?
关于我为什么会有这样的问题。
想想更复杂的情况:
X1 + X2 + ... + Xk = n,其中Xi是整数且> = 0。
对X1^2+...Xk^2
的期望是什么?
结果并不明显只是一目了然,一旦我们计算出X1^2+...Xk^2
期望的(详细)数学表示,我们就会想要将它提供给程序以减少代数。 p>
答案 0 :(得分:6)
也许您正在考虑Computer algebra system(CAS)? WolframAlpha是一个免费的在线版本,在它的后端使用Mathematica(一个非常强大的CAS系统)。在这里,您可以看到它计算/简化您的表达:WolframAlpha。
您的示例只是sum of squares,它有一个非常简单的显式公式:n(n+1)(2n+1)/6
。更一般地说,您可以使用Faulhaber's formula来计算Sum of n^p
。
答案 1 :(得分:4)
好的,首先是关于问题的数学部分的一些建议,然后是关于软件开发的一些建议。
Marko Petkov·sek,Herbert S. Wilf和Doron Zeilberger的an e-book "A=B"处理解决(或显示没有解决方案)求和问题甚至比多项式更难。 review of the book by Ian Wanless值得快速阅读。电子书可以免费下载,但可以购买绑定的副本,例如来自亚马逊。
2004 Trans。 Greene和Wilf撰写的AMS论文Closed Form Summation of C-finite Sequences也可在线获取。
一般情况下,您需要一些基本的CAS软件来实现这些算法,听起来我们的目标是自己开发这样的软件。我建议研究一些开源CAS(计算机代数软件)软件包,如Maxima或Axiom,以了解所涉及的范围。当然,一个目标狭窄的应用程序很可能只能用这些相当成熟和高端的软件包实现的一小部分,但鉴于目前的问题措辞,我觉得我不能指出你更直接的路径
如果表达的“期望”包含在你的项目范围内,那么除了单纯的代数操作之外,还会出现许多并发症。当然,需要能够指定概率密度函数来支持期望值,并且可能是某些集成软件(尽管可能限制参数化分布的选择可能导致查找这些分布的时刻的简化问题)。我认为这是一个特别好的应用程序,因为随机变量的看似简单的表达式(总和,最大/最小)可能导致对案件的噩梦考虑,非常适合计算机的耐心。
答案 2 :(得分:1)
编辑,由于您最近澄清了帖子。
除非您拥有一整套博士学位并且需要花费数年时间,否则您将无法获得手工制作的解决方案。我能给你的最好建议是购买Mathematica(或其他)许可证,并将其与你的程序联系起来。
如果您是Lisp程序员,使用Maxima是另一种潜在的(免费的)解决方案。
如果你想要总结算法的现状背景,this paper是一个好的开始。
X1 + X2 + ... + Xk = n,其中Xi是整数且> = 0。
对X1 ^ 2 + ...... Xk ^ 2的期望是什么?
这种问题占据了很多人,想知道如何在纸上做到这一点。
让我们取k = 2.然后X_1 + X_2 = n给出X_2 = n - X_1。
所以计算的期望是E = X_1^2 + (n - X_1)^2 = 2 X_1^2 -2n X_1 + n^2
。
这是
E = sum(p_k * (2 * k^2 - 2 * n * k + n^2), k = 0..infinity)
其中p_k = Prob(X_1 = k)
。取决于p_k
,这种总和通常很难计算。我要说这个问题比封闭形式的计算积分更困难(没有软件完全实现可用但不可判断的Risch算法)。
要说服自己,请采取例如。 p_k = 1 / (log(k) * k^4)
。
为它找到一个公式(或公式生成器)至少是一个非常困难的研究问题。