Test d'égalité de deux fonctions

Accueil Forums Programmation WIMS Programmation d’exercices OEF Test d'égalité de deux fonctions

Étiqueté : 

Vous lisez 4 fils de discussion
  • Auteur
    Messages
    • #1368
      Fabien Sommier
      Participant
      Up
      0
      Down
      ::

      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.

    • #1369
      bernadette
      Maître des clés
      Up
      0
      Down
      ::

      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

    • #1371
      Avatar photoChantal Causse
      Maître des clés
      Up
      0
      Down
      ::

      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

    • #1373
      Fabien Sommier
      Participant
      Up
      0
      Down
      ::

      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.

    • #1375
      Fabien Sommier
      Participant
      Up
      0
      Down
      ::

      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.

Vous lisez 4 fils de discussion
  • Vous devez être connecté pour répondre à ce sujet.