Python中的霍纳法则和直接方法

时间:2018-10-01 17:15:38

标签: python numerical-methods

我正在尝试解决以下问题。我已经编写了植入直接方法和霍纳法则的代码,我相信我已经正确地做到了。但是过去,我在解决其余问题时遇到了一些问题。寻找一些帮助,非常感谢所有帮助!

enter image description here

这是我为霍纳法则生成的代码,我相信我做得正确。

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

如何将这段代码放在一起并完成其余部分?

1 个答案:

答案 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