我正在尝试解决以下问题。我已经编写了植入直接方法和霍纳法则的代码,我相信我已经正确地做到了。但是过去,我在解决其余问题时遇到了一些问题。寻找一些帮助,非常感谢所有帮助!
这是我为霍纳法则生成的代码,我相信我做得正确。
def poly_horner(A, x):
p = A[-1]
i = len(A) - 2
while i >= 0:
p = p * x + A[i]
i -= 1
return p
这是我为直接方法生成的代码:
def poly_naive(A, x):
p = 0
for i, a in enumerate(A):
p += (x ** i) * a
return p
如何将这段代码放在一起并完成其余部分?
答案 0 :(得分:1)
按照论文中的建议使用global
,
flops = 0
def add(x1, x2):
global flops
flops += 1
return x1 + x2
def multiply(x1, x2):
global flops
flops += 1
return x1 * x2
def poly_horner(A, x):
global flops
flops = 0
p = A[-1]
i = len(A) - 2
while i >= 0:
p = add(multiply(p, x), A[i])
i -= 1
return p
def poly_naive(A, x):
global flops
flops = 0
p = 0
for i, a in enumerate(A):
xp = a
for _ in range(i):
xp = multiply(xp, x)
p = add(p, xp)
return p
要运行上面的代码,例如:
>>> poly_horner([1,2,3,4,5], 2)
129
>>> print(flops)
8
与numpy
的{{1}}进行比较:
polyval