Programmation
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation
Bonjour,
Il existe des fonctions Python qui calculent les dérivées de fonctions : il faut que tu cherches dans les documentations des modules sympy, numpy ou script. Regarde aussi les fonctions que l’on a construites au début du sujet.
Bonne continuation
Il existe des fonctions Python qui calculent les dérivées de fonctions : il faut que tu cherches dans les documentations des modules sympy, numpy ou script. Regarde aussi les fonctions que l’on a construites au début du sujet.
Bonne continuation
Re: Programmation
Bonjour
Merci de la réponse
On pourrait utiliser la fonction diff() de la bibliothèque sympy ?
Mais après je vois pas du tout comment je pourrais utiliser ça dans la formule que j'ai donnée dans mon précédent message.,..
Merci de la réponse
On pourrait utiliser la fonction diff() de la bibliothèque sympy ?
Mais après je vois pas du tout comment je pourrais utiliser ça dans la formule que j'ai donnée dans mon précédent message.,..
Re: Programmation
bonsoir avez-vous reçu mon dernier message ?
bonne soirée !
bonne soirée !
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation
Bonjour,
tu peux utiliser un programme similaire à celui du point fixe sauf que tu prends la formule proposée avec la dérivée, calculée en Python avec la fonction "derivative" du module scipy :
je te laisse construire cette nouvelle fonction et chercher le point fixe de la fonction donnée en exemple.
Bonne continuation
tu peux utiliser un programme similaire à celui du point fixe sauf que tu prends la formule proposée avec la dérivée, calculée en Python avec la fonction "derivative" du module scipy :
Code : Tout sélectionner
from scipy.misc import derivative
...
x = (f(x0) - x0*derivative(f,x0))/(1 - derivative(f,x0))
...
Bonne continuation
Re: Programmation
Merci, voici ce que je propose pour la fonction suriteration :
Est-ce correct ?
Si non, que faut-il modifier ?
merci, bon réveillon !!
Code : Tout sélectionner
from numpy.linalg import norm
from scipy.misc import derivative
def suriteration(f,x0,tol=10e-5,maxiter=100):
e = 1
itr = 0
while(e > tol and itr < maxiter):
x = (f(x0) - x0*derivative(f,x0))/(1 - derivative(f,x0))
e = norm(x0-x) # erreur du résultat à l'étape actuelle
x0 = x
itr = itr + 1
return x
Si non, que faut-il modifier ?
merci, bon réveillon !!
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation
Bonjour,
cela me semble correct, j'avais fait :
et l'appel donne :
On voit que la convergence est plus rapide avec la suritération (4 tours de boucle au lieu de 7).
Bonne continuation
cela me semble correct, j'avais fait :
Code : Tout sélectionner
from numpy.linalg import norm
from scipy.misc import derivative
def pointfixe(f,x0,tol=10e-5,maxiter=100):
e = 1
itr = 0
xp = []
while (e > tol and itr < maxiter):
x = f(x0)
e = norm(x0-x)
x0 = x
xp.append(x0)
itr = itr + 1
return x,xp
def suriteration(f,x0,tol=10e-5,maxiter=100):
e = 1
itr = 0
xp = []
while (e > tol and itr < maxiter):
x = (f(x0) - x0*derivative(f,x0))/(1 - derivative(f,x0))
e = norm(x0-x)
x0 = x
xp.append(x0)
itr = itr + 1
return x,xp
Code : Tout sélectionner
>>> pointfixe(lambda x:(2-x**2)/4,0)
(0.44949654218854873,
[0.5,
0.4375,
0.4521484375,
0.44889044761657715,
0.44962434150964725,
0.44945948788050405,
0.44949654218854873])
>>> suriteration(lambda x:(2-x**2)/4,0)
(0.4494897427831786, [0.5, 0.45, 0.44948979591836724, 0.4494897427831786])
Bonne continuation
Re: Programmation
Merci beaucoup de votre réponse.
J'ai une dernière méthode à programmer, la voici : https://www.cjoint.com/data/JLFmhmpBUdO_newton.png
Voici le code que je propose (je me suis un peu aidé d'internet, mais un peu seulement) :
Ce programme est-il correct selon vous ?
J'ai une dernière méthode à programmer, la voici : https://www.cjoint.com/data/JLFmhmpBUdO_newton.png
Voici le code que je propose (je me suis un peu aidé d'internet, mais un peu seulement) :
Code : Tout sélectionner
from scipy.misc import derivative
def newtonRaphson(f,x0,tol=10e-5,maxiter=100):
compteur =0
xn = x0
while abs (f(xn)/derivative(f,xn)) >= tol and compteur < maxiter:
xn=xn-f(xn)/derivative(f,xn)
compteur += 1
if derivative(f,xn) == 0 :
print ("Fin du programme division par 0 impossible !")
break
print ("Une solution proche de ",xn ," avec ", compteur ," itération (s)")
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation
Bonjour,
ce programme est correct, il ressemble aux autres programmes précédents, la différence tient à une condition d'arrêt de la boucle si la dérivée est égal à 0 car il y a un quotient par \(f'(x_n)\).
En faisant un essai avec la fonction indiquée, on retrouve une valeurs approchée de \(\sqrt{2}\).
Bonne continuation
ce programme est correct, il ressemble aux autres programmes précédents, la différence tient à une condition d'arrêt de la boucle si la dérivée est égal à 0 car il y a un quotient par \(f'(x_n)\).
En faisant un essai avec la fonction indiquée, on retrouve une valeurs approchée de \(\sqrt{2}\)
Code : Tout sélectionner
>>> newtonRaphson(lambda x:x**2-2,2)
Une solution proche de 1.4142156862745099 avec 3 itération (s)
Bonne continuation
Re: Programmation
Merci beaucoup !
Voici la suite de l'exercice : https://www.cjoint.com/data/JLFoMw3LomO ... ations.png
Mais j'ai un problème, comment utiliser la fonction newton que l'on vient de construire alors qu'il y a b, une constante, dans l'expression de la fonction de la première application ?
Voici la suite de l'exercice : https://www.cjoint.com/data/JLFoMw3LomO ... ations.png
Mais j'ai un problème, comment utiliser la fonction newton que l'on vient de construire alors qu'il y a b, une constante, dans l'expression de la fonction de la première application ?
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation
Bonjour,
je pense qu'il faut que tu attribues des valeurs à \(a\) et \(b\).
je ne vois pas d'autre possibilité... qu'y a-t-il avant cette question dans ton énoncé ?
Bonne continuation
je pense qu'il faut que tu attribues des valeurs à \(a\) et \(b\).
je ne vois pas d'autre possibilité... qu'y a-t-il avant cette question dans ton énoncé ?
Bonne continuation
Re: Programmation
Vous avez raison il n'y a aucune donnée concernant a et b avant.
Voici donc ce que je fais pour tracer la courbe (je prends b=3 et a=4) :
En traçant la courbe j'évalue la valeur des deux racines à :
x1=-2,57 et x2=2,57
Le code que j'ai écrit est-il correct ? Les valeurs des racines que j'ai évaluées sont-elles correctes aussi ?
Par contre, que peut-on remarquer pour la question 2 en utilisant la méthode de Newton en partant de valeurs initiales différentes ?
Je ne vois rien de bien flagrant ou d'intéressant... Et vous ?
Merci bonne journée ! :)
Voici donc ce que je fais pour tracer la courbe (je prends b=3 et a=4) :
Code : Tout sélectionner
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace (−10,10,100)
y=3*np.sin(x)-x/4
plt.plot(x,y)
x1=-2,57 et x2=2,57
Le code que j'ai écrit est-il correct ? Les valeurs des racines que j'ai évaluées sont-elles correctes aussi ?
Par contre, que peut-on remarquer pour la question 2 en utilisant la méthode de Newton en partant de valeurs initiales différentes ?
Je ne vois rien de bien flagrant ou d'intéressant... Et vous ?
Merci bonne journée ! :)
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation
Bonjour,
il faut sûrement faire plusieurs calculs avant de remarquer quelque chose.
Je te laisse creuser le problème.
Bonne continuation
il faut sûrement faire plusieurs calculs avant de remarquer quelque chose.
Je te laisse creuser le problème.
Bonne continuation
Re: Programmation
Merci d'avoir répondu, hélas j'ai bien creusé, dimannche après-midi, et toute la soirée de lundi (jusqu'à même beaucoup trop tard dans la nuit comme vous devez le voir à l'horaire de l'envoi de mon message)...
Avez-vous une idée de votre côté ?
Merci beaucoup
Avez-vous une idée de votre côté ?
Merci beaucoup
-
- Messages : 10354
- Enregistré le : lun. 30 août 2010 11:15
Re: Programmation
Bonjour,
non, je n'ai pas d'idée pour le moment, l'énoncé est trop vague. Peut-être un mail à ton professeur afin de lui demander ce qu'il attend pour cette question ?
Bonne continuation
non, je n'ai pas d'idée pour le moment, l'énoncé est trop vague. Peut-être un mail à ton professeur afin de lui demander ce qu'il attend pour cette question ?
Bonne continuation
Re: Programmation
J'ai envoyé un mail au prof, mais elle refuse de me dire quoi que ce soit.
VOici donc ce que je fais pour cette première application (rappel de l'énoncé ici : https://www.cjoint.com/data/JLFoMw3LomO ... ations.png)
J'obtiens alors :
Mais j'obtiens avec x0=10 une valeur de 8.623..... avec 6 itérations.
C'est une valeur complètement différente de la première !
Qu'en pensez-vous ?
Je suis très étonnée et un peu désemparée là .....
VOici donc ce que je fais pour cette première application (rappel de l'énoncé ici : https://www.cjoint.com/data/JLFoMw3LomO ... ations.png)
Code : Tout sélectionner
import numpy as np
from scipy.misc import derivative
def newtonRaphson(f,x0,tol=10e-5,maxiter=100):
compteur =0
xn = x0
while abs (f(xn)/derivative(f,xn)) >= tol and compteur < maxiter:
xn=xn-f(xn)/derivative(f,xn)
compteur += 1
if derivative(f,xn) == 0 :
print ("Fin du programme division par 0 impossible !")
break
print ("Une solution proche de ",xn ," avec ", compteur ," itération (s)")
print(newtonRaphson(lambda x:3*np.sin(x)-x/4,2.5,tol=10e-5,maxiter=100))
Code : Tout sélectionner
Une solution proche de 2.897690225800663 avec 6 iteration (s)
None
C'est une valeur complètement différente de la première !
Qu'en pensez-vous ?
Je suis très étonnée et un peu désemparée là .....