Le but de ce TP est de se familiariser avec :
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]
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
.
É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 :
*X^0
"
X
" au lieu de "X^1
"
0*X^n
"
- 2.3*X^n
" au lieu de "+ -2.3*X^n
"
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
La ligne
>>> n = int(input("message "))
permet d'initialiser une variable entière à partir de ce que l'utilisateur tape sur le clavier.
input
" est une fonction à un paramètre (de type chaine de caractères) qui donne un résultat de type chaine de caractères ;
int
" est une fonction à un paramètre de type chaine de caractères qui donne un résultat de type entier.
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 :
d
en utilisant
P = [0.0] * (d+1)
d+1
cases, chacune d'entre elle contenant le coefficient 0.0
.
i
avec la ligne
P[i] = 12.0
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
É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é.
É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,
É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.
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
É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 |