Consignes

Liens utiles

Objectifs du TP

Le but de ce TP est de se familiariser avec :

Rappels : les tableaux

Testez les lignes suivantes directement dans l'interprète Python, et vérifiez que vous comprenez bien chacune des lignes.

>>> t1 = [2, 4, 6, 8]  	# on déclare un tableau à 4 cases
>>> print(len(t1))	# on affiche sa taille (normalement, c'est 4)
4
>>> t2 = t1 + [8, 10]	# on concatène le tableau avec un nouveau tableau
>>> print(len(t2)) 	# normalement, on doit obtenir 6
6
>>> print(t2[0])	# on affiche la première case
2
>>> print(t2)		# on affiche tout le tableau t2
[2, 4, 6, 8, 8, 10]
>>> t2[4] = 12		# on modifie une case par une affectation
>>> print(t2)		# on affiche tout le tableau t2
[2, 4, 6, 8, 12, 10]
>>> print(t2 * 2)
[2, 4, 6, 8, 12, 10, 2, 4, 6, 8, 12, 10]

Les polynômes

On représentera un polynôme avec un tableau de flottants contenant ses coefficients. Le coefficient de degré i se trouvera dans la case d'indice i.

Par exemple, le polynôme 2.3 + 4.9 * X + 8.6 * X*X*X sera représenté par le tableau [2.3, 4.9, 0, 8.6]. Notez bien que la case d'indice 0 correspond au terme constant. Un polynôme de degré d aura donc une taille de d+1.

Affichage d'un polynôme

Écrivez une procédure d'affichage d'un polynôme. La définition de votre fonction commencera par

def affiche_poly(P):
    """procédure d'affichage d'un polynôme
paramètre : P de type tableau de flottants"""
    ...
    ...

Votre procédure devra pouvoir afficher des polynômes de degré arbitraire.

Facultatif : améliorez votre procédure d'affichage pour :

Pour tester : dans l'interprète, vous devriez observer quelque chose comme :

>>> P = [2.3, 4.9, 0, 8.6]
>>> affiche_poly(P)
2.3*X^0 + 4.9*X^1 + 0*X^2 + 8.6*X^3
>>> affiche_poly([0, 1, 2])
0*X^0 + 1*X^1 + 2*X^2

Initialisation interactive d'un polynôme

La ligne

>>> n = int(input("message "))

permet d'initialiser une variable entière à partir de ce que l'utilisateur tape sur le clavier.

Ce que tape l'utilisateur est donc transformé en chaine de caractères, puis en entier.

Nous allons maintenant écrire une fonction "input_poly" qui permet d'initialiser un polynôme à partir de ce que l'utilisateur tape au clavier.

Écrivez la fonction "input_poly" qui commence comme suit :

def input_poly(message):
    """initialise un polynôme en posant des questions à l'utilisateur
La fonction commence par demander le degré du polynôme, et demande ensuite
chacun des coefficients.

paramètre : message de type chaine de caractères, c'est le message affiché
avant de demander le degré du polynôme

résultat de type polynôme, c'est à dire tableau de flottants."""
    ...
    ...

Attention :

Pour tester :

>>> Q = input_poly("saisie du premier polynôme")
saisie du premier polynôme
degré du polynôme ? 2
coefficient du monôme de degré 0 ? 2.3
coefficient du monôme de degré 1 ? 4.9
coefficient du monôme de degré 2 ? 8.6
>>> affiche_poly(Q)
2.3*X^0 + 4.9*X^1 + 8.6*X^2

Le produit scalaire

Écrivez une fonction pour calculer le produit scalaire de deux polynômes. Votre définition commencera par

def produit_scalaire(P1, P2):
    """calcule le produit scalaire de deux polynômes

paramètres : P1 et P2, deux polynômes de même degré, c'est à dire deux tableaux
de flottants de même taille.

résultat : un polynôme de même degré que les paramètres P1 et P2"""
    ...
    ...

Testez votre fonction, avec la procédure suivante :

def test_produit_scalaire():
    P = input_poly("premier polynôme")
    Q = input_poly("second polynôme")
    R = produit_scalaire(P, Q)
    print("le produit scalaire des deux polynômes est")
    affiche_poly(R)

Vérifiez en particulier ce qui se passe lorsque les deux polynômes n'ont pas le même degré.

Addition de deux polynômes

Écrivez une fonction pour calculer la somme de deux polynômes.

Combien de paramètres cette fonction doit elle avoir ? Quels sont leurs types ? Quel est le type du résultat de cette fonction ?

Attention,

Dérivée d'un polynôme

Écrivez une fonction pour calculer la dérivée d'un polynôme.

Comme précédemment, vous devrez écrire une procédure de test pour tester votre fonction.

Évaluation d'un polynôme

Le problème est maintenant de savoir qu'elle est la valeur d'un polynôme sur un flottant particulier. Écrivez la fonction qui calcule cette valeur.

Combien de paramètres cette fonction doit elle avoir ? Quels sont leurs types ?

N'oubliez pas d'écrire une fonction de test qui demande un polynôme à l'utilisateur, puis qui lui demande quelques flottants sur lesquels évaluer le polynôme.

Par exemple, le polynôme 1 + 3X + X2 prend

Bonus

Écrivez (et testez) une fonction qui calcule la multiplication de deux polynômes.

Attention, c'est plus complexe pour l'addition, car le degré du résultat augmente. Par exemple, on a (- 2 + 4X -3X2) (1 - X + X3) = (-2 + 6X - 7X2 + 4X4 - 3X5)

Écrivez et testez une fonction qui calcule la composition de deux polynômes.

Exemple de composition :

(P . Q)(x) = P( Q(x) )
= - 2 + 4(Q(x)) - 3(Q(x))2
= - 2 + 4(- 1 + 4x) -3(- 1 + 4x)2
= - 2+ 4(- 1 + 4x)- 3(1- 8x +48x2)
= - 2 - 4+ 16x - 3+ 24x -48x2
= - 9 + 40x -48x2