2013-08-07 4 views
3

У меня есть проблемы с полиномами, и я потратил около 4 часов на это, но я просто не могу это получить. Я новичок в Python и программировании, и я пробовал работать на бумаге, но я просто не знаю.Как создать функции, которые обрабатывают многочлены?

  1. Написать и протестировать функцию negate(p) Python, что сводит на нет полинома, представленный список его coeffeicients p и возвращает новый многочлен (представленный в виде списка). Другими словами, напишите функцию, которая делает список чисел отрицательным.

  2. Написать функцию eval_polynomial(p, x) Python, который возвращает значение P(x), где P является многочленом представлен список его коэффициентов p. Например, eval_polynomial([1, 0, 3], 2) должен возвращать 1 * 2^2 + 0 * 2 + 3 = 7. Используйте одиночный цикл while.

  3. Написать и протестировать функцию, которая умножает multiply_by_one_term(p, a, k) заданный многочлен p, представленного списка коэффициентов, по ax^k и возвращает продукт в виде нового списка.

Я был бы очень признателен, если бы кто-то мог мне помочь.

+3

запустим оболочку Python и попробовать эти примеры здесь: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions – Anycorn

+0

Случай 2: возвращенное значение лучше сказать ' 1 * 2 ** 2 + 0 * 2 ** 1 + 3 * 2 ** 0' в python ... –

+0

Добавляя комментарий @ Anycorn, используйте ipython или ipython notebook. –

ответ

7

Я бы рекомендовал использовать numpy.poly1d и numpy.polymul, где коэффициенты a0*x2 + a1*x + a2.

Например, для представления 3*x**2 + 2*x + 1:

p1 = numpy.poly1d([3,2,1]) 

И в результате poly1d объекта можно управлять с помощью *, / и так далее ...:

print p1*p1 
# 4  3  2 
#9 x + 12 x + 10 x + 4 x + 1 

Если вы хотите построить ваши собственные функции, считая, что p содержит коэффициенты порядка: a0 + a1*x + a2*x**2 + ...:

def eval_polynomial(p,x): 
    return sum((a*x**i for i,a in enumerate(p))) 

def multiply_by_one_term(p, a, k): 
    return [0]*k + [a*i for i in p] 
+1

У меня пока не хватает репутации, но проголосуйте. Я действительно понял логику ваших решений. – confusedstudent

+0

@confusedstudent отлично, что вы поняли эту логику –

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