Une fois démontré que a est solution de a^4-159*a^2+840*a-588=0, le candidat devait donc résoudre cette équation !
Les rédacteurs supposent donc qu'un très bon élève de Terminale S est capable de mettre en œuvre la
Méthode de Ferrari pour autant que le delta ait une racine "repérable", à moins de trouver une solution astucieuse à ce problème ?
Finalement c'est un bon sujet de recherche en classe de TermS.
J'en ai profité pour chercher une fonction qui ferait ce travail,peut-être celle-ci:
Code : Tout sélectionner
NoRootof(L):={//à l'essai,facultatif,pour simplifier sans rootof
local temp,k;
temp:=NULL;
pour k de 0 jusque size(L)-1 faire
si lvar(simplifier(L)[k])!=[] alors
temp:=temp,sommet(lvar(simplifier(L)[k])[0])
fsi;
fpour
si member('rootof',temp) alors
retourne L;
sinon
retourne simplifier(L)
fsi;
}
:;
enlabs(E):={
//E=sqrt(cste) ou sqrt(cste*(binôme)^2) par ex sqrt(-5*(x+1)^2/4)
local temp,sol,a;
sol:=solve(E);
si sol==[] ou sol==[x] alors
retourne E
sinon
a:=sol[0];
supposons(x>a);
temp:=evalc(E);
purge(x);
retourne temp;//(i)*((sqrt(5)*x)/2+(sqrt(5))/2)
fsi;
}
:;
Ferrari(P):={//P polynôme de degré 4
local E,P2,u,F,L,delta,sol,k,v,S,E1,E2,a;
//E sous forme x^4+ax^2+bx+c
E:=normal(normal(subst(P,x=x-coeff(P,x,3)/(4*coeff(P,x,4))))/coeff(P,x,4));
P2:=poly2symb(tail(tail(coeff(-E))));
purge(u);
F:=op(reorder((x^2+u)^2,[x,u]));
F[0]:=P2;
F:=sum(F);
L:=coeff(F,x);
delta:=L[1]^2-4*L[0]*L[2];//polynôme de degré 3 en u
sol:=solve(delta,u);
afficher(sol);
//tester si sol contient un rationnel
si a:=member(DOM_RAT,apply(x->type(x),sol)) alors
v:=sol[a-1];
sinon
si a:=member(DOM_INT,apply(x->type(x),sol)) alors
v:=sol[a-1];
sinon
retourne round(csolve(P),4);
fsi;
fsi;
//S:=eval(simplifier(sqrt(factor(subst(F,u=v)))));
S:=simplifier(sqrt(factor(subst(F,u=v))));
afficher(factor(subst(F,u=v)));//cste*(binôme)^2 ou cste
afficher(S);//avec valeur absolue éventuelle
S:=enlabs(S);//sans valeur absolue
afficher(S);//pour vérifier que S est sans valeur absolue
E1:=subst(x^2+u,u=v)-S;
E2:=subst(x^2+u,u=v)+S;
afficher(E1);afficher(E2);//pour vérifier les équations
//au choix ligne 64 ou 66
//retourne apply(t->t-coeff(P,x,3)/(4*coeff(P,x,4)),csolve(E1) union csolve(E2));//ne pas simplifier
//si nécessaire faire simplifier(ans()) ou evalc(ans()) dans un autre niveau ou:
retourne NoRootof(apply(t->t-coeff(P,x,3)/(4*coeff(P,x,4)),csolve(E1) union csolve(E2)));//à l'essai
}
Il ne reste plus qu'à prendre la racine comprise entre 0 et 1 dans la liste retournée par Ferrari:
select(t->(t>0 and t<1),Ferrari(subst(a^4-159*a^2+840*a-588,a=x)))
La fonction Norootof ne présentant pas d'intérêt, il vaut mieux se contenter de ceci:
Code : Tout sélectionner
enlabs(E):={
//E=cste ou cste*abs(binôme) par ex -3 ou 5*i*abs(x+1)/4
local temp,sol,a;
sol:=solve(E);
si sol==[] ou sol==[x] alors
retourne E
sinon
a:=sol[0];
supposons(x>a);
temp:=eval(E);
purge(x);
retourne temp;//-3 ou 5*i*(x+1)/2
fsi;
}
:;
Ferrari(P):={//P polynôme de degré 4
local E,P2,u,F,L,delta,sol,k,v,S,E1,E2,T,a;
//E sous forme x^4+ax^2+bx+c
E:=normal(normal(subst(P,x=x-coeff(P,x,3)/(4*coeff(P,x,4))))/coeff(P,x,4));
P2:=poly2symb(tail(tail(coeff(-E))));
purge(u);
F:=op(reorder((x^2+u)^2,[x,u]));
F[0]:=P2;
F:=sum(F);
L:=coeff(F,x);
delta:=L[1]^2-4*L[0]*L[2];//polynôme de degré 3 en u
sol:=solve(delta,u);
afficher(sol);
//tester si sol contient un rationnel
si a:=member(DOM_RAT,apply(x->type(x),sol)) alors
v:=sol[a-1];
sinon
si a:=member(DOM_INT,apply(x->type(x),sol)) alors
v:=sol[a-1];
sinon
retourne round(csolve(P),4);
fsi;
fsi;
S:=evalc(sqrt(factor(subst(F,u=v))));
afficher(factor(subst(F,u=v)));//cste*(binôme)^2 ou cste
afficher(S);//avec valeur absolue éventuelle
S:=enlabs(S);//sans valeur absolue
afficher(S);//pour vérifier que S est sans valeur absolue
E1:=subst(x^2+u,u=v)-S;
E2:=subst(x^2+u,u=v)+S;
afficher(E1);afficher(E2);//pour vérifier les équations
retourne apply(t->t-coeff(P,x,3)/(4*coeff(P,x,4)),csolve(E1) union csolve(E2));//ne pas simplifier
//si nécessaire faire simplifier(ans()) ou evalc(ans()) dans le niveau du dessous
}
J'ai testé avec des polynômes ayant 4 racines de la forme A,B,C,D suivantes:
A:=a*sqrt(k)+sqrt(b-c*sqrt(k));B:=a*sqrt(k)-sqrt(b-c*sqrt(k));C:=-a*sqrt(k)+sqrt(b+c*sqrt(k));D:=-a*sqrt(k)-sqrt(b+c*sqrt(k));
Q1:=reorder(normal((x-A)(x-B)(x-C)(x-D)),[x])
Q2:=normal(subst(Q1,[a,b,c,k],[-1,3,-2,7]))
P:=normal(subst(Q2,x=x+1))
csolve(P)
F:=Ferrari(P)
simplifier(F)
evalc(F)
Puis avec avec des polynômes ayant 4 racines de la forme A,B,C,D suivantes:
A:=sqrt(a)+sqrt(b)+sqrt(a*b);B:=sqrt(a)-sqrt(b)-sqrt(a*b);C:=-sqrt(a)+sqrt(b)-sqrt(a*b);D:=-sqrt(a)-sqrt(b)+sqrt(a*b);
Q1:=(normal(reorder((x-A)(x-B)(x-C)(x-D),[x]))
Q2:=normal(subst(Q1,[a,b],[2,3]))
P:=normal(subst(Q2,x=x+1))
csolve(P)
F:=Ferrari(P)
simplifier(F)
evalc(F)