Правило Хорнера и прямой метод в питоне - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь решить следующий вопрос.Я сделал коды для имплантации прямого метода и правила Хорнера, которые, я считаю, я сделал это правильно.Однако в прошлом у меня возникли некоторые проблемы с выяснением остального.Нужна помощь в этом, вся помощь очень ценится!

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 голосов
/ 01 октября 2018

Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...