Polynôme
-
- Messages : 10352
- Enregistré le : lun. 30 août 2010 11:15
Re: Polynôme
Je te conseille de bien lire l’article Wikipedia : tout est expliqué même si les raisons du phénomène ne sont pas simples à comprendre.
Re: Polynôme
d'accord.
Et pour la Q3, il faudrait remplacer chaque élément de la liste construite précédemment par les xk ?
Comment fait-on ça en Python... ?
merci
Et pour la Q3, il faudrait remplacer chaque élément de la liste construite précédemment par les xk ?
Comment fait-on ça en Python... ?
merci
-
- Messages : 10352
- Enregistré le : lun. 30 août 2010 11:15
Re: Polynôme
Bonjour,
tu l'as déjà fait en prenant une subdivision régulière avec numpy.linspace.
Pour les abscisses de Tchebychev, la formule proposée me semble incorrecte (disons qu'avec celle de ton énoncé, cela ne fonctionne pas et on a encore une divergence), il faut prendre, pour avoir un polynôme de degré \(n\) :
\(\dfrac{a+b}{2}+\dfrac{b-a}{2}\times \cos\left(\dfrac{(2k-1)\pi}{n+1}\right)\) pour \(k=1,\ldots, n+1\) (dans l'énoncé on divise par 2 au lieu de \(n+1\) dans le cosinus)
Par ailleurs, je ne comprends pas pourquoi on te fait tester cette formule avec la fonction \(f_3\) qui a une valeur interdite en \(\dfrac {-1}{16}\) qui est dans l'intervalle.
Généralement (et cela me gêne depuis le début de ce sujet), on prend des fonctions de la forme \(f(x)=\dfrac{1}{1+\lambda x^2}\) donc moi j'aurais plutôt pris \(f_3(x)=\dfrac{1}{1+16x^2}\).
Ne peux-tu pas contacter ton professeur pour en avoir le cœur net ?
Quoiqu'il en soit, il te reste à créer la subdivision d'interpolation avec les cosinus : il y a une seule ligne à changer dans la définition de la fonction ecart_absolu.
Bonne continuation
tu l'as déjà fait en prenant une subdivision régulière avec numpy.linspace.
Pour les abscisses de Tchebychev, la formule proposée me semble incorrecte (disons qu'avec celle de ton énoncé, cela ne fonctionne pas et on a encore une divergence), il faut prendre, pour avoir un polynôme de degré \(n\) :
\(\dfrac{a+b}{2}+\dfrac{b-a}{2}\times \cos\left(\dfrac{(2k-1)\pi}{n+1}\right)\) pour \(k=1,\ldots, n+1\) (dans l'énoncé on divise par 2 au lieu de \(n+1\) dans le cosinus)
Par ailleurs, je ne comprends pas pourquoi on te fait tester cette formule avec la fonction \(f_3\) qui a une valeur interdite en \(\dfrac {-1}{16}\) qui est dans l'intervalle.
Généralement (et cela me gêne depuis le début de ce sujet), on prend des fonctions de la forme \(f(x)=\dfrac{1}{1+\lambda x^2}\) donc moi j'aurais plutôt pris \(f_3(x)=\dfrac{1}{1+16x^2}\).
Ne peux-tu pas contacter ton professeur pour en avoir le cœur net ?
Quoiqu'il en soit, il te reste à créer la subdivision d'interpolation avec les cosinus : il y a une seule ligne à changer dans la définition de la fonction ecart_absolu.
Bonne continuation
Re: Polynôme
D'accord je vais le contacter !
C'est la ligne x = ou la ligne y = qu'il faut changer ?
Pour moi c'est les 2...
C'est la ligne x = ou la ligne y = qu'il faut changer ?
Pour moi c'est les 2...
-
- Messages : 10352
- Enregistré le : lun. 30 août 2010 11:15
Re: Polynôme
Bonjour,
on change la subdivision (ou le support) donc ce sont les abscisses que l'on change (liste liste_x dans mon programme) .
Les "y" sont toujours les images des points de la subdivision par la fonction polynôme d'approximation ou par la fonction de départ.
Il n'y a pas grand chose à modifier.
on change la subdivision (ou le support) donc ce sont les abscisses que l'on change (liste liste_x dans mon programme) .
Les "y" sont toujours les images des points de la subdivision par la fonction polynôme d'approximation ou par la fonction de départ.
Il n'y a pas grand chose à modifier.
Re: Polynôme
Ah oui merci je comprends mieux.
Donc voici ce que je propose :
Mais ça me semble faux. Je me serais pas un peu compliqué la vie pour liste_x ? Je pense que c'est faux surtout ...
Donc voici ce que je propose :
Code : Tout sélectionner
def ecart_absolu_2(f,debut,fin,degre,precision):
abscisses = numpy.linspace(debut,fin, precision)
#plt.plot(abscisses,f(abscisses),color='blue')
liste_x = [(a+b)/2+(b-a)/2*(np.cos(2*k-1)*3,14)/(n-1) for k in range n]
ecart = numpy.array([abs(Interpolation_Lagrange(abscisses[i],liste_x,f(liste_x))-f(abscisses[i])) for i in range(len(abscisses))])
plt.plot(abscisses,ecart,color='red')
plt.show()
return max(ecart)
-
- Messages : 10352
- Enregistré le : lun. 30 août 2010 11:15
Re: Polynôme
Bonjour,
Ta ligne ci-dessous ne peut pas marcher :
Que désigne n ?
Regarde les paramètres de ta fonction ... De plus on écrit range(n) et pas range n .
Par ailleurs, tu as des problèmes de parenthèses dans ton np.cos
En python le séparateur décimal est le point donc 3.14 au lieu de 3,14... Tu peux encore faire mieux en appelant directement la constante pi de numpy : np.pi
Tes autres listes sont des tableaux numpy donc pour ne pas avoir de problème avec le tracé et la fonction plot, il faut convertir ta liste en tableau numpy : np.array(ma_liste)
J'ai l'impression que tu n'as jamais codé en Python, je me trompe ?
Ta ligne ci-dessous ne peut pas marcher :
Code : Tout sélectionner
liste_x = [(a+b)/2+(b-a)/2*(np.cos(2*k-1)*3,14)/(n-1) for k in range n]
Regarde les paramètres de ta fonction ... De plus on écrit range(n) et pas range n .
Par ailleurs, tu as des problèmes de parenthèses dans ton np.cos
En python le séparateur décimal est le point donc 3.14 au lieu de 3,14... Tu peux encore faire mieux en appelant directement la constante pi de numpy : np.pi
Tes autres listes sont des tableaux numpy donc pour ne pas avoir de problème avec le tracé et la fonction plot, il faut convertir ta liste en tableau numpy : np.array(ma_liste)
J'ai l'impression que tu n'as jamais codé en Python, je me trompe ?
Re: Polynôme
non vous ne trompez pas, on a commencé en novembre le Python, l'année dernière j'en avais jamais fait.
Donc c'est pas simple...
Désolée mais je vois pas où je pourrai demander la valeur de n.
Pourriez-vous me dire svp ?
Donc c'est pas simple...
Désolée mais je vois pas où je pourrai demander la valeur de n.
Pourriez-vous me dire svp ?
-
- Messages : 1859
- Enregistré le : mer. 2 nov. 2011 09:39
Re: Polynôme
Bonjour,
n correspond au degré du polynôme d'interpolation. De même pour a et b, ils ne sont pas définis pour ta fonction, ils correspondent à d'autres noms de variables... lesquels ?
Suis les remarques de sos-math(21).
Voici un endroit où tu peux tester et corriger ta liste :
https://trinket.io/python3/8439448113
Je te laisse modifier la ligne 8 pour obtenir cela avec degre = 10 sur [-1;1] et la formule de sos-math(21) :
[0.9594929736144974, 0.6548607339452851, 0.14231483827328512, -0.4154150130018863, -0.8412535328311811, -1.0, -0.8412535328311812, -0.41541501300188716, 0.14231483827328487, 0.6548607339452845]
ou (si tu divises dans ton cosinus par degre au lieu de (degre + 1))
[0.9510565162951535, 0.5877852522924731, 6.123233995736766e-17, -0.587785252292473, -0.9510565162951535, -0.9510565162951538, -0.5877852522924732, -1.8369701987210297e-16, 0.5877852522924729, 0.9510565162951535]
Bon courage
n correspond au degré du polynôme d'interpolation. De même pour a et b, ils ne sont pas définis pour ta fonction, ils correspondent à d'autres noms de variables... lesquels ?
Suis les remarques de sos-math(21).
Voici un endroit où tu peux tester et corriger ta liste :
https://trinket.io/python3/8439448113
Code : Tout sélectionner
import numpy as np
import matplotlib.pyplot as plt
debut = -1
fin = 1
degre = 10
liste_x = [np.cos((2*k-1)*np.pi) for k in range(degre)]
print(liste_x)
[0.9594929736144974, 0.6548607339452851, 0.14231483827328512, -0.4154150130018863, -0.8412535328311811, -1.0, -0.8412535328311812, -0.41541501300188716, 0.14231483827328487, 0.6548607339452845]
ou (si tu divises dans ton cosinus par degre au lieu de (degre + 1))
[0.9510565162951535, 0.5877852522924731, 6.123233995736766e-17, -0.587785252292473, -0.9510565162951535, -0.9510565162951538, -0.5877852522924732, -1.8369701987210297e-16, 0.5877852522924729, 0.9510565162951535]
Bon courage
Re: Polynôme
Du coup je modifierais ça comme ça :
Est-ce corret ?import numpy as np
import matplotlib.pyplot as plt
debut = -1
fin = 1
degre = 10
liste_x = [-(1/2)*np.cos((2*k-1)*np.pi) for k in range(degre)]
print(liste_x)
-
- Messages : 1859
- Enregistré le : mer. 2 nov. 2011 09:39
Re: Polynôme
Tu peux modifier tester ton code sur la plateforme en lien :
https://trinket.io/python3/8439448113
Si tu ne trouves pas un des deux résultats que je te propose avec debut =- 1, fin = 1 et degre = 10, c'est que ce n'est pas la bonne réponse.
Dans le cosinus, il faut par exemple diviser l'angle par le degré du polynôme. Reprends la formule donnée par mon collègue. Et il y a d'autres choses à modifier
A bientôt.
https://trinket.io/python3/8439448113
Si tu ne trouves pas un des deux résultats que je te propose avec debut =- 1, fin = 1 et degre = 10, c'est que ce n'est pas la bonne réponse.
Dans le cosinus, il faut par exemple diviser l'angle par le degré du polynôme. Reprends la formule donnée par mon collègue. Et il y a d'autres choses à modifier
A bientôt.
Re: Polynôme
Désolée mais là je suis vraiment perdue...
Je suis pas matheuse et en plus on vient de commencer Python, alors...
Je suis pas matheuse et en plus on vient de commencer Python, alors...
-
- Messages : 10352
- Enregistré le : lun. 30 août 2010 11:15
Re: Polynôme
Bonjour,
on reprend :
tu as besoin d'une liste liste_x qui correspond aux points de la subdivision : pour un polynôme d'interpolation de degré \(n\), cette liste contient \(n+1\) points
tu as besoin d'une liste d'images liste_y qui sont les images des points : les polynômes et la fonction de départ coïncident en ces points.
Ensuite pour tracer les courbes, avec matplotlib, tu as besoin d'une liste d'abscisses et de l'image de cette liste par la fonction mais aussi de l'image de cette liste par le polynôme afin de pouvoir tracer les courbes comme des lignes brisées.
Tu vas donc déclarer pour mieux comprendre en suivant le cheminement de sos-math(25) :
Il te reste ensuite à déclarer tes listes :
ce qui doit donner avec \(f(x)=\dfrac{1}{1+16x^2}\)
On voit que les écarts maximaux sont de l'ordre de 0,7.
Si on augmente le degré du polynôme, contrairement à la situation précédente avec la subdivision régulière, l'écart va diminuer : avec un degré 100, l'écart maximal est d'environ 0,04.
Bonne continuation
Bonne continuation
on reprend :
tu as besoin d'une liste liste_x qui correspond aux points de la subdivision : pour un polynôme d'interpolation de degré \(n\), cette liste contient \(n+1\) points
tu as besoin d'une liste d'images liste_y qui sont les images des points : les polynômes et la fonction de départ coïncident en ces points.
Ensuite pour tracer les courbes, avec matplotlib, tu as besoin d'une liste d'abscisses et de l'image de cette liste par la fonction mais aussi de l'image de cette liste par le polynôme afin de pouvoir tracer les courbes comme des lignes brisées.
Tu vas donc déclarer pour mieux comprendre en suivant le cheminement de sos-math(25) :
Code : Tout sélectionner
degre = 10 # degré du polynôme qui va imposer 11 points d'interpolation
debut = -1
fin = -1
precision = 1000 # cela correspond aux points que l'on va prendre pour tracer les courbes
Code : Tout sélectionner
# liste de la nouvelle subdivision avec les abscisses de Tchebychev
liste_x = numpy.array([(debut+fin)/2 + ((fin-debut)/2)*math.cos((2*k-1)*(np.pi)/degre+1) for k in range(1, degre+2)])
# 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()
Si on augmente le degré du polynôme, contrairement à la situation précédente avec la subdivision régulière, l'écart va diminuer : avec un degré 100, l'écart maximal est d'environ 0,04.
Bonne continuation
Bonne continuation
Re: Polynôme
Bonjour
Merci beaucoup de toutes ces explications : j'ai tout repris hier soir et maintenant je crois que j'ai compris.
Pour la toute dernière question, la question 4, que faut-il faire ?
Peut-on s'inspirer de ce qui a été fait à la question 2 ?
C'est ce que j'ai essayé de faire mais je vois pas quoi changer dans le programme de la question 2 pour qu'il réponde à la question 4..
Et vous ? Pourriez-vous me donner un début de résolution, ou un programme à compléter ?
Merci et bon dimanche
Merci beaucoup de toutes ces explications : j'ai tout repris hier soir et maintenant je crois que j'ai compris.
Pour la toute dernière question, la question 4, que faut-il faire ?
Peut-on s'inspirer de ce qui a été fait à la question 2 ?
C'est ce que j'ai essayé de faire mais je vois pas quoi changer dans le programme de la question 2 pour qu'il réponde à la question 4..
Et vous ? Pourriez-vous me donner un début de résolution, ou un programme à compléter ?
Merci et bon dimanche
-
- Messages : 10352
- Enregistré le : lun. 30 août 2010 11:15
Re: Polynôme
Bonjour,
Si tu regardes bien la réponse que j’ai faite hier, c’est exactement ce qui est demandé dans la question 4 : on représente graphiquement la liste écart qui mesure l’écart entre la fonction et ses interpolées de Lagrange sur les abscisses de Tchebychev.
En fait on n’a pas vraiment traité la question 3 : il faudrait donc re-découper ma proposition en deux parties pour qu’elle réponde aux deux dernières questions.
Je te laisse réorganiser ces éléments.
Si tu regardes bien la réponse que j’ai faite hier, c’est exactement ce qui est demandé dans la question 4 : on représente graphiquement la liste écart qui mesure l’écart entre la fonction et ses interpolées de Lagrange sur les abscisses de Tchebychev.
En fait on n’a pas vraiment traité la question 3 : il faudrait donc re-découper ma proposition en deux parties pour qu’elle réponde aux deux dernières questions.
Je te laisse réorganiser ces éléments.