2013-02-11 2 views
1

У меня действительно нет кода для публикации с этим, так как я довольно зациклен на том, как его написать. Я должен дать список положительных int и значение x, чтобы воспроизвести следующий пример изображения.Вычисление полиномов

Уравнение у меня есть p(x) = a0 + a1x + a2x**2 + a3x**3 + ... + anx**n, поэтому идея у меня было проверяла длину списка и сделать это так, чтобы он автоматически определяется, сколько расчетов он должен был сделать, то просто заменить й с тем, что значение вне списка. К сожалению, я не знаю, как написать это или где начать действительно.

+0

Также я не уверен, почему он показывает только один * для a2x ** 2 и a3x ** 3, но он должен быть a2x^2 и a3x^3. – iKyriaki

+0

Вы пытаетесь реализовать функцию poly()? –

+0

Да. Для параметров у меня есть l для списка и n для int, но после этого я застрял. – iKyriaki

ответ

1
def poly(a_list, x): 
    ans = 0 
    for n,a in enumerate(a_list): 
     ans += a*x**n 
    return ans 

Функция возвращает перечисление кортеж, содержащий индекс и значение каждого элемента в списке. Таким образом, вы можете легко выполнять итерацию через список, используя «для индекса, значение в перечислении (списке)».

+0

Как «для n, a в перечислении (a_list):« работать? Это всего лишь более короткий способ написать два заявления? Просто чтобы убедиться, что я это понимаю, как могу. Благодарю вас, программа работает отлично. – iKyriaki

+0

См. Документы для [enumerate] (http://docs.python.org/2/library/functions.html#enumerate). –

+0

без перечисления вы делаете 'для n в диапазоне (len (a_list)): a = a_list [n]' –

1

Вот как можно реализовать poly:

def poly(l, x): 
    sum = 0 
    xp =1 
    for a in l: 
     sum += a *xp #add next term 
     xp = x* xp #xp is x^p 
    return sum 

print poly([1,2,1],2) 
print poly([1,0,1,0,1],3) 
0

Вы можете использовать itertools starmap

>>> from itertools import starmap 
>>> def poly(a_list, x): 
...  val = lambda p, a: a*x**p 
...  return sum(starmap(val, enumerate(a_list))) 
... 
>>> poly([1, 2, 1], 2) 
9 
>>> poly([1, 0, 1, 0, 1], 2) 
21 
+1

без 'starmap': return sum (map (lambda (n, a): a * x ** n, enumerate (a_list))) –

0

Еще лучше, если у вас есть NumPy:

>>> from numpy import polyval 
>>> polyval([1, 2, 1], 2) 
9 
>>> polyval([1, 0, 1, 0, 1], 2) 
21 

Я думаю, что вы должны обратить вспять a_list первым, хотя. (он работает, поскольку a_list является палиндромным)

Смежные вопросы