• Aucun résultat trouvé

Approximation de racines et d’intégrales : Numpy/Scipy et Scilab

N/A
N/A
Protected

Academic year: 2022

Partager "Approximation de racines et d’intégrales : Numpy/Scipy et Scilab"

Copied!
2
0
0

Texte intégral

(1)

http://alexandre.boisseau.free.fr/Prive/WWW/InfoPCSI/resume18.pdf

18

Approximation de racines et d’intégrales : Numpy/Scipy et Scilab

V. Solutions approchées d’équations : fsolve

⋄ Avec SCILAB, on utilise la fonctionfsolve sous la formefsolve(x0,f)f est la fonc- tion dont on veut déterminer une racine etx0 est une valeur de départ pour l’algorithme de recherche. La fonctionfsolveretourne 3 va- leurs : la valeur approchée de la racine, la va- leur 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’algo- rithme s’est déroulé (vaut 1 si tout s’est bien passé).

deff('y=f(x)','y=x^2-2') [x,fx,info]=fsolve(1,f)

info = 1.

fx =

- 4.441D-16 x =

1.4142136

⋄ Si on a seulement besoin de la première ou des deux premières valeurs on écrit :

x=fsolve(1,f) x =

1.4142136

[x,fx]=fsolve(1,f) fx =

- 4.441D-16 x =

1.4142136

⋄ Avec NUMPY/SCIPY, on utilise la commande fsolvedu packagescipy.optimize sous la formefsolve(f,x0)(x0est une valeur de départ pour l’algorithme etfla fonc- tion dont on cherche une racine) :

from scipy.optimize import fsolve print fsolve(lambda x:x**2-2,1) [ 1.41421356]

(2)

⋄ Le résultat obtenu est un tableau à 1 di- mension (et de taille 1), pour obtenir la ra- cine on ne garde que la première compo- sante.

x=fsolve(lambda x:x**2-2,1)[0]

print x 1.41421356237

VI. Approximations d’intégrales : intg et quad

⋄ Avec SCILAB, on utilise la fonction intg sous la formeintg(a,b,f)fest la fonc- tion à intégrer etaetbsont les bornes de l’in- tervalle. Cette fonction retourne deux valeurs : une approximation de l’intégrale et une esti- mation de l’erreur absolue commise dans l’ap- proximation.

deff('y=f(x)','y=x^2') [I,deltaI]=intg(0,1,f)

deltaI = 3.701D-15 I =

0.3333333

⋄ Si on veut uniquement connaitre l’approxi-

mation de l’intégrale, on écrit : I=intg(0,1,f) I =

0.3333333 B Ce calcul peut échouer sur des intégrales

a priori simples (explications données en cours). Iciintg(-1,1,g)ne marche pas. On augmente alors latolérance.

deff('y=g(x)','y=x') intg(-1,1,g,1e-10)

ans = 0.

⋄ Avec NUMPY/SCIPY, on uti- lise la fonction quad du pa- ckagescipy.integratesous la formequad(f,a,b).

from scipy.integrate import quad print quad(lambda x:x**2,0,1)

(0.3333333333333333, 3.700743415417188e-15)

Remarque. Le résultat obtenu est untuple. C’est un type particulier qui se rapproche des listes à deux exceptions près : untuples’é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 letuple est composé de deux valeurs : la valeur approchée de l’intégrale et une es- timation de l’erreur absolue commise dans l’approximation. Si on n’a besoin de de la valeur approchée, on ne conserve que la 1re composante dutuple.

x=quad(lambda x:x**2,0,1)[0]

print x

0.333333333333

Remarque. On a donné ici une description simplifiée des fonctions de résolution d’équa- tions et de calcul d’intégrales. Pour une présentation plus détaillée, avec SCILAB:

help fsolve,help intg; avec PYTHON:

help("scipy.optimize.fsolve"),help("scipy.integrate.quad").

Références