0% ont trouvé ce document utile (0 vote)
44 vues11 pages

ch2 Zero Fonction

Transféré par

reehabbaaa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
44 vues11 pages

ch2 Zero Fonction

Transféré par

reehabbaaa
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Ingénierie numérique et simulation Prof : S.

BENGHAZOUANI

Chapitre N°2 : Résolution de l’équation F(x)=0


1. Résolution d'équation algébrique

Le problème de résolution de l’équation F(x)=0 est rencontré fréquemment dans la pratique, il


n’existe pas en général de méthodes analytique pour résoudre explicitement de telles
équations.
la résolution se fait en construisant une suite (xk) k ∈ N qui aura comme limite la solution de

l’équation
Le but de ce chapitre est de donner des méthodes pour construire ce genre de suites.

1.1. Méthode de dichotomie

On considérera par la suite une fonction f continue sur un intervalle [a,b] à valeurs réelles, telle que
f(a).f(b)<0. D’après le théorème des valeurs intermédiaires, la fonction f s’annule au moins une fois
sur l’intervalle [a,b].

Soit f est une fonction continue et admet au moins une solution sur un intervalle [a, b].
Problème :
Rechercher α ∈ [a, b] tel que f(α) = 0

Algorithme :
Initialisation : on prend pour x0 le milieu de [a, b].
La racine se trouve alors dans l’un des deux intervalles] a, x0 [ ou ] x0, b [ ou bien elle est égale à x0.

• si f(a).f(x0) < 0, alors α ∈] a, x0[. On pose a1 = a, b1 = x0.


• si f(a).f(x0) = 0, alors α = x0.
• si f(a).f(x0) > 0, alors α ∈]x0, b[. On pose a1 = x0, b1 = b.

On prend alors pour x1 le milieu de [a1, b1].


On construit ainsi une suite :
x0 = (a+b)/2, x1 = (a1 + b1)/2, . . ., xn = (an + bn)/2
telle que :
|α − xn| ≤ (b − a)/2n+1.

Etant donné une précision ε, cette méthode permet d’approcher α en un nombre prévisible
d’itérations.

Page 1
Ingénierie numérique et simulation Prof : [Link]

Exemple : On cherche une solution de f : x → x2 -2 dans l’intervalle [1, 2]

Page 2
Ingénierie numérique et simulation Prof : [Link]

• f(1)= -1 < 0 et f(2)= 2 >0, donc l’équation f(x)=0 possède une solution dans [1 ,2].
La valeur médiane de cet intervalle est 1.5.

•f(1.5)= 0.25 >0 et f(1) = -1 <0, donc l’équation f(x)=0 possède une solution dans [1.25, 1.5].
•...
•f(1.41430664062) ≃ 0.000263273715973 > 0 et f(1.4140625) < 0, donc l’équation f(x) = 0
possède une solution dans [1.4140625, 1.41430664062].

On peut représenter ceci, en notant [an, bn] le segment [c, d] après la n-ième étape.
On arrête le processus lorsque d − c a atteint une valeur correspondant à la précision demandée
𝑑−𝑐
𝜀 et on renvoie comme résultat
2

Question 1 :
Ecrire la fonction dicho(f,a,b,epsilon) qui recherche et renvoie un zéro par dichotomie.
f : une fonction
a et b : des réels qui délimitent l’intervalle [a,b]
epsilon : un réel indiquant la précision demandées

Implémentation en Python

Solution :
import math
def f(x):
return x**(1/2) * [Link](x)

def dichotomie(a, b, f, eps=1e-10):


while([Link](a-b) > eps):
c=(a+b)/2.0
if f(c)==0:
return c
elif f(a)*f(c)<0:
b=c
else:
a=c
return c
a=1
b=2
c=dichotomie(a, b, f)
print("Valeur du zéro de la fonction f sur [",a,b,"] :",c)
TD 4 -

Page 3
Ingénierie numérique et simulation Prof : [Link]

from numpy import *


from pylab import *

x=linspace(0,5,20)
y= pow(x,1/2)*cos(x)
axis([0,5,-5,5])
axhline(color='r')

plot(x,y,"b")
title("La fonction $x^{1/2}*cos(x)$")
show()

1.2. Méthode de Newton


On considère une fonction f continue et dérivable sur un intervalle [a ; b]. On pose alors x0=a et
A0(x0;f(x0)) en lequel on trace une tangente

Cette tangente coupe l’axe des abscisses en un point d’abscisse notée x1:

Page 4
Ingénierie numérique et simulation Prof : [Link]

On considère alors le point A1(x1;f(x1)) en lequel on trace la tangente à la courbe:

Cette tangente coupe l’axe des abscisses en un point d’abscisse x2. On considère alors le point
A2(x2;f(x2)) en lequel on trace la tangente à la courbe, qui coupe l’axe des abscisses en x3, etc.

On construit ainsi une suite de nombre sur l’axe des abscisses qui se rapprochent de la solution
de l’équation : le point d’intersection de la courbe et de l’axe des abscisses.

La suite numérique définie par la méthode de Newton


Considérons un point An(xn;f(xn)) ; l’équation de la tangente en ce point est:
y=f′(xn)(x−xn)+f(xn)
et xn+1 est donc défini comme la solution de l’équation :
0=f′(xn)(xn+1−xn)+f(xn)
soit:

Page 5
Ingénierie numérique et simulation Prof : [Link]

xn+1=−f(xn)/f′(xn)+xn.

Il faut donc, pour que cette méthode fonctionne, que tous les f′(xn) soient non nuls sur
l’intervalle considéré.

Ainsi, nous allons considérer la suite xn définie par:


x0=a
xn+1=−f(xn) / f′(xn)+xn

Question 2 :
Ecrire la fonction newton( a,epsilon) qui recherche et renvoie un zéro par la méthode de
Newton.
a : le point de départ
epsilon : un réel indiquant la précision demandées

def newton(a,e):
delta = 1
while delta > e:
x = -fonction(a)/derivee(a) + a
delta = abs(x - a)
a=x
return x , delta
def fonction(x):
return 0.1*x**3-x+1
def derivee(x):
return 0.3*x**2-1
print( newton(0 , 0.001) )

ou bien
def newton(a,e):
delta = 1
while delta > e:
x = -f(a)/df(f,a,h) + a
delta = abs(x - a)
a=x
return x , delta
def f(x):
return 0.1*x**3-x+1
def df (f,x, h):
return (f(x+h)-f(x-h)) / (2.0*h)
h=0.001

Page 6
Ingénierie numérique et simulation Prof : [Link]

print( newton(0 , 0.001) )

1.3 Méthode de la sécante

Principe mathématique de la méthode de la sécante (avant implémentation en Python)


Nous avons pu voir à travers la méthode de Newton que la suite définie par:
xn+1=xn−f(xn) / f′(xn)
convergeait vers la solution de l’équation f(x) = 0.

Le principal inconvénient de cette méthode est le fait que l’on ne connait pas
nécessairement la dérivée de la fonction f. Aussi, nous allons remplacer f′(xn) par
f(xn)−f(xn−1) / xn−xn−1, qui est une bonne approximation pour xn et xn−1 très proches.

La relation de récurrence devient donc:

xn+1= xn − (xn−xn−1) f(xn) / f(xn)−f(xn−1).

Page 7
Ingénierie numérique et simulation Prof : [Link]

Question 3
Ecrire la fonction secante(a,b,epsilon) qui recherche et renvoie un zéro par la méthode de
Newton.
epsilon : un réel indiquant la précision demandées

Implémentation en Python
def secante(a,b,p):
while True:
x = b - ( b - a ) * f(b) / ( f(b) - f(a) )
if abs(x - b) <= 10**(-p):
return x
else:
a, b = b, x

Implémentation en Python

# méthode de la sécante
import math

def f(x):
return [Link](x) - x**3 + 4

a=1
b=2
erreur = 10**-10
c = secante(a, b, erreur)
print(c)

1.4 Méthode Regula Falsi ou bien Méthode de la fausse position


Cette méthode permet également de trouver le ou les zéros d’une fonction continue. À l’étape
on choisit deux points aK et bK tels que f(aK ) etf (bK ) soient de signes contraires. Nous
savons, grâce au théorème des valeurs intermédiaires, qu’il existe un point
tel que f(c) = 0.

Page 8
Ingénierie numérique et simulation Prof : [Link]

On déterminera un point cK le plus proche possible de c tel que :

Si f(aK ) et f (cK ) sont de signes opposés, on choisira l’intervalle [aK ,cK ] afin de continuer le
processus, sinon, on choisira l’autre intervalle [ck , bk]. Si on choisira l’intervalle [ak ,ck ] on
posera alors ak+1 = ak et bk+1 = ck . On réitère ce processus jusqu’à une valeur ck telle que
f(ck) soit aussi proche de la valeur zéro en fonction de l’erreur affichée.

Question 4 :

Ecrire la fonction faussePosion(a,b,f,epsilon) qui recherche et renvoie un zéro par la méthode de


Newton.
f : une fonction
epsilon : un réel indiquant la précision demandées

Implémentation en Python

## méthode de la fausse position pour trouver x / f(x)=0


import math

def f(x):
return ([Link](x)-x**3+4)

def faussePosition(a,b,f, eps):


c=max(a,b)
while [Link](f(c)) > eps :
diff = f(a) - f(b)
c = a - ( (a-b)/diff * f(a) )
produit = f(a)* f(c)
if produit < 0 :
b=c
else :
a=c
return c
a=1
b=3
eps = 1e-5
c = faussePosition(a, b, f, eps)
print("Entre ",a," et ",b," le zéro de la fonction a pour abscisse ",c )

Page 9
Ingénierie numérique et simulation Prof : [Link]

Fonction Récursive

### Question 1:

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

x0=((a+b)/2)

if abs(f(x0))<=epsilon:

return "la solutione est "+str(x0)

if f(a)==0:

return "la solutione est "+str(a)

if f(b)==0:

return "la solutione est "+str(b)

if f(a)*f(x0)==0:

return "la solutione est "+str(x0)

if f(a)*f(x0)<0:

return dico(f,a,x0,epsilon)

if f(a)*f(x0)>0:

return dico(f,x0,b,epsilon)

### Question 2:

def newton(f,fp,x0,epsilon):

if f(x0)<=epsilon:

return "la solution est "+str(x0)

x1=-f(x0)/fp(x0)+x0

return newton(f,fp,x1,epsilon)

Page 10
Ingénierie numérique et simulation Prof : [Link]

### Question 3:

def secante(f,x0,x1,epsilon):

if abs(f(x0))<=epsilon:

return "la solution est "+str(x0)

if abs(f(x1))<=epsilon:

return "la solution est "+str(x1)

x2=x1-((x1-x0)*f(x1))/(f(x1)-f(x0))

return secante(f,x1,x2,epsilon)

Page 11

Vous aimerez peut-être aussi