Inéquation du second degré

Discussion sur l'enseignement de l'algorithmique avec Xcas au lycee
alb
Messages : 1229
Inscription : ven. août 28, 2009 3:34 pm

Inéquation du second degré

Message par alb » mar. févr. 22, 2011 4:29 pm

Une idée d'exercice possible en Première:
Donner le texte du programme ci-dessous en omettant les variables derrière les retourne, demander de compléter:
(il y a peut-être des erreurs)

Code : Tout sélectionner

IneqDeg2(E,sg):={
local sol,c,s,A,B,Co,Cf,Do,Df,Eo,Ef,F;
sol:=solve(E);
c:=coeff(E,x,2);
s:=size(sol);
A:="S=]-∞,+∞[";B:="S=Ø";
si s!=0 alors
  Co:="S=]-∞,"+sol[0]+"[U]"+sol[0]+",+∞[";
  Cf:="S=]-∞,"+sol[0]+"]U["+sol[0]+",+∞[";
  Do:="S=]-∞,"+min(sol)+"[U]"+max(sol)+",+∞[";
  Df:="S=]-∞,"+min(sol)+"]U["+max(sol)+",+∞[";
  Eo:="S=]"+min(sol)+","+max(sol)+"[";
  Ef:="S=["+min(sol)+","+max(sol)+"]";
  F:="S={"+sol[0]+"}";
fsi;
si sg=='>' alors 
  si s==0 alors 
    si c>0 alors retourne A;fsi;
    si c<0 alors retourne B;fsi;
  fsi;
  si s==1 alors
    si c>0 alors retourne Co;fsi;
    si c<0 alors retourne B;fsi;
  fsi;
  si s==2 alors 
    si c>0 alors retourne Do;fsi;
    si c<0 alors retourne Eo;fsi;
  fsi;
fsi;
si sg=='>=' alors 
  si s==0 alors 
    si c>0 alors retourne A;fsi;
    si c<0 alors retourne B;fsi;
  fsi;
  si s==1 alors
    si c>0 alors retourne A;fsi;
    si c<0 alors retourne F;fsi;
  fsi;
  si s==2 alors 
    si c>0 alors retourne Df;fsi;
    si c<0 alors retourne Ef;fsi;
  fsi;
fsi;
si sg=='<' alors 
  si s==0 alors 
    si c>0 alors retourne B;fsi;
    si c<0 alors retourne A;fsi;
  fsi;
  si s==1 alors
    si c>0 alors retourne B;fsi;
    si c<0 alors retourne Co;fsi;
  fsi;
  si s==2 alors 
    si c>0 alors retourne Eo;fsi;
    si c<0 alors retourne Do;fsi;
  fsi;
fsi;
si sg=='<=' alors 
  si s==0 alors 
    si c>0 alors retourne B;fsi;
    si c<0 alors retourne A;fsi;
  fsi;
  si s==1 alors
    si c>0 alors retourne F;fsi;
    si c<0 alors retourne A;fsi;
  fsi;
  si s==2 alors 
    si c>0 alors retourne Ef;fsi;
    si c<0 alors retourne Df;fsi;
  fsi;
fsi;
}
:;
Exemple: IneqDeg2(5x^2-8x+3,'>=')
On peut peut-être raccourcir ce programme bourré de redites ...?

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

Re: Inéquation du second degré

Message par alb » mer. févr. 23, 2011 9:39 am

Au début du programme il est préférable de faire sol:=simplifier(solve(E));
Un intérêt pour les élèves à qui on demande de résoudre 2x^2+(m-2)*x+m-m^2>0:
-faire IneqDeg2(2x^2+(m-2)*x+m-m^2,'>')
-le résultat avec min et max oblige l'élève à penser à faire supposons(m<2/3) ou supposons(m>2/3)
J'ai noté plusieurs remarques en utilisant solve pour ce genre d'inéquation:
1)solve(2x^2+(m-2)*x+m-m^2>0) renvoie [((x>(m/2)) && (x<(-m+1)))]
Ne serait-il pas souhaitable d'avertir l'utilisateur de la nécessité de formuler une hypothèse sur m ?
2)solve(2x^2+(m-2)*x+m-m^2>=0) renvoie [m/2,-m+1]
3)supposons(m<2/3);solve(2x^2+(m-2)*x+m-m^2>0) renvoie m,[x<(m/2),x>(-m+1)] OK
4)supposons(m>2/3);solve(2x^2+(m-2)*x+m-m^2>0) renvoie m,[x<(-m+1),((x>(-m+1)) && (x<(m/2))),x>(m/2)]
5)supposons(m>2/3);solve(2x^2+(m-2)*x+m-m^2>=0) renvoie m,[x<=(-m+1),x>=(m/2)] OK

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

Re: Inéquation du second degré

Message par alb » mer. mars 02, 2011 8:57 pm

J'ai téléchargé la nouvelle version en test ce matin.
J'utilise ce programme (très bavard mais je ne sais pas faire mieux) dont le but est de montrer à des élèves de première comment xcas renvoie les solutions d'une inéquation du second degré.

Code : Tout sélectionner

IneqDeg2(E,sg):={
local t,sol,c,s,A,B,Co,Cf,Do,Df,Eo,Ef,F;
sol:=simplifier(solve(E));
c:=coeff(E,x,2);
s:=size(sol);
si sg=='>' alors t:="l'ensemble des solutions de l'inéquation "+E+">0 est ";fsi;
si sg=='>=' alors t:="l'ensemble des solutions de l'inéquation "+E+">=0 est ";fsi;
si sg=='<' alors t:="l'ensemble des solutions de l'inéquation "+E+"<0 est ";fsi;
si sg=='<=' alors t:="l'ensemble des solutions de l'inéquation "+E+"<=0 est ";fsi;
A:=t+"S=]-∞,+∞[";B:=t+"S=Ø";
si s!=0 alors
  Co:=t+"S=]-∞,"+sol[0]+"[U]"+sol[0]+",+∞[";
  Cf:=t+"S=]-∞,"+sol[0]+"]U["+sol[0]+",+∞[";
  Do:=t+"S=]-∞,"+min(sol)+"[U]"+max(sol)+",+∞[";
  Df:=t+"S=]-∞,"+min(sol)+"]U["+max(sol)+",+∞[";
  Eo:=t+"S=]"+min(sol)+","+max(sol)+"[";
  Ef:=t+"S=["+min(sol)+","+max(sol)+"]";
  F:=t+"S={"+sol[0]+"}";
fsi;
si sg=='>' alors
  si s==0 alors 
    si c>0 alors afficher(cat(A));fsi;
    si c<0 alors afficher(cat(B));fsi;
  fsi;
  si s==1 alors
    si c>0 alors afficher(cat(Co));fsi;
    si c<0 alors afficher(cat(B));fsi;
  fsi;
  si s==2 alors 
    si c>0 alors afficher(cat(Do));fsi;
    si c<0 alors afficher(cat(Eo));fsi;
  fsi;
  retourne solve(E>0);
fsi;
si sg=='>=' alors 
  si s==0 alors 
    si c>0 alors afficher(cat(A));fsi;
    si c<0 alors afficher(cat(B));fsi;
  fsi;
  si s==1 alors
    si c>0 alors afficher(cat(A));fsi;
    si c<0 alors afficher(cat(F));fsi;
  fsi;
  si s==2 alors 
    si c>0 alors afficher(cat(Df));fsi;
    si c<0 alors afficher(cat(Ef));fsi;
  fsi;
  retourne solve(E>=0);
fsi;
si sg=='<' alors 
  si s==0 alors 
    si c>0 alors afficher(cat(B));fsi;
    si c<0 alors afficher(cat(A));fsi;
  fsi;
  si s==1 alors
    si c>0 alors afficher(cat(B));fsi;
    si c<0 alors afficher(cat(Co));fsi;
  fsi;
  si s==2 alors 
    si c>0 alors afficher(cat(Eo));fsi;
    si c<0 alors afficher(cat(Do));fsi;
  fsi;
  retourne solve(E<0);
fsi;
si sg=='<=' alors 
  si s==0 alors 
    si c>0 alors afficher(cat(B));fsi;
    si c<0 alors afficher(cat(A));fsi;
  fsi;
  si s==1 alors
    si c>0 alors afficher(cat(F));fsi;
    si c<0 alors afficher(cat(A));fsi;
  fsi;
  si s==2 alors 
    si c>0 alors afficher(cat(Ef));fsi;
    si c<0 alors afficher(cat(Df));fsi;
  fsi;
  retourne solve(E<=0);
fsi;
}
Ensuite j'ai testé deux inéquations avec paramètres (en modifiant les hypothèses et le sens des inégalités):
E:=m*x^2-(2)*x+1/m;supposons(m<0);IneqDeg2(E,'>=');
E:=-2m*x^2+(m^2+16)*x-8m;supposons(m<-4);IneqDeg2(E,'<=');
Ce qui fait au total 24 tests.
Résultat: identité parfaite entre l'affichage de la zone intermédiaire et les valeurs de retours.

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

Re: Inéquation du second degré

Message par alb » jeu. mars 03, 2011 11:15 am

Un peu vicieux, Je tente deux paramètres:
E:=(m*x-a)*(x+2a/m);
supposons(a>0);
supposons(m>0);
IneqDeg2(E,'>');
Dans cet exemple xcas coince sur la comparaison des deux racines.
J'ajoute que sign(a/m) ne répond pas alors que sign(a*m) renvoie 1

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

Re: Inéquation du second degré

Message par alb » sam. mars 05, 2011 10:48 am

supposons(a<0);
supposons(b<0);
sign(a*b); renvoie -1
sign(a/b); renvoie -1
Même pb si on remplace 0 par un nb strictement négatif.

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

Re: Inéquation du second degré

Message par parisse » sam. mars 05, 2011 6:02 pm

en effet, je pense avoir un fix pour sign(a*b).

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

Re: Inéquation du second degré

Message par alb » mer. mars 16, 2011 10:34 am

avec la 0.9.1-1 de hier:
supposons(a<0);supposons(b<0);sign(a*b);sign(a/b); renvoie a,b,1,1
mais
supposons(a>0);supposons(b>0);sign(a*b);sign(a/b); renvoie a,b,1,sign(a/b)

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

Re: (In)équation du second degré

Message par alb » dim. août 07, 2011 5:18 pm

Petit programme pour illustrer l'ensemble solution d'une (in)équation du second degré.
Est-il possible de trouver une fonction plus simple que celle que j'ai utilisée
prenant en paramètre une séquence d'objets graphiques A,B,C,... et renvoyant
la construction animée de A puis de A et B puis de A et B et C etc... et ne bouclant pas cad
avec un arrêt si tous les objets sont affichés ?
Pièces jointes
SolDeg2.gz
(1.56 Kio) Téléchargé 356 fois

Répondre