python 中的霍纳法则和直接法

Horner's rule and direct method in python

我正在尝试解决以下问题。我已经编写了用于植入直接方法和霍纳规则的代码,我相信我已经正确地做到了这一点。然而,过去我在弄清楚其余部分时遇到了一些问题。寻求一些帮助,非常感谢所有帮助!

这是我为霍纳规则生成的代码,我相信我做对了。

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

如何将这段代码拼凑起来完成剩下的?

按照论文中的建议使用 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

numpypolyval比较:

>>> import numpy as np
>>> np.polyval([5,4,3,2,1], 2)
129