我正在尝试实现“F. 卷积法”(第2.2节):
但是我只得到了零,而正确的结果应该是:
来自Taylor移位和某些差分方程的快速算法(在底部,或这里):
from math import factorial
def convolve(f, h):
g = [0] * (len(f) + len(h) - 1)
for hindex, hval in enumerate(h):
for findex, fval in enumerate(f):
g[hindex + findex] += fval * hval
return g
def shift(f, a):
n = len(f) - 1
u = [factorial(i)*c for i, c in enumerate(f)]
v = [factorial(n)*a**i//factorial(n-i) for i in range(n + 1)]
g = convolve(u, v)
g = [c//(factorial(n)*factorial(i)) for i, c in enumerate(g)]
return g
f = [1, 2, 3, -4, 5, 6, -7, 8, 9]
print(shift(f, 1))
但是我只得到了零,而正确的结果应该是:
[1, 10, 45, 112, 170, 172, 116, 52, 23]
请问,有人知道我在这里做错了什么吗?
convolve(u,v)
返回什么。 - kabanus{0: 23, 1: 132, 2: 396, 3: 720, 4: 840, 5: 636, 6: 301, 7: 80, 8: 9}
。 - jedwardsdefaultdict
以便我能理解所有的索引操作)。由于kabanus的答案很好地解释了原始代码中的问题,所以我的代码基本上就是你要求的代码。 - jedwards