Pour construire et/ou vérifier des exercices du type
Résoudre ln(x*(x-1)*(x-2))=ln(5)+ln((x+1)*(x-3)) dans l'intervalle -inf..4
j'ai d'abord envisagé de détecter le contenu des ln. Trop compliqué !
Finalement j'ai décidé de demander à l'utilisateur d'entrer à la main les conditions de validité.
Voici ce que je propose:
Code : Tout sélectionner
ResoudreLog(E,F,a,b):={ // préciser les bornes a et b éventuellement -inf ou inf
local sol,L,res,temp,k,l,j,X,A,B;
ClrGraph;
A:=a;B:=b;
si A==-inf alors A:=-20 fsi;
si B==inf alors B:=20 fsi;
plot([E,F],x=A..B,couleur=[rouge,bleu],legende=["E","F"]);//graphes dans la fenêtre DispG
sol:=solve(E=F);
temp:=NULL;
pour j de 0 jusque size(sol)-1 faire //boucle pour éliminer les solutions hors de a..b
si sol[j]>=a and sol[j]<=b alors
temp:=temp,sol[j];
sinon
afficher(sol[j]+" n'est pas dans l'intervalle ["+a+","+b+"]")
fsi;
fpour;
sol:=[temp];
saisir("écrire les expressions qui doivent être strictement positives
sous la forme e1,e2,..ou NULL s'il n'y a pas de condition",L);
L:=[L];
si size(L)==0 ou size(sol)==0 alors
return sol;
sinon
res:=NULL;
pour k de 0 jusque size(sol)-1 faire
X:=0;
pour l de 0 jusque size(L)-1 faire
si subst(L[l],x=sol[k])>0 alors
X:=X+1;
fsi;
fpour;
si X==size(L)alors
res:=res,sol[k]
sinon
afficher(sol[k]+" ne convient pas")
fsi;
fpour;
return [res];
fsi;
}
:;
supposons(x>=a and x<=b);sol:=solve(E=F);
Malheureusement dans la fonction le supposons n'est pas pris en compte.
D'où ma première question: Pourquoi ?
J'ai alors opté pour une boucle qui élimine les solutions qui ne sont pas dans l'intervalle de résolution.
Du coup un exemple comme
ln(cos(x))=-ln(2) dans l'intervalle -4*pi..4*pi
ne marche pas avec All_trig_sol coché.
D'où ma seconde question: comment faire pour renvoyer les solutions de -4*pi..4*pi ?
NB:c'est un peu vite fait et je n'ai regardé que 3 exemples, il se peut qu'il y ait pas mal de grosses fautes.
Merci de me les signaler.