1992 年左右引入了数学的一部分,称为多重 zeta 值 (MZV) 理论。在该理论中,我们研究参数嵌套无限级数的性质(例如,参见here了解一个特定变体的定义)因此,其数值评估具有很高的计算复杂度。几天前,我开始使用Python来计算特定MZV的基本部分和。
下面的代码允许我通过更改输入来计算所谓的多个 zeta 星值 zeta*(10,2,1,1,1) 或任何其他类似实例的第 20 个部分和
S
, n
.
S = (10, 2, 1, 1, 1)
n = 20
l = len(S)
def F(d, N):
if d == 0:
return 1
else:
return sum(F(d-1, k)/(k**S[-d]) for k in range(1, N+1))
print(F(l, n))
当然,d 维 MZV 的部分和本质上取决于它们形成 d 元组 (s_1, ..., s_d) 的参数以及求和上限
n
。
我的问题是我们是否可以定义一个以用户友好的方式键入的函数
F([s_1, ..., s_d], n)
,第一个参数是带有整数条目的列表,第二个参数是求和界限n。因此,我不是分别输入两个输入 S
和 n
,而是寻找一种方法来直接输入 F([10, 2, 1, 1, 1], 20)
或 F([2, 1], 100)
等,并使用两个参数的给定分隔符。
看起来您正在寻找一个函数包装器,它接受您真正想要的参数,并且将函数
F
作为内部的本地函数,并调用它:
def zeta(S, n): # wrapper around F
def F(d, n):
if d == 0:
return 1
return sum(F(d-1, k)/(k**S[-d]) for k in range(1, n+1))
return F(len(S), n) # Call F and return what it returns
# Example call
result = zeta((10, 2, 1, 1, 1), 20)
print(result)