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
与numpy
的polyval
比较:
>>> import numpy as np
>>> np.polyval([5,4,3,2,1], 2)
129
我正在尝试解决以下问题。我已经编写了用于植入直接方法和霍纳规则的代码,我相信我已经正确地做到了这一点。然而,过去我在弄清楚其余部分时遇到了一些问题。寻求一些帮助,非常感谢所有帮助!
这是我为霍纳规则生成的代码,我相信我做对了。
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
与numpy
的polyval
比较:
>>> import numpy as np
>>> np.polyval([5,4,3,2,1], 2)
129