Polynôme

Retrouver tous les sujets résolus.
Invité

Re: Polynôme

Message par Invité » lun. 14 déc. 2020 13:23

OK merci je vais remanier tout ça.

Et on a eu la suite de l'exo : https://www.cjoint.com/data/JLomvB1x3y4 ... emaths.png
Pour la question 5, je ne vois pas encore pas comment faire, puisqu'on n'a pas de fonction donnée mais uniquement un tableau !

Alors avez-vous une idée pour répondre à cette question 5 ?

Merci bien !
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: Polynôme

Message par sos-math(21) » lun. 14 déc. 2020 13:28

Bonjour,
tes points correspondent au support dans l'interpolation de Lagrange : les valeurs de positions vont dans "liste_x" et les valeurs de hauteur vont dans "liste_y".
C'est une application directe de ce qui a déjà été fait et tu peux reprendre les fonctions Python déjà définies.
Invité

Re: Polynôme

Message par Invité » lun. 14 déc. 2020 13:38

Je ne suis pas sûre de comprendre...

Il faut donc entrer toutes les valeurs du tableau à la main ?
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: Polynôme

Message par sos-math(21) » lun. 14 déc. 2020 13:41

Tu es bien obligée de saisir les valeurs du tableau dans des listes : liste_x et liste_y.
Cela ne fait jamais que 14 valeurs pour le premier cas : liste_x=[0,500,600,1000,1250,1750,2000] et même chose pour liste_y.
Bonne continuation
Invité

Re: Polynôme

Message par Invité » mar. 22 déc. 2020 11:22

Bonjour,

finalement le professeur a laissé les vacances pour terminer ce travail.

J'en suis donc toujours à la question 5 : pour cette question je voudrais faire :

Code : Tout sélectionner

# liste de la nouvelle subdivision avec les abscisses de Tchebychev
liste_x = [0,500,600,1000,1250,1750,2000]
# liste des écarts entre le polynôme et la fonction interpolée, avec la nouvelle subdivision
ecart = numpy.array([abs(Interpolation_Lagrange(abscisses[i],liste_x,f(liste_x))-f(abscisses[i])) for i in range(len(abscisses))])
# tracé
plt.plot(abscisses,ecart,color='red')
plt.show()
Pourquoi est-ce faux ? Quelle est la réponse exacte ?
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: Polynôme

Message par sos-math(21) » mar. 22 déc. 2020 13:23

Bonjour,
peux-tu préciser pourquoi tu penses que c'est faux ?
Ta liste_x devrait contenir les abscisses de tchebychev : je ne suis pas sur que les nombres que tu cites correspondent bien aux abscisses de tchebychev.
Par exemple pour un intervalle \([0\,;\,2000]\) et un polynôme de degré 10, on a :

Code : Tout sélectionner

>>> debut = 0;fin = 2000 ; degre = 10
>>>liste_x = numpy.array([(debut+fin)/2 + ((fin-debut)/2)*math.cos((2*k-1)*(numpy.pi)/degre+1) for k in range(1, degre+2)])
>>> liste_x
array([1.25382919e+03, 6.36817400e+02, 1.58529015e+02, 1.65394585e+00,
       2.26113137e+02, 7.46170806e+02, 1.36318260e+03, 1.84147098e+03,
       1.99834605e+03, 1.77388686e+03, 1.25382919e+03])
Soit en triant par ordre croissant :

Code : Tout sélectionner

[1.65394585, 158.529015, 226.113137, 636.8174, 746.170806, 1253.82919, 1253.82919, 1363.1826, 1773.88686, 1841.47098, 1998.34605]
Bonne continuation
Invité

Re: Polynôme

Message par Invité » mar. 22 déc. 2020 16:24

Je pense que c'est faux car le résultat que j'obtenais sur Python était très étrange...

Ici comment transformer les valeurs que j'ai mises dans la liste_x (c'est-à-dire les valeurs qui étaient dans le tableau que j'ai donné), en une liste avec les abscisses de Tchebychev ?

C'est ça que je comprends pas...
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: Polynôme

Message par sos-math(21) » mar. 22 déc. 2020 19:25

Bonjour,
tu es bien dans la deuxième partie de ton exercice avec les équipes bleues et rouges.
Dans cette partie, il ne me semble pas que tu aies besoin des abscisses de Tchebychev car on te demande simplement de trouver le polynôme d'interpolation de Lagrange et de le représenter graphiquement afin d'avoir un profil du tracé.
Pour l'équipe bleue, j'obtiens :
lagrange_exemple_10.PNG
Et pour les rouges :
lagrange_exemple_11.PNG
Voilà.
Invité

Re: Polynôme

Message par Invité » mar. 22 déc. 2020 19:43

D'accord, c'est effectivement ce qu'on devrait obtenir, ça ressemble bien à un profil topographique.

Mais quelles lignes de code avez-vous rentré pour obtenir tout ça ?

Moi je n'ai toujours pas réussi
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: Polynôme

Message par sos-math(21) » mar. 22 déc. 2020 19:59

Il faut que tu reprenne la fonction d'interpolation que nous avons construite auparavant et tu vas l'appliquer à la liste de l'équipe bleue, et ensuite, tu vas calculer les images d'une subdivision par cette fonction :

Code : Tout sélectionner

from scipy.interpolate import lagrange
import sympy
x, y, z, t = sympy.symbols('x y z t')
import numpy
import math
import matplotlib.pyplot as plt

def Interpolation_Lagrange(x,liste_x,liste_y):
    """renvoie la valeur du polynôme d'interpolation de Lagrange aux points (liste_x[i], liste_[i]) à l'abscisse x"""
    val = 0
    for i in range(len(liste_x)):
        produit = 1
        for j in range(len(liste_x)):
            if j != i:
                produit = produit * (x-liste_x[j])/(liste_x[i]-liste_x[j])
        val = val + produit*liste_y[i]
    return val
bleu_x = [0,500,600,1000,1250,1750,2000]
bleu_y = [100,285,300,350,385,225,100]
rouge_x = [50,75,400,650,1200,1900]
rouge_y = [100,110,250,340,380,140]
abscisses = numpy.linspace(0,2000,1000)
images =  numpy.array([Interpolation_Lagrange(abscisses[i],bleu_x,bleu_y) for i in range(len(abscisses))]) # images des points de la subdivision par le polynôme d'interpolation de lagrange
plt.scatter(bleu_x,bleu_y, color="green")
plt.plot(abscisses,images, color = "red")
plt.show()

Bonne continuation
Invité

Re: Polynôme

Message par Invité » mar. 22 déc. 2020 21:47

merci beaucoup, j'obtiens bien votre premier graphique avec votre code.

Par contre, pour obtenir le deuxième, voici comment j'ai modifié votre code (j'ai modifié uniquement la troisième ligne en partant de la fin) :

Code : Tout sélectionner

from scipy.interpolate import lagrange
import sympy
x, y, z, t = sympy.symbols('x y z t')
import numpy
import math
import matplotlib.pyplot as plt

def Interpolation_Lagrange(x,liste_x,liste_y):
    """renvoie la valeur du polynôme d'interpolation de Lagrange aux points (liste_x[i], liste_[i]) à l'abscisse x"""
    val = 0
    for i in range(len(liste_x)):
        produit = 1
        for j in range(len(liste_x)):
            if j != i:
                produit = produit * (x-liste_x[j])/(liste_x[i]-liste_x[j])
        val = val + produit*liste_y[i]
    return val
bleu_x = [0,500,600,1000,1250,1750,2000]
bleu_y = [100,285,300,350,385,225,100]
rouge_x = [50,75,400,650,1200,1900]
rouge_y = [100,110,250,340,380,140]
abscisses = numpy.linspace(0,2000,1000)
images =  numpy.array([Interpolation_Lagrange(abscisses[i],bleu_x,bleu_y) for i in range(len(abscisses))]) # images des points de la subdivision par le polynôme d'interpolation de lagrange
plt.scatter(rouge_x,rouge_y, color="green")
plt.plot(abscisses,images, color = "red")
plt.show()
Mais ça ne m'affiche pas votre deuxième graphique : savez-vous pourquoi ?
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: Polynôme

Message par sos-math(21) » mar. 22 déc. 2020 21:50

Il faut aussi modifier la ligne d’au-dessus car la fonction polynôme de Lagrange doit s’appliquer à rouge_x et rouge_y.
Invité

Re: Polynôme

Message par Invité » mar. 22 déc. 2020 22:03

OK, c'est bon j'ai réussi merci !

Pour la question suivante, je dirais que c'est une bonne idée car ça permettrait d'avoir plus de données et d'avoir une représentation plus fidèle à la réalité ? Etes-vous d'accord avec moi ?
sos-math(21)
Messages : 10350
Enregistré le : lun. 30 août 2010 11:15

Re: Polynôme

Message par sos-math(21) » mer. 23 déc. 2020 07:41

Bonjour,
c'est peut-être une fausse bonne idée... le fait de rajouter des points augmente le degré du polynôme et celui-ci peut devenir "moins régulier" : tout dépend de la répartition des points.
Essaie de tracer ta courbe en réunissant les listes bleu_x et rouge_x ainsi que bleu_y et rouge_y :

Code : Tout sélectionner

bleu_x = [0,500,600,1000,1250,1750,2000]
bleu_y = [100,285,300,350,385,225,100]
rouge_x = [50,75,400,650,1200,1900]
rouge_y = [100,110,250,340,380,140]
union_x = sorted(bleu_x + rouge_x)
union_y = sorted(bleu_y + rouge_y)
abscisses = numpy.linspace(0,2000,1000)
images =  numpy.array([Interpolation_Lagrange(abscisses[i],union_x,union_y) for i in range(len(abscisses))]) # images des points de la subdivision par le polynôme d'interpolation de lagrange
plt.scatter(union_x,union_y, color="green")
plt.plot(abscisses,images, color = "red")
plt.show()
Tu verras ce que cela donne....
Invité

Re: Polynôme

Message par Invité » mer. 23 déc. 2020 10:52

Bonjour,

Merci je vais regarder ça dès que j'ai un PC à ma disposition.

Il y a quand-même quelque chose que je comprends pas : pourquoi le fait de rajouter des points augmente le degré du polynôme ?

Pourriez-vous m'expliquer svp ?

Et qu'est-ce qu'un polynôme régulier / non régulier ?
Répondre