挑战在于编写能够执行计算上困难的无限和的快速代码。
输入项
一个n
由n
基质P
与是小于整数项,100
在绝对值。测试时,我很乐意以您想要的任何合理格式为您的代码提供输入。默认值是矩阵的每一行一行,间隔并在标准输入上提供。
P
将是正定的,这意味着它将始终是对称的。除此之外,您实际上并不需要知道肯定肯定意味着什么来应对挑战。但是,这确实意味着以下定义的总和将得到答案。
但是,您确实需要知道什么是矩阵向量乘积。
输出量
您的代码应计算无穷和:
在正确答案的正负0.0001之间。这Z
是整数的集合,Z^n
所有具有n
整数元素的可能向量也是这样,并且e
是著名的数学常数,大约等于2.71828。请注意,指数中的值只是一个数字。请参阅以下示例。
这与黎曼Theta函数有什么关系?
在本文中,我们试图计算Riemann Theta函数的近似值。我们的问题是特殊情况,至少有两个原因。
- 我们将
z
链接文件中调用的初始参数设置为0。 - 我们
P
以使特征值的最小大小为的方式创建矩阵1
。(有关如何创建矩阵,请参见下文。)
例子
P = [[ 5., 2., 0., 0.],
[ 2., 5., 2., -2.],
[ 0., 2., 5., 0.],
[ 0., -2., 0., 5.]]
Output: 1.07551411208
更详细地讲,让我们只看到此P的总和中的一项。例如,总和中只有一项:
和 x^T P x = 30
。请注意,这e^(-30)
大约10^(-14)
是正确的,因此对于达到给定公差的正确答案不太重要。回想一下,无限和实际上将使用长度为4的每个可能的矢量,其中元素是整数。我只是选择了一个例子。
P = [[ 5., 2., 2., 2.],
[ 2., 5., 4., 4.],
[ 2., 4., 5., 4.],
[ 2., 4., 4., 5.]]
Output = 1.91841190706
P = [[ 6., -3., 3., -3., 3.],
[-3., 6., -5., 5., -5.],
[ 3., -5., 6., -5., 5.],
[-3., 5., -5., 6., -5.],
[ 3., -5., 5., -5., 6.]]
Output = 2.87091065342
P = [[6., -1., -3., 1., 3., -1., -3., 1., 3.],
[-1., 6., -1., -5., 1., 5., -1., -5., 1.],
[-3., -1., 6., 1., -5., -1., 5., 1., -5.],
[1., -5., 1., 6., -1., -5., 1., 5., -1.],
[3., 1., -5., -1., 6., 1., -5., -1., 5.],
[-1., 5., -1., -5., 1., 6., -1., -5., 1.],
[-3., -1., 5., 1., -5., -1., 6., 1., -5.],
[1., -5., 1., 5., -1., -5., 1., 6., -1.],
[3., 1., -5., -1., 5., 1., -5., -1., 6.]]
Output: 8.1443647932
P = [[ 7., 2., 0., 0., 6., 2., 0., 0., 6.],
[ 2., 7., 0., 0., 2., 6., 0., 0., 2.],
[ 0., 0., 7., -2., 0., 0., 6., -2., 0.],
[ 0., 0., -2., 7., 0., 0., -2., 6., 0.],
[ 6., 2., 0., 0., 7., 2., 0., 0., 6.],
[ 2., 6., 0., 0., 2., 7., 0., 0., 2.],
[ 0., 0., 6., -2., 0., 0., 7., -2., 0.],
[ 0., 0., -2., 6., 0., 0., -2., 7., 0.],
[ 6., 2., 0., 0., 6., 2., 0., 0., 7.]]
Output = 3.80639191181
得分
我将在大小逐渐增加的随机选择矩阵P上测试您的代码。
当您n
随机选择5次以上矩阵P
进行5次运行时,您的分数仅是我在不到30秒内能得到正确答案的最大分数。
领带呢?
如果平局,则获胜者将是平均运行速度超过5次的代码运行速度最快的人。如果这些时间也相等,则获胜者是第一个答案。
如何创建随机输入?
- 令M为m <= n且条目为-1或1的m×n随机矩阵。在Python / numpy中
M = np.random.choice([0,1], size = (m,n))*2-1
。在实践中,我将设置m
为约n/2
。 - 令P为单位矩阵+ M ^ TM。在Python / numpy中
P =np.identity(n)+np.dot(M.T,M)
。现在,我们保证该值P
是正定的,并且条目在适当的范围内。
请注意,这意味着P的所有特征值均至少为1,这使该问题可能比逼近Riemann Theta函数的一般问题容易。
语言和图书馆
您可以使用任何喜欢的语言或库。但是,出于计分的目的,我将在计算机上运行您的代码,因此请提供有关如何在Ubuntu上运行代码的明确说明。
我的机器时间将在我的机器上运行。这是在8GB AMD FX-8350八核处理器上的标准Ubuntu安装。这也意味着我需要能够运行您的代码。
领先的答案
n = 47
Ton Hospel 在C ++中编写n = 8
在Maltysen撰写的Python中
x
的[-1,0,2,1]
。您能详细说明一下吗?(提示:我不是数学专家)