• Aucun résultat trouvé

newton_usw_enonce 1 Un peu de Sympy March 27, 2021 [1]: import sympy as s s.init_printing() from sympy.abc import x,y,a,b,c

N/A
N/A
Protected

Academic year: 2022

Partager "newton_usw_enonce 1 Un peu de Sympy March 27, 2021 [1]: import sympy as s s.init_printing() from sympy.abc import x,y,a,b,c"

Copied!
5
0
0

Texte intégral

(1)

newton_usw_Enonce

March 27, 2021

1 Un peu de Sympy

[1]: import sympy as s s.init_printing()

from sympy.abc import x,y,a,b,c

[2]: #une fonction symbolique f = s.Function('f') f(x)

[2]:

f(x)

[7]: # La fonction dérivée de f

f_=lambda x: s.Derivative(f(x),x) f_(x)

[7]:

d dxf(x)

[8]: # un symbole x_0 x0=s.symbols('x0') x0, f_(x0)

[8]: (

x0, d dx0

f(x0) )

[10]: #équation de la tangente en x_0 eq = s.Eq(y,f_(x0)*(x-x0)+f(x0)) eq

[10]:

y= (x−x0) d dx0

f(x0) +f(x0)

(2)

[11]: #pour trouver l'intersection avec l'axe des abscisses, résoudre : eq.subs({y:0})

[11]:

0 = (x−x0) d

dx0f(x0) +f(x0)

[15]: # abscisse de l'intersection avec Ox sol=s.solve(eq.subs({y:0}),x,dict=True) sol

[15]:

[{

x:x0 f(x0)

d dx0f(x0)

}]

[17]: sol[0][x]

[17]:

x0 f(x0)

d dx0f(x0)

2 Newton

Implanter la méthode de Newton du cours def newton(f,f_,x0,epsilon):

"""

f : fonction dérivable f_ : dérivée de f

x0 : abscisse de départ

epsilon : précision 'horizontale'

"""

[32]: x=s.symbols('x',real=True) sol=s.solve(x**3-2*x+1) sol

[32]:

[

1, 1 2+

5 2 ,

5 2 1

2 ]

[34]: [e.evalf() for e in sol]

[34]:

[1.0, 0.618033988749895, 1.61803398874989]

(3)

[30]: newton(lambda x:x**3-2*x+1,lambda x:3*x**2-2,-1.5,10**(-3)) [30]:

1.618034007303786

3 Résolution de systèmes d’équations non linéaires

On considère un système non linéaire de deux équations à deux inconnues comme : {2x2+y2 = 4

x+y = 1

Ce système correspond à l'équation : F(X) = (0) où X = (x

y )

, F(x) =

(f1(X) f2(X) )

, f1(X) = 2x2+y24;f2(X) =x+y−1

On commence par calculer la matrice Jacobienne de la fonction différentiable F:

F(X) =



∂f1

∂x(X) ∂f1

∂ y(X)

∂f2

∂x(X) ∂f2

∂y(X)

=

(4x 2y

1 1

)

Obervons que, sauf cas 4x= 2y, cette matrice est inversible.

Ensuite, on choisit X0 pas trop éloigné d'une véritable solution, et on applique la méthode de newton en résolvant :

Xk+1=Xk(F(Xk))1F(Xk)

Le critère d'arrêt sera ∥Xk+1−Xk∥ ≤ε

Plutôt que d'inverser la matrice, on résoud F(Xk)(Xk+1 Xk) = −F(Xk) dont l'inconnue est le vecteur ∆k=Xk+1−Xk. Ceci s'obtient par pivot de Gauss.

Donc à chaque tour de boucle : 1. On résoud le système par Gauss pour trouver ∆k 2. On pose Xk+1=Xk+ ∆k 3. le critère d'arrêt est k∥ ≤ε

3.1 Deux fonctions auxiliaires

Ecrire les fonctions def resoudre(A,B):

def norm(X):

qui retournent respectivement le vecteur colonne solution d'un système linéaire 2×2 et la norme d'un vecteur.

Les matrices sont implantées par des tableaux numpy 2×2, et les vecteurs colonnes par de simples tableaux d'une dimension.

(4)

3.2 Newton et Jacobienne

Ecrire la fonction :

def newtonb(f,f_,x0,epsilon):

"""

f : fonction différentiable de R^n dans R^n f_ : jacobiennne de f

x0 : point de départ dans R^n

epsilon : précision voulue entre deux itérés consécutifs

"""

[124]: newtonb(F,F_,X_0,0.01)

[124]: matrix([[ 1.38742624], [-0.38742624]])

4 Méthode de la fausse position

Voir Wikipedia pour plus d'informations.

Comme la méthode de dichotomie, la méthode de la fausse position commence par deux points a0 et b0 tels que f(a0) et f(b0) soient de signes opposés, ce qui implique d'après le théorème des valeurs intermédiaires que la fonction continue f possède au moins un zéro dans l'intervalle [a1, b1]. La méthode consiste à

produire une suite décroissante d'intervalles [ak, bk] qui contiennent tous un zéro de f.

On calcule l'abscisse ck de l'intersection de la corde joignant les points

Ak = (ak, f(ak)) à Bk = (bk, f(bk)). Cette abscisse est appelée zéro de la sécante.

Si f(ak) et f(ck) sont de même signe, alors on pose ak+1 = ck et bk+1 = bk, sinon on pose ak+1 = ak et bk+1 = ck. Ce procédé est répété jusqu'à ce que le zéro soit suffisamment approché, c'est-à-dire que l'écart entre ck+1 et ck soit inférieur à un écart ε acceptable.

La seule différence entre la méthode de la fausse position et la méthode de dichotomie est l'utilisation dans cette dernière la relation ck= (ak+bk)/2.

def rFalsi(f,a,b,p):

"""une seule extrêmité change à chaque étape on suppose f(a)*f(b)<0 comme dans dichotomie

"""

5 Méthode de la sécante

On part de deux abscisses quelconques (pas trop éloignées d'un zéro) et on calcule à chaque étape k, le zéro ck de la sécante (la corde) qui joint les

(5)

points Ak = (ak, f(ak)) à Bk = (bk, f(bk)). Comme dans la méthode de Newton, ak+1 vaut bk et bk+1 vaut ck.

On s'arrête dès que la différence entre deux abscisses consécutives est assez petite.

C'est cette méthode qui est utilisée lors de l'appel de la fonction

scipy.optimize.newton, si on n'indique pas la dérivée de la fonction dans les paramètres d'appels.

Ecrire la fonction

def secante(f, a, b, epsilon):

""" les deux extrémités de la corde sont mobiles comme dans newton

"""

pass

Références

Documents relatifs

Ecrire une fonction SommePoly prenant comme argument deux listes associées aux polynômes P et Q et qui rend la liste (normalisée) associée au polynôme P + Q.. Calculer la

VINGT−DEUX

[r]

Because a native Python number does not know how to compare itself with a SymPy object Python will try the reflective operation, “x &gt; 1” and that is the form that gets

Une somme qui porte sur les k de K α (x) est plus petite qu'une somme obtenue en ajoutant des termes positifs pour les autres k.. On considère la somme de la

[r]

[r]

[r]