2013-08-07 1 views
3

J'ai ces problèmes concernant les polynômes et j'ai passé environ 4 heures sur ce sujet, mais je n'arrive pas à l'obtenir. Je suis nouveau sur Python et la programmation et j'ai essayé de le faire sur papier, mais je ne sais pas.Comment créer des fonctions gérant des polynômes?

  1. écrire et tester une fonction Python negate(p) qui nie le polynôme représenté par la liste de ses coeffeicients p et retourne un nouveau polynôme (représenté comme une liste). En d'autres termes, écrivez une fonction qui rend la liste des nombres négative.

  2. Ecrire une fonction Python eval_polynomial(p, x) qui retourne la valeur de P(x), où P est le polynôme représenté par la liste de ses coefficients p. Par exemple, eval_polynomial([1, 0, 3], 2) doit renvoyer 1 * 2^2 + 0 * 2 + 3 = 7. Utilisez une seule boucle while.

  3. écrire et tester une fonction qui multiplie multiply_by_one_term(p, a, k) un polynôme donné p, représenté par une liste de coefficients, par ax^k et renvoie le produit comme une nouvelle liste.

J'apprécierais vraiment si quelqu'un pouvait m'aider.

+3

shell Python feu et essayez ces exemples ici: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions – Anycorn

+0

Cas n ° 2: la valeur retournée est mieux dit ' 1 * 2 ** 2 + 0 * 2 ** 1 + 3 * 2 ** 0' en python ... –

+0

Ajout au commentaire @ Anycorn, utilisez ipython ou ipython notebook. –

Répondre

7

Je vous recommande d'utiliser numpy.poly1d et numpy.polymul, où les coefficients sont a0*x2 + a1*x + a2.

Par exemple, pour représenter 3*x**2 + 2*x + 1:

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

Et avec l'objet poly1d résultant vous pouvez fonctionner avec *, / et ainsi de suite ...:

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

Si vous voulez construire vos propres fonctions, en supposant que p contient les coefficients dans l'ordre: 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

Je n'ai pas encore assez de réputation, mais je voterais pour vous. J'ai réellement compris la logique derrière vos solutions. – confusedstudent

+0

@confusedstudent génial que vous ayez compris cette logique –

Questions connexes