§ 3 Résolution d'équations avec Mathematica

Mathematica dispose de plusieurs méthodes pour résoudre des équations. Dans cette section, nous allons nous intéresser aux méthodes suivantes :  Solve, Reduce, NSolve et FindRoot. 

Avant d’aborder les spécificité des ces différentes fonctions, nous allons dans le préliminaire qui suit faire un bref rappel sur les symboles d’affectation et d’égalité puis, afin de comprendre quelle méthode est la plus appropriée à la résolution de quelle équation, nous allons proposer une classification des équations. Nous allons ensuite traiter les méthodes permettant d’obtenir des solutions exactes puis celles permettant d’obtenir des solutions approximatives.

§ 3.1  Préliminaire

Symboles d’affectation et d'égalité

En Mathematica, le symbole “=“ désigne une affectation (ou assignation) qui consiste à attribuer une valeur à une variable. Par exemple

x=5

Par contre,  “==” désigne le symbole d'égalité dont l’évaluation dans une expression retourne la valeur est vrai (True) ou faux (False) :

x==1

x==5

C'est le symbole d'égalité qui permet de poser une équation. L'équation comporte habituellement une ou plusieurs inconnue(s), c'est-à-dire une ou plusieurs variable(s) non affectée(s) :

Clear[x];
eqn=(1/2)x+(2/3)==5

Comme 0 n’est pas une solution de cette équation, si nous remplaçons x par 0 dans eqn Mathematica retourne faux :

eqn/.{x->0}

Equations algébriques et transcendantes

Une équation algébrique est une équations qui peut être mise sous la forme p(x)=0, où p est un polynôme. Par exemple, l’équation ((x+1)/(x+7))=2 est algébrique car elle est équivalente à (x+1)-2(x+7)=0 sous la condition x≠-7. Une équation qui n’est pas algébrique est une équation transcendante. Par exemple, sin(α)=cos(α) est transcendante.

Afin d’illustrer le fonctionnement des méthodes de résolution proposées par Mathematica nous allons travailler avec les équations suivantes :

Clear[x,a,b]
(* Equations algébriques *)
eqnA1=x^5+x+1==0;
eqnA2=x^5+x^2+1==0;
eqnA3= a x+b==0;
(* Equations transcendantes *)
eqnT1= Cos[x]==1/2;
eqnT2= Cos[x]==Log[x];

§ 3.2  Recherche des solutions exactes

Méthode Solve

La méthode Solve est spécialement conçue pour la résolution d’équations algébriques mais fonctionne aussi pour certaines équations transcendantes. Nous allons voir comment Mathematica traite nos cinq exemples.

Solve[eqnA1,x]

Nous pouvons préciser que nous ne nous intéressons qu’aux solutions réelles :

Solve[eqnA1,x,Reals]

Mathematica nous dit que x est une racine de l’équation 1-(x^2)+(x^3)=0. Afin d’obtenir cette solution sous forme de radicaux, nous utilisons la fonction ToRadicals :

ToRadicals[%]

Solve[eqnA2]

ToRadicals[%]

Mathematica n’arrive pas a écrire les solutions de cette équation sous forme de radicaux. Ce n’est pas étonnant car nous avons une équation de degré 5 et il n’existe en effet pas de méthode générale pour résoudre les équation de degré 5.

Solve[eqnA3,x]

Mathematica donne la solution générale de l’équation mais ne traite pas le cas a=0.

Solve[eqnT1,x]

Bien que l’équation soit transcendante, Solve donne toutes les solutions mais ceci est un cas particulièrement simple. Généralement Solve ne résout pas les équations transcendantes :

Solve[eqnT2,x]

Méthode Reduce

La méthode Reduce réduit une équation à des équations équivalentes.

Reduce[eqnA1,x]

Là aussi, nous pouvons préciser que nous ne nous intéressons qu’aux solutions réelles :

Reduce[eqnA1,x,Reals]

Nous pouvons aussi utiliser la fonction ToRadicals :

ToRadicals[%]

Nous pouvons transformer cette équation en une règle de remplacement avec la fonction ToRules (ceci est utile pour récupérer un résultat sans faire de copier-coller) :

ToRules[%]

Reduce[eqnA2]

ToRadicals[%]

Comme avec Solve, Mathematica n’arrive pas a écrire les solutions de cette équation sous forme de radicaux.

Reduce[eqnA3,x]

Pour comprendre la signification de ce résultat, rappelons que && signifie “et” et que || signifie “ou” (ces symboles peuvent être remplacés par∧ et ∨) . La réponse fournit par Mathematica signifie que nous avons trois cas possibles :
	(1^er) cas: si a=0 et b=0 , alors tout  x  est solution;
	(2^e) cas: si a≠0, alors  x=-(p/m);
	(3^e) cas  a=0  et  b≠0  (qui n’apparaît pas formellement), l’équation n’a pas de solution.

Reduce[eqnT1,x]

Bien que l’équation soit transcendante, Reduce donne toutes les solutions mais ceci est un cas particulièrement simple. Généralement Reduce ne résout pas les équations transcendantes :

Reduce[eqnT2,x]

Comparaison de Solve et Reduce

Nous constatons que les deux méthodes présentent les mêmes performances pour des équations sans paramètre. Solve a l’avantage de pouvoir facilement réutiliser les résultats car ils sont fournis sous la forme de règles de remplacement. Par contre Reduce est plus performante que Solve si l’équation à résoudre possède des paramètres.

§ 3.3 Approximation des solutions

Dans cette section nous allons approximer les solutions des équations que nous n’avons pu résoudre exactement dans la section précédente.

Méthode NSolve

La méthode NSolve est spécialisée dans la résolution des équations algébriques (elle est équivalente à Solve[eqn,x]//N). Elle livrera une approximation de toutes les solutions.

NSolve[eqnA2,x]

Nous pouvons préciser que nous ne nous intéressons qu’aux solutions réelles :

NSolve[eqnA2,x,Reals]

NSolve[eqnT2,x]

Sans surprise, NSolve ne résout pas le deuxième exemple d’équation transcendante.

Méthode FindRoot[eqn,{x,x0}]

La méthode FindRoot[eqn,{x,x0}] est une variation de la méthode de Newton. Pour que Mathematica retourne une approximation d’une solution de l’équation eqn dont l’inconnue est x, nous devons donner une approximation de départ x0. Appliquons cette méthode au deuxième exemple d’équation transcendante. Pour cela, nous devons trouver une approximation de départ, approximation que nous allons obtenir graphiquement :

Plot[{Cos[x],Log[x]},{x,0,10}]

Nous pouvons par exemple prendre 1 comme première approximation :

FindRoot[eqnT2,{x,1}]

Vérifions notre solution :

{Cos[x],Log[x]}/.%

Il est important d’avoir une approximation de notre solution qui soit suffisamment proche de la solution, sinon Mathematica n’arrive pas à trouver la solution :

FindRoot[eqnT2,{x,4}]

{Cos[x],Log[x]}/.%

Méthode FindRoot[eqn, {x, x0, x1}]

Pour certaines équations coriaces, il peut être utile de donner deux approximations x0 et x1 de la solution. C’est ce que fait la méthode FindRoot[eqn,{x,x0,x1}] qui est une variation de la méthode de Regula Falsi.  Appliquons cette méthode au deuxième exemple d’équation transcendante.

FindRoot[eqnT2,{x,4,5}]

Les deux approximations de départ sont mauvaises, mais Mathematica arrive tout de même à trouver la solution.

§ 3.5 Exercices

Exercice 3 - P 1

D'un cône, on donne sa hauteur h et son aire totale A.
Calculez son rayon r en résolvant l'équation du problème 1 - P 1 avec Mathematica.

Indications
	Il s'agit d'un calcul littéral.
	Complétez l'équation par une condition afin de n'obtenir qu'une seule réponse.

Exercice 3 - P 2

D'un triangle rectangle, on connaît son aire A et la projection p d'une cathète sur l'hypoténuse.
Calculez les longueurs des trois côtés a, b, c en résolvant les équations du problème 1 - P 2 avec Mathematica.
Données numériques : A = 975, p = 20.

Exercice 3 - P 3

Une sphère homogène de rayon r = 0.3 m, de masse volumique (Subscript[ρ, 1])= 900 (kg/(m^3)) flotte sur un liquide de masse volumique (Subscript[ρ, 0])=1000 (kg/(m^3)).
Calculez la hauteur h de la partie émergeante en résolvant l'équation du problème 1 - P 3 avec Mathematica.

Exercice 3 - P 4

Une cuve cylindrique est posée horizontalement sur le sol. 
Donnée numérique r = 50.
Graduez une jauge, c'est-à-dire dessinez une bande de papier portant les graduations 10 %, 20 %, ... comme l'indique la figure ci-dessous.

a) Première version: résoudre les équations l'une après l'autre, sans utiliser de listes

Indications
	Il s'agit d'abord de résoudre 8 équations du problème 1 - P 4 et 
	de former la liste des angles qui correspondent à chaque graduation:
		(Subscript[α, 0])=0;
		(Subscript[α, 1]) est la solution de l'équation pour le taux de remplissage t = 0.1;
		(Subscript[α, 2]) est la solution de l'équation pour le taux de remplissage t = 0.2;
		(Subscript[α, 3]) est la solution de l'équation pour le taux de remplissage t = 0.3;
		(Subscript[α, 4]) est la solution de l'équation pour le taux de remplissage t = 0.4;
		(Subscript[α, 5])=π;
		(Subscript[α, 6]) est la solution de l'équation pour le taux de remplissage t = 0.6;
		(Subscript[α, 7]) est la solution de l'équation pour le taux de remplissage t = 0.7;
		(Subscript[α, 8]) est la solution de l'équation pour le taux de remplissage t = 0.8;
		(Subscript[α, 9]) est la solution de l'équation pour le taux de remplissage t = 0.9;
		(Subscript[α, 10])= 2 π.

Il s'agit ensuite de former la liste des hauteurs qui correspondent à chaque angle
		(Subscript[h, 0])=0;
		(Subscript[h, 1]) est la hauteur qui correspond à l'angle (Subscript[α, 1]);
		(Subscript[h, 2]) est la hauteur qui correspond à l'angle (Subscript[α, 2]);
		(Subscript[h, 3]) est la hauteur qui correspond à l'angle (Subscript[α, 3]);
		(Subscript[h, 4]) est la hauteur qui correspond à l'angle (Subscript[α, 4]);
		(Subscript[h, 5])= r;
		(Subscript[h, 6]) est la hauteur qui correspond à l'angle (Subscript[α, 6]);
		(Subscript[h, 7]) est la hauteur qui correspond à l'angle (Subscript[α, 7]);
		(Subscript[h, 8]) est la hauteur qui correspond à l'angle (Subscript[α, 8]);
		(Subscript[h, 9]) est la hauteur qui correspond à l'angle (Subscript[α, 9]);
		(Subscript[h, 10])= 2 r.

Il faut enfin dessiner une liste de traits horizontaux :

Show[Graphics[{	
				Line[{{0,h0},{5, h0}}], Line[{{0,h1},{5, h1}}], 
      			Line[{{0,h2},{5, h2}}], Line[{{0,h3},{5, h3}}],
      			Line[{{0,h4},{5, h4}}], Line[{{0,h5},{5, h5}}],
      			Line[{{0,h6},{5, h6}}], Line[{{0,h7},{5, h7}}], 
      			Line[{{0,h8},{5, h8}}], Line[{{0,h9},{5, h9}}], 
      			Line[{{0,h10},{5, h10}}], Text["0 %",{5,h0},{-1,0}],
				Text["10 %",{5,h1},{-1,0}], Text["20 %",{5,h2},{-1,0}], 
      			Text["30 %",{5,h3},{-1,0}], Text["40 %",{5,h4},{-1,0}], 
      			Text["50 %",{5,h5},{-1,0}], Text["60 %",{5,h6},{-1,0}], 
      			Text["70 %",{5,h7},{-1,0}], Text["80 %",{5,h8},{-1,0}], 
      			Text["90 %",{5,h9},{-1,0}], Text["100 %",{5,h10},{-1,0}]},
    			PlotRange->{{0,20},{-10,110}}, AspectRatio ->5]];

b) Deuxième version : écrire un programme plus compact en utilisant Table[...]

Exercice 3 - P 5

Pour rembourser un emprunt de 8'200 francs, une banque demande de verser 6 annuités de 2'000 francs
Calculez le taux d'intérêt i en résolvant l'équation du problème 1 - P 5 avec Mathematica.

Exercice de récapitulation

Un stère de bois (cube de 1 m de côté) est entassé contre une grande maison. A quelle distance x de la maison faut-il poser le pied d’une échelle de 10 m pour qu’elle s’appuie tant contre la façade que contre l’angle du tas de bois?

(a) Partie sans ordinateur

(i)	Déduire de l’énoncé que les valeurs possibles de x sont les zéros de la fonction 
		f(x)=(x-1)(Sqrt[100-(x^2)])-x,x∈[1,10].
(ii)	Déterminer la plus grande solution avec une erreur absolue inférieure 0.02 à l’aide de la méthode de la 
	bissection.
(iii)	Déterminer la plus  petite solution avec une précision de trois chiffres après la virgule à l’aide de la méthode 
	regula falsi.

(b) Partie avec ordinateur

(i)	L’itération de la fonction g(x)=f(x)+x converge-t-elle si on prend comme valeur initiale 1.5? 
	Argumenter à l’aide d’un graphique.
(ii)	Déterminer avec la méthode pseudo Newton les solutions du problème avec une précision de 5 chiffres après la 
	virgule.
(iii)	Déterminer avec une méthode appropriée de Mathematica les solutions du problème.

Réponses

(a)	(i) 	-
	(ii) 	(Subscript[x, max])≃(9.95±0.02) m
	(iii) 	(Subscript[x, min])≃1.112 m
(b)	(i) 	La méthode diverge
	(ii)	La méthode donne (Subscript[x, min])≃1.11188 m mais ne permet pas de trouver (Subscript[x, max]).
	(iii)	(Subscript[x, min])=(1/2) (1+(Sqrt[101])-(Sqrt[2 (49-(Sqrt[101]))]))≃1.111881931757237` m
		
(Subscript[x, max])=(1/2)+((Sqrt[101])/2)+(Sqrt[(1/2) (49-(Sqrt[101]))])≃9.937993689363653` m