Accueil › Forums › Programmation WIMS › Programmation d’exercices OEF › Test d'égalité de deux fonctions
Étiqueté : fonctions tests
- Ce sujet contient 4 réponses, 3 participants et a été mis à jour pour la dernière fois par Fabien Sommier, le il y a 11 années et 8 mois.
-
AuteurMessages
-
-
14 mars 2013 à 23:59 #1368Fabien SommierParticipant::
Bonjour,
Je voudrais faire un exercice qui demande à l’élève de trouver UNE primitive d’une fonction donnée.
Idée : prendre la réponse de l’élève sans l’évaluer, dériver cette réponse, et la comparer avec la réponse prévue. Je rencontre deux problèmes :
1. comment faire pour que la réponse de l’élève soit considérée comme une fonction et pas comme du texte ? Il suffit de mettre {type=formal} comme ça : \answer{Votre réponse : F(x)=}{\reponse}{type=formal} ?
2. comment tester l’égalité de deux fonctions ? Dans la documentation j’ai trouvé un tableau sur les tests de la commande « condition » mais on dirait que ça porte sur des nombres ou des chaînes de caractère seulement.
Merci,
Fabien.
-
15 mars 2013 à 21:21 #1369bernadetteMaître des clés::
De toute façon, la réponse n’est que du texte. Mais on peut la dériver si elle est bien écrite comme une fonction de x.
Pour tester si deux fonctions sont égales, le type formal utilise maxima, il faut donc que tu refasses le travail. A partir du moment, où un test a été fait, il suffit de lui donner la valeur 1 ou 0 selon qu’il est juste ou pas pour qu’il devienne numérique.
Les commandes maxima utilisées par le type formal sont
maxima print(ratsimp(trigreduce(trigsimp($test))));
Tu peux essayer en remplacant $test par la différence entre la dérivée et le résultat que tu as.
Mais je ne garantis rien !
Une autre manière de faire serait de comparer la fonction de l’élève à une primitive et d’utiliser simplify() pour simplifier la différence (ce n’est pas forcément une meilleure méthode). Si les fonctions ne sont pas trop exotiques, la simplification devrait fonctionner et la fonction devrait être constante, donc ne pas contenir de x si c’est la variable. Pour tester cela, il y a un test isvariableof
Dans l’exemple ci-dessous, on voit que simplify ne fait pas des miracles ! Bref, tout dépend de tes fonctions (ou bien il faut utiliser maxima un peu comme en haut). Il faut bien tester un exercice comme cela !
\text{f=sin(x)}
\function{h=simplify(sin(x)^2 + cos(x)^2)}
\text{H= maxima(print(ratsimp(trigreduce(trigsimp(\h)))))}\text{g=cos(y)}
\text{G=tan(n)}
\text{varf=x isvariableof \f ? 1:0}
\text{varg=x isvariableof \g ? 1:0}
\text{varG=n isvariableof \G ? 1:0}\statement{\varf — \varg — \varG — h=\h ; H = \H; }
Bernadette
-
16 mars 2013 à 14:19 #1371Chantal CausseMaître des clés::
Bonjour
j’ai utilisé des choses de ce genre (copié je ne sais où…) et je n’ai pas eu de problème, mais je ne sais pas si ça marcherait dans tous les cas :
\answer{Primitive de \(\f)}{\reponse}{type=function}
\text{test=maxima(if constantp(fullratsimp((\reponse)-(\F))) then 1 else 0;)}
\condition{La réponse est bonne}{\test=1}
Chantal -
16 mars 2013 à 19:08 #1373Fabien SommierParticipant::
Bonjour,
Grand merci pour vos idées. J’ai eu du mal comprendre la nature du résultat de maxima (booléen ou réel) mais après plusieurs essais et en prenant en compte vos idées, je suis parvenu à un résultat qui me semble bon (testé pour l’instant avec des polynômes) comme ça :
(la fonction dont on demande une primitive est \f )
\answer{F(x)}{\rep}{type=function}
\function{drep=diff(\rep,x)}
\real{delta=maxima(print(ratsimp(trigreduce(trigsimp(\(\drep-\f)))));)}
\condition{Bonne primitive}{\delta=0}Si je suis amené à modifier ça pour des fonctions plus compliquées je le signalerai sur le forum.
En attendant je reste preneur de toute critique ou autre commentaire.
Fabien.
-
19 mars 2013 à 00:01 #1375Fabien SommierParticipant::
Bonjour,
Oups en fait ça ne marchait pas dans certains cas. Déjà il manque des parenthèses pour le 2e terme de la différence, puis je suppose qu’il faut considérer que l’on travaille sur des fonctions, en voulant obtenir une fonction nulle comme différence.
Ca semble fonctionner comme ça :
\answer{F(x)}{\rep}{type=function}
\function{drep=diff(\rep,x)}
\function{dif=\drep-(\f)}
\function{di=maxima(print(ratsimp(trigreduce(trigsimp(\dif))));)}
\condition{Bonne primitive}{\di=0}Fabien.
-
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.