Résumé 18
Transcription
Résumé 18
18 Approximation de racines et d’intégrales : Numpy/Scipy et Scilab V. Solutions approchées d’équations : fsolve ⋄ Avec S CILAB, on utilise la fonction fsolve sous la forme fsolve(x0,f) où f est la fonction dont on veut déterminer une racine et x0 est une valeur de départ pour l’algorithme de recherche. La fonction fsolve retourne 3 valeurs : la valeur approchée de la racine, la valeur de la fonction en ce point (qui doit être « assez petite » si tout s’est bien passé) et une troisième valeur qui indique comment l’algorithme s’est déroulé (vaut 1 si tout s’est bien passé). ⋄ Si on a seulement besoin de la première ou des deux premières valeurs on écrit : x=fsolve(1,f) x = 1.4142136 deff('y=f(x)','y=x^2-2') [x,fx,info]=fsolve(1,f) info = 1. fx = - 4.441D-16 x = 1.4142136 [x,fx]=fsolve(1,f) fx = - 4.441D-16 x = 1.4142136 ⋄ Avec N UMPY/S CIPY , on utilise la commande fsolve du package scipy.optimize sous la forme fsolve(f,x0) (x0 est une valeur de départ pour l’algorithme et f la fonction dont on cherche une racine) : from scipy.optimize import fsolve print fsolve(lambda x:x**2-2,1) [ 1.41421356] http://alexandre.boisseau.free.fr/Prive/WWW/InfoPCSI/resume18.pdf ⋄ Le résultat obtenu est un tableau à 1 dix=fsolve(lambda x:x**2-2,1)[0] mension (et de taille 1), pour obtenir la raprint x cine on ne garde que la première composante. 1.41421356237 VI. Approximations d’intégrales : intg et quad ⋄ Avec S CILAB, on utilise la fonction intg sous la forme intg(a,b,f) où f est la fonction à intégrer et a et b sont les bornes de l’intervalle. Cette fonction retourne deux valeurs : une approximation de l’intégrale et une estimation de l’erreur absolue commise dans l’approximation. ⋄ Si on veut uniquement connaitre l’approximation de l’intégrale, on écrit : B Ce calcul peut échouer sur des intégrales a priori simples (explications données en cours). Ici intg(-1,1,g) ne marche pas. On augmente alors la tolérance. deff('y=f(x)','y=x^2') [I,deltaI]=intg(0,1,f) deltaI = 3.701D-15 I = 0.3333333 I=intg(0,1,f) I = 0.3333333 deff('y=g(x)','y=x') intg(-1,1,g,1e-10) ans = 0. ⋄ Avec N UMPY/S CIPY, on utifrom scipy.integrate import quad lise la fonction quad du paprint quad(lambda x:x**2,0,1) ckage scipy.integrate sous la forme quad(f,a,b). (0.3333333333333333, 3.700743415417188e-15) Remarque. Le résultat obtenu est un tuple. C’est un type particulier qui se rapproche des listes à deux exceptions près : un tuple s’écrit avec des parenthèses (les listes s’écrivent avec des crochets) et n’est pas modifiable (par exemple on ne peut pas ajouter d’élément ou changer la valeur d’une composante). ⋄ Ici le tuple est composé de deux valeurs : x=quad(lambda x:x**2,0,1)[0] la valeur approchée de l’intégrale et une esprint x timation de l’erreur absolue commise dans l’approximation. Si on n’a besoin de de la 0.333333333333 valeur approchée, on ne conserve que la 1re composante du tuple. Remarque. On a donné ici une description simplifiée des fonctions de résolution d’équations et de calcul d’intégrales. Pour une présentation plus détaillée, avec S CILAB : help fsolve, help intg ; avec P YTHON : help("scipy.optimize.fsolve"), help("scipy.integrate.quad").