Intersection d'un cercle et d'une hyperbole

Utilisation de Xcas au lycée (sauf algorithmique), y compris projet d'epreuve pratique en Terminale S

Modérateur : xcasadmin

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Intersection d'un cercle et d'une hyperbole

Message par alb » mer. avr. 06, 2011 10:50 am

Mon problème est le suivant:
Soit 0<x<1,0<y<1,a>0
Trouver avec Xcas la valeur exacte de a (ou de a^2 si c'est plus simple) sachant que:
(x-6)^2+(y-5)^2=49,x(x-6)=y(y-5),a^2=x^2+y^2
NB: j'aimerais rester au niveau d'une classe de TermS et ne pas les perdre dans les méandres de Ferrari/Cardan.

1/ point de vue graphique:
cercle((x-6)^2+(y-5)^2=49);
implicitplot(x(x-6)-y(y-5));

2/ méthode approchée:
supposons(x>0 and x<1);
supposons(y>0 and y<1);
supposons(a>0);
solve([(x-6)^2+(y-5)^2-49,x(x-6)-y(y-5),a^2-x^2-y^2],[x,y,a])
me renvoie les approximations de x,y,a.
Le warning fait référence à deux polynômes.
Le second semble être le polynôme ayant a pour racine.
A quoi correspond le premier ?
Pouquoi les polynômes ayant x et y pour racines n'apparaissent-ils pas ?

3/ J'obtiens ces deux polynômes en faisant:
resultant((x-6)^2+(y-5)^2-49,x(x-6)-y(y-5),y)
resultant((x-6)^2+(y-5)^2-49,x(x-6)-y(y-5),x)

D'où ma question:
Comment obtenir le polynôme ayant a pour racine ?
Avec ce polynôme on peut trouver a car le delta de Ferrari de degré 3 a une racine entière.

On peut peut-être obtenir a par une méthode plus directe ?

parisse
Messages : 5734
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Intersection d'un cercle et d'une hyperbole

Message par parisse » mer. avr. 06, 2011 11:11 am

les polynomes en x et y n'apparaissent pas parce que a a deja ete remplace par une valeur approchee, donc x et y sont cherches en approx (d'ou pas de warning). Pour trouver l'equation en a directement:
S:=resultant(a^2-(x^2+y^2),(x-6)^2+(y-5)^2-49,y);
T:=resultant(a^2-(x^2+y^2),x(x-6)-y(y-5),y);
factor(resultant(S,T,x));
mais ca me parait un peu pousse pour des eleves de TS.
Ensuite comme pour toute equation de degre 4, on peut la resoudre par radicaux, mais ca n'a pas tellement d'interet: du point de vue calcul formel, on preferera un rootof (beaucoup plus facile a manier), et du point de vue numerique on preferera une methode iterative pour approcher les racines (type Newton).

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Intersection d'un cercle et d'une hyperbole

Message par alb » ven. avr. 08, 2011 9:37 pm

C'est en fait le premier exercice du concours général 2011.
Cet exercice se présente sous la forme d'un dessin.
Je pense que le script suivant ne trahit pas l'énoncé (le copier dans un niveau de géométrie):

Code : Tout sélectionner

legende([150,150],"OEFG est un rectangle");
legende([150,170],"ABCD est un rectangle intérieur à OEFG");
legende([150,190],"il s'agit de trouver la valeur maximale de a");
O:=point(0,affichage=quadrant3);
E:=point(6,affichage=quadrant4);
F:=point(6+5i);
G:=point(5i);
rectangle(O,E,F);
supposons(t=[0.516,0,6,0.001]);
A:=point(t,'affichage'=quadrant4);
B:=point(6+i*(sqrt(49-((6-t)^2))));
legende(milieu(A,B),"7",quadrant2);
segment(A,B);
p:=perpendiculaire(B,droite(A,B));
C:=inter_unique(p,droite(F,G),affichage=quadrant2);
legende(milieu(C,F),"x");
legende(milieu(B,F),"y");
legende(milieu(B,E),"5-y");
rectangle(A,B,C,D,affichage=rouge+epaisseur_ligne_3);
legende((t+abscisse(D))/2,"x",quadrant3);
segment(D,abscisse(D));
legende(milieu(D,abscisse(D)),"y",quadrant2);
legende(milieu(A,D),"a");
abscisse(D);
ordonnee(D);
longueur(A,D);
si abs(abscisse(D))<0.001 alors legende(milieu(A,E),"6-x",quadrant3) fsi;
La suite au prochain épisode.

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Intersection d'un cercle et d'une hyperbole

Message par alb » mer. avr. 13, 2011 9:39 pm

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)
Dernière modification par alb le jeu. avr. 21, 2011 4:25 pm, modifié 3 fois.

parisse
Messages : 5734
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: Intersection d'un cercle et d'une hyperbole

Message par parisse » jeu. avr. 14, 2011 8:27 am

je ne connais pas les conditions de passage de ce type d'epreuve, et je n'ai pas regarde l'enonce, mais peut-etre que les redacteurs du probleme s'attendaient a l'usage d'un polynomial rooter sur calculatrice?

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: Intersection d'un cercle et d'une hyperbole

Message par alb » jeu. avr. 14, 2011 7:20 pm

L'énoncé et un corrigé se trouvent ici
Pour le correcteur l'élève devait trouver la racine entière -42 en programmant sa "calculatrice de poche".

Répondre