Vous êtes sur la page 1sur 24

RSOLUTION D'QUATIONS ET D'INQUATIONS

Bernard Dupont

Bernard.Dupont@univ-lille1.fr

Rsoudre des quations et des inquations est le pain quotidien du modlisateur, thoricien ou
technicien. Ce chapitre est consacr pour l'essentiel l'utilisation des commandes universelles solve
et fsolve, respectivement ddies la rsolution exacte (section 1) et la rsolution approche (section
2) d'une quation. Pour les systmes d'quations, on utilise les mmes commandes, soit solve pour la
rsolution exacte (section 3) et fsolve pour la rsolution approche (section 4). Les inquations sont
aussi rsolues avec solve (section 5). Enfin on donne des complments indispensables pour mener
bien une rsolution, en particulier en conomie o les inconnues sont des rels alors que Maple
"travaille" systmatiquement dans le corps des complexes (section 6).

Rsolution exacte d'une quation


Soit F x = 0 une quation o x est inconnue. Si F est un polynme, La commande solve dispose
d'une batterie de possibilits pour la rsoudre dans le corps des nombres complexes. Dans le cas
contraire, une rsolution exacte est plutt l'exception que la rgle.

quation polynmiale
Les limites de Maple sont celles de la thorie mathmatique. Si le degr du polynme est
infrieur ou gal 4, il est thoriquement possible de donner une solution l'aide de radicaux.
Au del de 5, c'est exceptionnel.
Polynme de degr infrieur ou gal 3
La commande solve(Xp=0,x) o Xp est une expression polynmiale de degr infrieur
ou gal 3 de la variable x renvoie les racines relles et complexes.
> restart;
xp:=a*x+b=0;solve(xp,x);#polynme du premier degr
xp := a x Cb = 0
b
K
a
> xp2:=a*x^2+b*x+c=0;solve(xp2,x);#polynme "symbolique" du
second degr
xp2 := a x2 Cb x Cc = 0
1 Kb C b2 K4 a c 1 bC b2 K4 a c
,K
2 a 2 a
> xp3:=5*x^2+3*x+6=0;
solve(xp3,x);#polynme "numrique" du second degr
xp3 := 5 x2 C3 x C6 = 0

1
3 1 3 1
K C I 111 , K K I 111
10 10 10 10
Maple renvoie une squence compose ici de deux lments. On rcupre un lment de la
squence au moyen de l'oprateur d'indiage [numero] :
> %[1];%%[2];
3 1
K C I 111
10 10
3 1
K K I 111
10 10
Il est astucieux d'attribuer un nom la squence des racines puis d'isoler chacune d'elles en
les assignant :
> soluce:=solve(xp3,x);soluce1:=soluce[1];soluce2:=soluce[2]
;
3 1 3 1
soluce := K C I 111 , K K I 111
10 10 10 10
3 1
soluce1 := K C I 111
10 10
3 1
soluce2 := K K I 111
10 10
Si l'quation comporte des nombres flottants, Maple renvoie systmatiquement des solutions
sous forme de nombres flottants avec n chiffres significatifs, n tant paramtr par la variable
Digits:=n.
> xp4:=5.*x^2+3*x+6=0;Digits:=3;sol:=solve(xp4,x);sol1:=sol
[1];sol2:=sol[2];
xp4 := 5. x2 C3 x C6 = 0
Digits := 3
sol := K0.300 C1.05 I, K0.300 K1.05 I
sol1 := K0.300 C1.05 I
sol2 := K0.300 K1.05 I
Les principes sont les mmes pour des polynmes du troisime degr.
> xp5:=a*x^3+b*x^2+c*x+d=0;solve(xp5,x);#polynme
"symbolique" du troisime degr
xp5 := a x3 Cb x2 Cc x Cd = 0
1 1
36 c b a K108 d a2 K8 b3
6 a
1/3
3 2 2 2 2 3 2
C12 3 4 a c Kc b K18 c b a d C27 d a C4 d b a K 3ac
3

Kb2 a 36 c b a K108 d a2 K8 b3
1/3
3 2 2 2 2 3 1 b
C12 3 4 a c Kc b K18 c b a d C27 d a C4 d b a K ,
3 a
1 1
K 36 c b a K108 d a2 K8 b3
12 a
2
1/3
3 2 2 2 2 3 1
C12 3 4 a c Kc b K18 c b a d C27 d a C4 d b a C 3ac
3
2 2 3
Kb a 36 c b a K108 d a K8 b
1/3
3 2 2 2 2 3 1 b
C12 3 4 a c Kc b K18 c b a d C27 d a C4 d b a K
3 a
1 1 1
C I 3 36 c b a K108 d a2 K8 b3
2 6 a
1/3
3 2 2 2 2 3 2
C12 3 4 a c Kc b K18 c b a d C27 d a C4 d b a C 3ac
3

Kb2 a 36 c b a K108 d a2 K8 b3
1/3
C12 3 4 a c3 Kc2 b2 K18 c b a d C27 d2 a2 C4 d b3 a ,
1 1
K 36 c b a K108 d a2 K8 b3
12 a
1/3
1
C12 3 4 a c3 Kc2 b2 K18 c b a d C27 d2 a2 C4 d b3 a C 3ac
3
2 2 3
Kb a 36 c b a K108 d a K8 b
1/3
1 b
C12 3 4 a c3 Kc2 b2 K18 c b a d C27 d2 a2 C4 d b3 a K
3 a
1 1 1
K I 3 36 c b a K108 d a2 K8 b3
2 6 a
1/3
3 2 2 2 2 3 2
C12 3 4 a c Kc b K18 c b a d C27 d a C4 d b a C 3ac
3

Kb2 a 36 c b a K108 d a2 K8 b3
1/3
3 2 2 2 2 3
C12 3 4 a c Kc b K18 c b a d C27 d a C4 d b a
> xp6:=2*x^3+3*x^2-6*x+7=0;#les coefficients du polynme de
degr 3 sont des entiers
sol:=solve(xp6,x);
xp6 := 2 x3 C3 x2 K6 x C7 = 0
1 1/3 5 1 1 1/3
sol := K 21 C2 79 K 1/3
K , 21 C2 79
2 2 4
2 21 C2 79
5 1 1 1 1/3
C 1/3
K C I 3 K 21 C2 79
2 2 2
4 21 C2 79
5 1 1/3 5 1
C 1/3
, 21 C2 79 C 1/3
K
4 2
2 21 C2 79 4 21 C2 79

3
1 1 1/3 5
K I 3 K 21 C2 79 C 1/3
2 2
2 21 C2 79
> xp7:=2.*x^3+3*x^2-6*x+7=0;#le premier coefficient de ce
polynme du 3 degr est un nombre flottant
sol:=solve(xp7,x);
sol[1];sol[2];sol[3];#assignation des trois racines
3 2
xp7 := 2. x C3 x K6 x C7 = 0
sol := 0.716 C0.826 I, K2.93, 0.716 K0.826 I
0.716 C0.826 I
K2.93
0.716 K0.826 I

Polynmes de degr 4
Des nouveauts apparaissent :
> xp8:=a*x^4+b*x^3+c*x^2+d*x+e=0;sol:=solve(xp8,x);
xp8 := a x4 Cb x3 Cc x2 Cd x Ce = 0
sol := RootOf a _Z4 Cb _Z3 Cc _Z2 Cd _Z Ce
Par dfaut, Maple renvoie en cho une fonction RootOf, signifiant que les racines du
polynme de degr 4 sont .. les racines de ce polynme. C'est frustrant puisqu'en thorie il est
possible d'expliciter toutes les solutions l'aide de radicaux. Ceci tant, on peut forcer le
systme renvoyer les solutions en fixant son environnement avec l'instruction
_EnvExplicit:=true
> _EnvExplicit:=true;
xp9:=a*x^4+b*x^3+c*x^2+d*x+e=0;
sol:=solve(xp9,x):#l'affichage de la sortie est
volontairement bloqu.
_EnvExplicit := true
xp9 := a x4 Cb x3 Cc x2 Cd x Ce = 0
De fait, l'output dveloppe des dizaines de lignes peu digestes. Evidemment, si les
coefficients sont des nombres du type flottant, le problme ne se pose pas :
> xp10:=1.*x^4+5*x^3-5*x^2+2*x+6=0;sol:=solve(xp10,x);
xp10 := 1. x4 C5 x3 K5 x2 C2 x C6 = 0
sol := 0.811 C0.845 I, K0.744, K5.88, 0.811 K0.845 I

Polynmes de degr suprieur ou gal 5


Soit Maple parvient exprimer les racines l'aide de radicaux ou de fonctions
trigonomtriques, ce qui est tout fait exceptionnel, soit il rpond avec des fonctions RootOf.
> xp11:=x^8+x^4+1=0;solve(xp11,x);#polynme de degr 8 avec
des racines explicites
xp12:=x^7-1=0;solve(xp12,x);#polynme de degr 7 avec des
racines explicites
xp13:=x^5+3*x-1=0;solve(xp13,x);#polynme de degr 5 avec
des racines non explicites
4
8 4
xp11 := x Cx C1 = 0
1 1 1 1 1 1 1 1
K C I 3,K K I 3, C I 3, K I 3,
2 2 2 2 2 2 2 2
1 1 1 1
K 2 C2 I 3 , 2 C2 I 3 , K 2 K2 I 3 , 2 K2 I 3
2 2 2 2
7
xp12 := x K1 = 0
2 2 3 3 1
1, cos CI sin , Kcos CI sin , Kcos
7 7 7 7 7
1 1 1 3 3
CI sin , Kcos KI sin , Kcos KI sin ,
7 7 7 7 7
2 2
cos KI sin
7 7
5
xp13 := x C3 x K1 = 0
RootOf _Z5 C3 _Z K1, index = 1 , RootOf _Z5 C3 _Z K1, index = 2 , RootOf _Z5
C3 _Z K1, index = 3 , RootOf _Z5 C3 _Z K1, index = 4 , RootOf _Z5 C3 _Z
K1, index = 5
Maple signale qu'il existe 5 racines pour la dernire quation. La commande
_EnvExplicit:=true n'amliore pas l'information obtenue.
> _EnvExplicit:=true;solve(xp13,x);
_EnvExplicit := true
5 5 5
RootOf _Z C3 _Z K1, index = 1 , RootOf _Z C3 _Z K1, index = 2 , RootOf _Z
5 5
C3 _Z K1, index = 3 , RootOf _Z C3 _Z K1, index = 4 , RootOf _Z C3 _Z
K1, index = 5
Mais, ds que les coefficients sont tous des nombres du type flottant, toutes les racines sont
explicites :
> xp14:=x^5+3.*x-1=0;solve(xp14,x);
xp14 := x5 C3. x K1 = 0
0.332, 0.839 C0.944 I, K1.00 C0.937 I, K1.00 K0.937 I, 0.839 K0.944 I

quation non polynmiale


Maple peut rsoudre explicitement quelques quations non polynmiales. Lorsqu'il renvoie un
rsultat, il convient de se mfier car un certain nombre de racines peuvent tre absentes .. Il est
bon d'explorer le problme l'aide d'une reprsentation graphique.
> restart;
xp1:=sin(x)-1;
solve(xp1=0,x);
plot(xp1,x=-4*Pi..4*Pi);
xp1 := sin x K1
1

2

5
K10 K5 0 5 10
x

K0.5

K1

K1.5

K2
En ralit, l'quation admet une infinit de solutions sur son domaine de dfinition. Maple a
renvoy une racine et il faut rectifier ce rsultat en ajoutant l'expression bien connue " 2 k
prs".
Moralit : il faut tre extrmement vigilant et rigoureux quand on fait appel
l'instruction solve.
Explorons d'autres singularits de cette instruction.
Il se peut que Maple retourne la question pose sous la forme laconique RootOf alors que des
solutions existent :
> xp2:=tan(x)+x+1;solve(xp2=0,x);plot(xp2,x=-2*Pi..2*Pi,y=-5.
.5,discont=true);
xp2 := tan x Cx C1
RootOf tan _Z C_Z C1

6
4

y
2

K6 K4 K2 0 2 4 6
x

K2

K4

Des solutions complexes peuvent tre renvoyes alors qu'on attend des solutions relles : ce
phnomne provient du fait que Maple cherche des solutions dans le corps des complexes.
> xp3:=cos(3*x)+7*cos(x);solve(xp3=0,x);plot(xp3,x=-2*Pi..2*Pi)
;
xp3 := cos 3 x C7 cos x
1
arccos I , arccos KI ,
2

7
8

K6 K4 K2 0 2 4 6
x
K2

K4

K6

K8
En fait, la rsolution d'une quation non polynmiale doit tre gnralement mene comme on le
ferait " la main". De plus, il faut avoir l'esprit critique vis vis des rponses fournies par le
logiciel.

Rsolution approche d'une quation


La commande fsolve (abrviation de floating solve) permet de rsoudre numriquement les
quations. De nombreuses options permettent d'en amliorer les performances, notoirement
dcevantes quand elle est utilise de faon pure.

quation polynmiale
Soit F x = 0 une quation polynmiale o x est inconnue et tous les coefficients sont
numriques. En principe, fsolve(F(x)=0,x) retourne toutes les racines relles de l'quation.
> restart;xp1:=x^4-3*x^2+x+1;
fsolve(xp1=0,x);#fsolve affiche 4 racines relles
plot(xp1,x=-2..2);#vrification graphique du rsultat
xp1 := x4 K3 x2 Cx C1
K1.801937736, K0.4450418679, 1., 1.246979604
8
7

K2 K1 0 1 2
x
K1

K2

Si ncessaire, on peut restreindre l'intervalle de rsolution. Cette prcision affine la recherche de


solution. D'ailleurs, il arrive que Maple soit incapable de trouver une racine de l'quation quand
fsolve est utilise de faon pure et qu'il dtecte une racine en lui indiquant un intervalle.
> fsolve(xp1=0,x=-1..0.5);
K0.4450418679
Le thorme de Cayley-Hamilton garantit qu'une quation de degr n a n racines complexes. On
peut forcer Maple calculer toutes les racines, relles et complexes, en ajoutant l'option
complex :
> xp2:=x^4-3*x^2+x+sqrt(2);
fsolve(xp2=0,x);#pour afficher les racines relles
fsolve(xp2,x,complex);#pour afficher toutes les racines
xp2 := x4 K3 x2 Cx C 2
K1.764214201, K0.5632117414
K1.764214201, K0.5632117414, 1.163712971 K0.2627879113 I, 1.163712971
C0.2627879113 I

quation non polynmiale


9
Soit F x = 0 une quation non polynmiale o x est inconnue et tous les coefficients sont
numriques. Dans ce cas, fsolve(F(x)=0,x) retourne au plus une racine relle de
l'quation.
> restart;xp1:=sin(x)-x^2;#quation trancendentale
fsolve(xp1=0,x);#fsolve renvoie une racine
plot(xp1,x=-Pi..Pi);#la reprsentation graphique montre qu'il
y a deux racines.
2
xp1 := sin x Kx
0.

K3 K2 K1 0 1 2 3
x
K1

K2

K3

K4

K5

K6

K7

K8

K9

On aide Maple dtecter l'autre racine en intervenant sur l'intervalle de rsolution :


> fsolve(xp1=0,x=0.8..1.2);
0.8767262154
L'utilisation de l'option avoid est parfois indispensable pour la recherche de toutes les solutions
:
> xp2:=x^3-x+2-exp(x);sol1:=fsolve(xp2,x);#premire utilisation
de fsolve
plot(xp2,x=-10..10,y=-2..10,numpoints=250);
10
3 x
xp2 := x Kx C2 Ke
sol1 := 0.4875610348
10

K10 K5 0 5 10
x

K2
> sol2:=fsolve(xp2,x,avoid={x=sol1});#deuxime utilisation de
fsolve, en cartant la premire solution
sol2 := 4.451620297
> sol3:=fsolve(xp2,x=0..10,avoid={x=sol1,x=sol2});#troisime
utilisation de fsolve, en cartant la premire et la deuxime
solutions
sol3 := 1.806570269
> sol4:=fsolve(xp2,x=-infinity..0,avoid={x=sol1,x=sol2,x=sol3})
;#quatrime utilisation de fsolve, en cartant les solutions
prcdentes
sol4 := K1.481974815

Rsolution exacte d'un systme d'quations


La rsolution exacte d'un systme d'quations est encore effectue par la commande " tout faire"

11
solve(quations,inconnues) o equations est un ensemble ou une liste d'quations et
inconnues est un ensemble ou une liste d'inconnues. Il faut distinguer la rsolution des systmes
linaires des systmes non linaires.

Systmes linaires
En principe, Maple rsout tous les systmes linaires dont les coefficients sont des nombres.
> restart;
sol1:=solve({x+y+z=5,2*x+sqrt(2)*y-4*z=1,x-5*y=4},{x,y,z});
#la solution est exprime dans un ensemble
sol2:=solve([x+y+z=5,2*x+sqrt(2)*y-4*z=1,x-5*y=4],[x,y,z]);
#la solution est exprime dans une liste
2053 15 51 3 883 9
sol1 := x = C 2 , y=K C 2 , z= K 2
577 1154 577 1154 577 577
2053 15 51 3 883 9
sol2 := x = C 2 , y=K C 2 , z= K 2
577 1154 577 1154 577 577
Les quations sont crites entre accolades ou crochets ainsi que les inconnues. Le rsultat est lui
aussi entre accolades ou crochets. Pour Maple, tout lment ou squence d'lments entre
accolades reprsente un ensemble d'lments non ordonns. Il n'est pas possible de prvoir
l'ordre dans lequel vont apparatre les racines.
Au vu du rsultat, on peut rcuprer isolment les racines l'aide de subs :
> solx:=subs(sol1,x);soly:=subs(sol1,y);solz:=subs(sol1,z);
2053 15
solx := C 2
577 1154
51 3
soly := K C 2
577 1154
883 9
solz := K 2
577 577
ou rcuprer les solutions sous forme d'une liste ordonne (soit sous forme d'une squence
d'lments mis entre crochets) :
> ['solx','soly','solz']=subs(sol1,[x,y,z]);
2053 15 51 3 883 9
solx, soly, solz = C 2,K C 2, K 2
577 1154 577 1154 577 577
Quand le systme n'a pas de solution, Maple renvoie une squence vide :
> sol3:=solve({2*x+y=1,2*x+y=5},{x,y});
sol3 :=
Quand le systme admet une infinit de solutions (cas o les quations sont linairement
dpendantes), Maple renvoie une solution sous forme paramtrique dans laquelle une ou
plusieurs inconnues servent de paramtres :
> sol4:=solve({x+y+z=1,2*x+2*y+2*z=2,x-y+2*z=4},{x,y,z});
sol4 := x = K2 K3 y, y = y, z = 3 C2 y
En ce qui concerne les systmes dans lesquels certains ou tous les coefficients sont des
paramtres, Maple cherche une solution "gnrale" qui ne tient pas compte des cas particuliers. Il
convient alors d'tre trs vigilant.
> sol5:=solve({a*x+y=1,x+a*y=1},{x,y});
12
1 1
sol5 := x = ,y=
a C1 a C1
La solution gnrale fournie ici n'est pas correcte pour a = 1 (car, dans ce cas, les quations sont
linairement dpendantes) et pour a = K1 (car alors le dnominateur est nul, ce qui est
impossible). Il faut tudier part ces deux cas :
> sys:={a*x+y=1,x+a*y=1};
soluce_1:=solve(subs(a=1,sys),{x,y});
soluce_2:=solve(subs(a=-1,sys),{x,y});
sys := x Ca y = 1, a x Cy = 1
soluce_1 := x = Ky C1, y = y
soluce_2 :=

Systmes non linaires


Nous sommes dans le rgne du (quasi) arbitraire. Certains systmes sont solubles et Maple
renvoie la solution correcte :
> restart;
solve({x+2*y=4,x*y=2},{x,y});
x = 2, y = 1 , x = 2, y = 1
D'autres sont solubles, mais Maple renvoie une solution dcevante :
> solve({3*x+2*y=4,x*y=2},{x,y});
2 2
x = 2 RootOf 3 _Z K2 _Z C1, label = _L2 , y = K3 RootOf 3 _Z K2 _Z C1, label
= _L2 C2
> evalf(%);#on force l'valuation, mais Maple ne reconnat pas
2/3 et sqrt(2)
x = 0.6666666666 C0.9428090416 I, y = 1.000000000 K1.414213562 I
Signalons enfin que l'instruction solve a t programme pour tre performante sur les sytmes
symtriques :
> restart;solve({x+y+z=6,x^2+y^2+z^2=14,x*y*z=6},{x,y,z});
x = 3, y = 1, z = 2 , y = 1, x = 2, z = 3 , x = 3, y = 2, z = 1 , x = 1, y = 2, z = 3 , x = 2,
z = 1, y = 3 , x = 1, z = 2, y = 3

Rsolution approche d'un systme d'quations


Comme pour la rsolution d'quations, on utilise la commande fsolve pour rsoudre
numriquement un systme d'quations. Le premier argument est un ensemble de n quations. Le
second argument est un ensemble de n inconnues. Certaines options permettent d'affiner la
recherche.
> restart;
fsolve({y^2-x=0,y-x^2+4*x-2=0},{x,y});
x = 2.618033989, y = K1.618033989
Une reprsentation graphique du problme permet d'aider le travail de Maple :
> plot({sqrt(x),-sqrt(x),x^2-4*x+2},x=-1..5,y=-2.5..2.5);

13
2

y
1

K1 0 1 2 3 4 5
x

K1

K2

On prcise dans un troisime argument le voisinage dans lequel Maple doit chercher une solution :
> fsolve({y^2-x=0,y-x^2+4*x-2=0},{x,y},{x=0.2..0.8,y=0.2..0.8});
x = 0.3819660113, y = 0.6180339887
> fsolve({y^2-x=0,y-x^2+4*x-2=0},{x,y},{x=0.8..1.2,y=-1.2..-0.8})
;
x = 1.000000000, y = K1.000000000
> fsolve({y^2-x=0,y-x^2+4*x-2=0},{x,y},{x=3.8..4.2,y=1.8..2.2});
x = 4.000000000, y = 2.000000000
Cet exemple n'a bien entendu aucune valeur universelle. Chaque cas un peu tordu est un cas
d'espce tudier avec beaucoup de patience et de rigueur.

Rsolution d'inquations
Maple peut rsoudre certaines inquations et mme certains systmes d'inquations une variable
l'aide de solve. Les symboles d'ingalits reconnus par le logiciel sont : strictement infrieur : <;
strictement suprieur >: ; infrieur ou gal : <=; suprieur ou gal : >=. Au passage, signalons
que l'oprateur "diffrent de" s'crit : <> .

14
Inquation une variable
L'exemple suivant familiarise avec la syntaxe et montre comment Mape exprime que le rsultat
est la runion d'intervalles ouverts de = :
> restart;
P:=x^3+4*x^2+2*x-1;solve(P>0,x);solve(P<0,x);
P := x3 C4 x2 C2 x K1
3 1 3
RealRange Open K K 13 , Open K1 , RealRange Open K
2 2 2
1
C 13 , N
2
3 1 3
RealRange KN, Open K K 13 , RealRange Open K1 , Open K
2 2 2
1
C 13
2
Une reprsentation graphique permet de s'assurer de la justesse du rsultat :
> plot(P,x=-4..1);
6

K4 K3 K2 K1 0 1
x
K2

K4

K6

K8

Si on dsire voir figurer explicitement la variable x dans la rponse, il faut mettre en accolades
15
l'inquation et la variable :
solve({P>0},{x});solve({P<0},{x});
3 1 3 1
x ! K1, K K 13 ! x , K C 13 ! x
2 2 2 2
3 1 3 1
x!K K 13 , K1 ! x, x ! K C 13
2 2 2 2

Systme d'inquations linaires deux inconnues


La commande solve permet de "rsoudre" des systmes d'inquations deux inconnues.
> restart;solve({x+y>0, x-y<=1},{x,y});
1 1
x % , Kx ! y , K1 Cx % y, !x
2 2
> solve({x+2*y=3, y+1/x>1}, {x,y});
1 3
x = K2 y C3, ! y, y ! , x = K2 y C3, 2 ! y
2 2
Mais Maple offre surtout l'avantage spectaculaire d'obtenir une reprsentation graphique de
l'ensemble des solutions possibles ("faisables") par l'instruction inequal du paquetage plots.
Sa syntaxe est inequal(ineqs, xspec, yspec, options) o ineqs est un systme
d'inquations crit sous forme d'ensemble (donc, entre accolades); xspec prcise l'intervalle de
la variable x et yspec celui de y. Le graphe contient 4 lments :
L'ensemble faisable (feasible region), qui runit les zones pour lesquelles toutes les ingalits
sont satisfaites;
L'ensemble exclu (excluded regions), qui runit les zones o au moins une ingalit n'est pas
respecte;
Les lignes "ouvertes" (open lines) qui sont les frontires des ingalits strictes;
Les lignes "fermes" (closed lines) qui sont les frontires des ingalits larges et incluent les
sommets.
Ces lments sont paramtrables en options sous la forme : optionsnom=(suite
d'options de plot). Les optionsnom sont les suivants : optionsfeasible,
optionsexcluded, optionsopen, et optionsclosed. Les options concernent surtout
la colorisation des surfaces et des droites.
> restart;
with(plots):#chargement du paquetage
inequal( { x+y>0, x-y<=1}, x=-3..3, y=-3..3 );#aucune option
inequal( { x+y>0, x-y<=1}, x=-3..3, y=-3..3,
optionsexcluded=(color=blue,thickness=2) );#colorisation
en bleu de la zone exclue

16
3

K3 K2 K1 0 1 2 3

K1

K2

K3

17
3

K3 K2 K1 0 1 2 3

K1

K2

K3
> inequal( { x+y>0, x-y<=1,y=2}, x=-3..3, y=-4..4,
optionsfeasible=(color=red),
optionsopen=(color=blue,thickness=2),
optionsclosed=(color=green, thickness=3),
optionsexcluded=(color=yellow) );#utilisation de toutes
les options

18
4

K3 K2 K1 0 1 2 3

K1

K2

K3

K4

Complments indispensables
L'conomiste sera parfois du par les rsultats bruts qu'apporte la commande solve. La premire
raison est que Maple recherche les solutions d'une quation ou d'un systme d'quations dans le
corps des nombres complexes alors que les variables conomiques sont "naturellement" relles. La
seconde tient au fait que les quations conomiques sont souvent thoriques et font intervenir des
paramtres soumis des hypothses que le logiciel ne prend pas en compte. Cette section donne des
indications sur la manire de, sinon surmonter, du moins contourner ces difficults. Elle prsente
galement quelques astuces pour amliorer la recherche et le traitement des solutions.

Suivre les tapes d'une rsolution avec infolevel[solve]


En cas de besoin, on peut suivre les tapes de rsolution par lesquelles passe solve en
introduisant la commande infolevel[solve]:=N, o N est le niveau d'informations
demand (en pratique, N=3 suffit).
> restart;
infolevel[solve]:=3;
solve(cos(x^3)-6*x=0,x);

19
infolevelsolve := 3
LinearEq: computing pseudo sub-resultant 20 16 x
PseudoResultant: computing pseudo resultant with lengths 20
16 x
PseudoResultant: resultant computed and factored length = 29
1 3
cos RootOf 216 _Z Kcos _Z
6

Rcupration des solutions


La rcupration des solutions est tout un art qu'il faut matriser car ces solutions feront
gnralement l'objet de manipulations immdiates : rinjection dans d'autres quations,
exploitation des fins graphiques, traitements analytiques, etc.. A bien des gards, il est
prfrable de procder des assignations en donnant la ou les solutions un nom distinctif.
Cas de la rsolution d'une quation
Pour une quation, Maple renvoie une suite (sequence) de solutions. Il est ais de rcuprer
chaque solution aprs avoir pris la prcaution d'assigner l'output.
> restart;
soluce:=solve(x^4-a=0,x);#les solutions sont assignes
l'identificateur : soluce
sol_1:=soluce[1];
sol_2:=soluce[2];
sol_3:=soluce[3];
sol_4:=soluce[4];
1/4 1/4 1/4 1/4
soluce := a , I a , Ka , KI a
sol_1 := a1/4
sol_2 := I a1/4
sol_3 := Ka1/4
sol_4 := KI a1/4
Quand on ignore a priori le nombre de solutions, on peut utiliser le petit programme suivant
pour obtenir automatiquement l'assignement des solutions.
> for k from 1 to nops([soluce]) do
sol[k]:=soluce[k]
end do;
sol1 := a1/4
sol2 := I a1/4
sol3 := Ka1/4
sol4 := KI a1/4

Cas d'un systme d'quations


Dans le cas de la rsolution d'un systme d'quations, Maple retourne une suite/sequence
d'ensembles/sets donnant les solutions sous la forme d'quations. L'ordre des ensembles varie
20
d'un ordinateur l'autre et mme, pour un mme ordinateur, d'une session l'autre. Quand il
s'agit d'un systme linaire, ce n'est pas gnant puisqu'on s'attend ce que la solution soit
unique. En revanche, pour un systme non linaire, il faut procder avec prudence.
Dans le cas d'un systme linaire, la commande assign assigne chaque variable inconnue
sa solution. Autrement dit, elle transforme les galits figurant dans la solution renvoye par
solve en une assignation multiple.
> sys:={2*x+3*y=1,x+2*y=0};
var:={x,y};
sol:=solve(sys,var);
assign(sol);
sys := x C2 y = 0, 2 x C3 y = 1
var := x, y
sol := x = 2, y = K1
La commande assign ne renvoie pas d'cho, mais l'assignation a bien t faite :
> x;y;
2
K1
Dans le cas d'un systme non linaire, la commande assign assigne chaque variable
inconnue la dernire solution figurant dans la solution revoye par solve.
> restart;sys:={x-1=0,y^2-x=0};var:={x,y};sol:=solve(sys,
var);assign(sol);x;y;
sys := x K1 = 0, y2 Kx = 0
var := x, y
sol := x = 1, y = 1 , x = 1, y = K1
1
K1
Autant dire que l'assignation est alatoire. Le petit programme suivant, qui repose sur les
proprits de la commande subs, permet de rcuprer systmatiquement toutes les solutions,
mme si on ignore a priori leur nombre.
> for k from 1 to nops([sol]) do
sol_x[k],sol_y[k]:=subs(sol[k],x),subs(sol[k],y);
#assignation "multiple"
end do;
'sol_x[1]'=sol_x[1];#rcupration et documentation d'un
rsultat particulier
'sol_x[2]'=sol_x[2];#idem
'sol_y[1]'=sol_y[1];#idem
'sol_y[2]'=sol_y[2];#idem
sol_x1, sol_y1 := 1, 1
sol_x2, sol_y2 := 1, K1
sol_x1 = 1

21
sol_x2 = 1
sol_y1 = 1
sol_y2 = K1

Vrification des rsultats


Pour vrifier qu'une solution est correcte, il suffit de l'injecter dans l'quation ou le systme
d'quations de dpart et regarder si on obtient ou non une identit.
> restart;sys:={x-1=0,y^2-x=0};var:={x,y};sol:=solve(sys,var);
#tape de rsolution
for k from 1 to nops([sol]) do
sol_x[k],sol_y[k]:=subs(sol[k],x),subs(sol[k],y);
end do;#tape de rcupration des solutions
subs({x=sol_x[1],y=sol_y[1]},sys);#tape de vrification
subs({x=sol_x[2],y=sol_y[2]},sys);
sys := x K1 = 0, y2 Kx = 0
var := x, y
sol := x = 1, y = 1 , x = 1, y = K1
sol_x1, sol_y1 := 1, 1
sol_x2, sol_y2 := 1, K1
0 =0
0 =0
La commande evalb (pour evaluate as a boolean expression) peut tre utilise conjointement
avec subs. La rponse est true si le test de vrification est men avec succs, false sinon.
> evalb(op(subs({x=sol_x[1],y=sol_y[1]},sys)));
true
Alternativement, on invoquera eval.
> eval(sys,{x=sol_x[1],y=sol_y[1]});
0 =0
Un thme connexe la vrification est celui de l'exploration des solutions potentielles. Il est en
effet possible que Maple ne retourne pas de solution ou retourne une partie des solutions alors
qu'il se peut qu'elles existent ou qu'il en existe d'autres. Il affiche alors l'avertissement :
Warning, solutions may have been lost. Pour confirmer, il faut intercaler la
variable globale _SolutionsMayBeLost;. Si la rponse est true, il se peut que des solutions
existent. Sinon, il reste peu d'espoir.
> restart;eq:=cos(sqrt(x))-x^2=0;sol:=solve(eq,x);#Maple ne
sait pas rsoudre cette quation
_SolutionsMayBeLost;#Maple sconfirme que des solutions
peuvent exister
eq := cos x Kx2 = 0
Warning, solutions may have been lost
sol :=
22
true

Incompatibilit de solve et assume


2
Soit l'quation simple x K3 = 0, dont on veut connatre la solution positive. Le premier rflexe
est de poser une hypothse sur x.
> restart;
assume(x>0);
solve(x^2-3=0,x);
Warning, solve may be ignoring assumptions on the input
variables.
3,K 3
L'exemple est loquent : la commande solve ne tient - malheureusement - jamais compte des
contraintes poses sur la variable inconnue. On peut lever cette limitation en demandant la
rsolution d'un systme form de l'quation de dpart et de l'inquation exprimant la contrainte.
> solve({x^2-3=0,x>0},x);
Warning, solve may be ignoring assumptions on the input
variables.
x~ = 3
En revanche, assume prend en compte les hypothses faites sur les paramtres quand l'quation
rsoudre est symbolique.
> restart;assume(s>0,n>0,alpha>0,alpha<1);
solve({s*k^(alpha)-n*k=0,k>0},{k});# la recherche de la
golden rule d'accumulation du capital
simplify(%,exp);
s~
ln
n~
K
~ K 1
k=e
1
K
~ K 1
s~
k=
n~

Rsolution d'une quation dans


En conomie, on recherche la ou les solutions relles d'une quation ou d'un systme d'quations.
Maple, quant lui, rsout dans le corps des complexes et retourne des solutions sans intrt pour
l'conomiste, qui est contraint de trier les rsultats. Un moyen simple, mais faillible, de forcer le
logiciel ne retenir que les solutions relles consiste adjoindre l'quation tudie l'inquation
x<infinity et placer ces deux conditions entre accolades. Parfois, ce procd marche, parfois
il ne marche pas.
> restart;
solve(x^3=1,x);
solve({x^3-1=0,x<infinity},x);
solve(x^4=1,x);
23
solve({x^4=1,x<infinity},x);

1 1 1 1
1, K C I 3,K K I 3
2 2 2 2
x=1
1, K1, I, KI
x = 1 , x = K1
Le programmme de tri suivant conserve les solutions relles en cartant les solutions dont la
partie imaginaire est diffrente de 0. Il n'est utile que si Maple sait expliciter les solutions avec la
commande allvalues comme dans l'exemple qui suit. Ce n'est malheureusement pas toujours
le cas.
> sol:=map(allvalues,{solve(x^3-1=0,x)});#reprise de l'exemple
ci-dessus
#dbut du programme de tri
S:={}:
for j from 1 to nops(sol) do
if Im(sol[j])=0 then S:=S union {sol[j]} else S:=S end if;
end do;
S;
1 1 1 1
sol := 1, K K I 3,K C I 3
2 2 2 2
1
Dans l'exemple suivant, allvalues ne parvient pas expliciter les solutions. Les tests ne
peuvent donc pas aboutir.
> sol:=map(allvalues,{solve(x^5-2*x^3+10=0,x)});
S:={}:
for j from 1 to nops(sol) do
if Im(sol[j])=0 then S:=S union {sol[j]} else S:=S end if;
end do;
S;
5 3 5 3
sol := RootOf _Z K2 _Z C10, index = 1 , RootOf _Z K2 _Z C10, index = 2 ,
5 3 5 3
RootOf _Z K2 _Z C10, index = 3 , RootOf _Z K2 _Z C10, index = 4 ,
5 3
RootOf _Z K2 _Z C10, index = 5
RootOf _Z5 K2 _Z3 C10, index = 3

24