§ 2.3 Méthode regula falsi

Motivation et description de la méthode

Soit f:[a;b]⟶ℝ une fonction continue avec f(a)·f(b)<0 (cette fonction satisfait donc les hypothèses permettant d’appliquer la méthode de la bissection). La méthode de la bissection converge lentement car à chaque étape la longueur de l’intervalle [a;b] encadrant la racine r recherchée est exactement multipliée par (1/2). Le but de la méthode regula falsi (appelée aussi méthode de la fausse position) est de fournir à chaque étape un nouvelle encadrement qui multiplie la longueur de l’encadrement précédemment considéré par un facteur inférieur à (1/2).  Pour cela, nous approximons la fonction f par la droite passant par les points (a;f(a)) et (b;f(b)) et l’abscisse (Subscript[x, 1]) du point d’intersection de cette droite avec l’axe des x constitue une des bornes du nouvelle encadrement. Le nouvelle encadrement considéré  ([a;(Subscript[x, 1])] ou [(Subscript[x, 1]);b])  est choisi, comme pour la méthode de la bissection, de façon à ce que les images des bornes soient de signes opposés. Nous répétons l’opération jusqu’à atteindre la précision désirée.

Dans la figure ci-dessous, le nouvel encadrement considéré est [(Subscript[x, 1]);b]. Nous constatons que la longueur de ce nouvel encadrement est approximativement (1/4) de celle de l’encadrement précédent.

L’abscisse (Subscript[x, 1]) de l’intersection de l’axe des x avec la sécante au graphe de f passant par les points (a;f(a)) et (b;f(b)) vaut

(Subscript[x, 1])=((a f(b)-b f(a))/(f(b)-f(a))).

Pour une preuve, voir l’exercice 2-3-2

Exemple

Déterminons à l’aide de la méthode regula falsi le plus petit zéro positif de la fonction f(x)=(x^5)-4(x^2)+2. Nous devons commencer par trouver un encadrement de ce zéro. Pour cela, nous traçons le graphe de f :

f[x_]:=x^5-4x^2+2
Plot[f[x],{x,0,2}]

Nous prenons comme encadrement initial [0;1] et pour éviter de devoir répéter le laborieux calcul de la nouvelle borne à chaque étape, nous définissons une fonction le faisant :

rf[a_,b_]:=((a f[b]-b f[a])/(f[b]-f[a])) (* fonction calculant la nouvelle borne *)
(Subscript[x, 1])=rf[0.,1.] (* nouvelle borne *)
f[(Subscript[x, 1])]

Comme f((Subscript[x, 1]))>0 et f(0)>0, (Subscript[x, 1]) remplace la borne 0 et le nouvel encadrement considéré est [(Subscript[x, 1]);1]. Nous répétons maintenant l’opération :

{(Subscript[x, 1]),1} (* nouvel encadrement *)
(Subscript[x, 2])=rf[(Subscript[x, 1]),1] (* nouvelle borne *)
f[(Subscript[x, 2])]

Comme f((Subscript[x, 2]))<0 et f(1)<0, (Subscript[x, 2]) remplace la borne 1 et le nouvel encadrement considéré est [(Subscript[x, 1]);(Subscript[x, 2])]. Nous répétons maintenant l’opération :

{(Subscript[x, 1]),(Subscript[x, 2])} (* nouvel encadrement *)
(Subscript[x, 3])=rf[(Subscript[x, 1]),(Subscript[x, 2])](* nouvelle borne *)
f[(Subscript[x, 3])]

Comme f((Subscript[x, 3]))>0 et f((Subscript[x, 1]))>0, (Subscript[x, 3]) remplace la borne (Subscript[x, 1]) et le nouvel encadrement considéré est [(Subscript[x, 3]);(Subscript[x, 2])]. Nous répétons maintenant l’opération :

{(Subscript[x, 3]),(Subscript[x, 2])} (* nouvel encadrement *)
(Subscript[x, 4])=rf[(Subscript[x, 3]),(Subscript[x, 2])](* nouvelle borne *)
f[(Subscript[x, 4])]

Comme f((Subscript[x, 4]))<0 et f((Subscript[x, 2]))<0, (Subscript[x, 4]) remplace la borne (Subscript[x, 2]) et le nouvel encadrement considéré est [(Subscript[x, 3]);(Subscript[x, 4])]=[0.7471000246050011`,0.7471268237907489`]. Nos résultats peuvent se résumer dans le tableau suivant : 
	({{"n", "a", "Sgn(f(a))", "b", "Sgn(f(b))", "\!\(\*SubscriptBox[\(x\), \(n\)]\)", "Sgn(f(\!\(\*SubscriptBox[\(x\), \(n\)]\)))"}, {0, 0.`, "+", 1.`, "-", 0.6666666666666666`, "+"}, {1, 0.6666666666666666`, "+", 1.`, "-", 0.7537993920972645`, "-"}, {2, 0.6666666666666666`, "+", 0.7537993920972645`, "-", 0.7471000246050011`, "+"}, {3, 0.7471000246050011`, "+", 0.7537993920972645`, "-", 0.7471268237907489`, "-"}, {4, 0.7471000246050011`, "+", 0.7471268237907489`, "-", "", ""}})

Nous constatons qu’après 4 itérations nous avons un intervalle de longueur inférieure à (10^(-4)) alors qu’avec le même nombre d’itérations la méthode de la bissection aurait donné un intervalle de longueur (1/(2^4))=0.0625`!

Propriétés

(a)	Tant que la fonction change de courbure (convexe puis concave ou l’inverse) sur l’encadrement considéré, la 
	longueur de celui-ci décroît plus vite que pour la méthode de la bissection.
(b)	Si la fonction a la même courbure sur tout l’encadrement, l’une des bornes reste fixe alors que l’autre converge 
	vers la racine recherchée (pour un exemple, voir l’exercice 2-3-P4). Cette convergence peut cependant être 
	très lente (pour un exemple, voir l’exercice 2-3-4) : la méthode regula falsi n’est donc pas toujours meilleure 
	que la méthode de la bissection!

Remarques

Une méthode qui s’inspire de la méthode regula falsi est la méthode de la sécante. A partir deux approximations initiales (Subscript[x, 0]) et (Subscript[x, 1]) de la racine recherchée nous définissons la suite
	(Subscript[x, n+1=])(((Subscript[x, n-1])f((Subscript[x, n]))-(Subscript[x, n]) f((Subscript[x, n-1])))/(f((Subscript[x, n]))-f((Subscript[x, n-1])))).
Si le graphe de la fonction est suffisamment lisse (plus précisément la fonction doit être deux fois continûment différentiable) et si les approximations initiales sont suffisamment proches de la racine, alors la méthode converge plus rapidement que la méthode de la bissection. Une variation de la cette méthode est utilisée par Mathematica (voir la méthode FindRoot présentée à la section 3).

Exercice 2-3-1

Soit la fonction f:ℝ⟶ℝ, f(x)=8 (x^3)+16 (x^2)-5 
(a)	Déterminer graphiquement un premier encadrement du plus grand zéro négatif de f. On demande un
	encadrement dont les bornes sont entières
(b)	Tracer à l’aide de Mathematica le graphe de f sur cet intervalle, imprimer ce graphe et estimer graphiquement
	un deuxième et un troisième encadrement à l’aide de la méthode regula falsi.
(c)	Calculer avec Mathematica la valeur des bornes du quatrième encadrement en partant de la valeur de l’encadrement initial.

Exercice 2-3-2

Soit f:[a;b]⟶ℝ une fonction continue avec f(a)·f(b)<0.
(a)	Déterminer l'équation de la sécante au graphe de f qui passe par les deux points  (a;f(a)) et (b;f(b)).
(b)	Déduire de l’équation précédente que cette droite coupe l’axe des abscisses en (Subscript[x, 1])=((a f(b)-b f(a))/(f(b)-f(a))).

Exercice 2-3-P4

Au moyen de la méthode de la regula falsi, résoudre numériquement le problème 1-4 avec les données suivantes: t = 0.3,  r = 1.
Calculer α à la précision  ± (10^(-5)) puis calculez h.

Exercice 2-3-3

(1) 	Programmer un module regulafalsiListe[f,{a,b},n] qui retourne l’intervalle de départ ainsi que 
	les n intervalles fournis par la méthode regula falsi lorsqu’elle est appliquée à une fonction f:[a;b]⟶ℝ. 
	Tester votre module avec l’exemple de la théorie.
	
(2)	Serait-il un bonne idée de programmer un module regulafalsiTol[f,{a,b},tol] qui retourne le 
	premier intervalle de longueur inférieure à tol fourni par la méthode regula falsi ?

Exercice 2-3-4

Soit l’équation (x^(((x^x))))-2=0
(a)	Déterminer graphiquement un encadrement de la (des) solution(s) de cette équation. On demande un (des) 
	encadrement(s) dont les bornes sont entières.
(b)	Déterminer l’intervalle fourni par la méthode regula falsi après 10 itérations (utiliser le module défini à 
	l’exercice précédent). Comparer la longueur de l’intervalle obtenu à la longueur de l’intervalle que l’on obtiendrait
	en utilisant la méthode de la bissection. Que constatez-vous?

Réponse de l’exercice 2-3-1

(c)	 [-0.6909861564053645`; - 0.625]

Réponses de l’exercice 2-3-P4

α≅2.49078	et	h≅0.68031