Hi (Sorry for miswriting Justin's name in my previous message.) I finally was able to get a working minimal example (see below).
This modest success bring up a few follow-up questions that I hope that list members could answer. 1. How to test responder's input, e.g., for non-numeric submission? Should I use the $submission variable with the initial <script> block? 2. If the test should be done inside R : how to deliver the test results to LC? I ask this because when I tested the ME below with various inputs that do not follow the expected format (non-numeric values, missing input, etc.) I got only one kind of warning 'Unable to understand formula'. I would like to be able to give a more granular feedback to the students, in the spirit of the original ME. Thanks Itay <problem> <script type="loncapa/perl"> $ax = &random(1.0, 10, 0.1); # Coordinates of \vec{a} $ay = &random(1.0, 10, 0.1); @avec = ($ax, $ay); $answer="Chose b such that the scalar product with a is zero."; </script> <startouttext /> Consider a vector <m eval="on">\( \vec{a} = $ax\hat{x} + $ay\hat{y} \)</m>'. Provide a vector <m>\( \vec{b} \)</m>, orthogonal to <m>\( \vec{a} \)</m>. <br /> <endouttext /> <mathresponse answerdisplay="$answer" cas="R" args="@avec"> <answer> a <- c(LONCAPALIST[1],LONCAPALIST[2]); b <- c(RESPONSE[1],RESPONSE[2]) ; abs(sum(a*b))<0.001 </answer> <textline readonly="no" size="20" /> </mathresponse> </problem> On Sat, 24 Oct 2020, at 13:35, Itay wrote: > Just, > Thank you for your reply. > Following your suggestion I tried to create a minimal example based on the > template > Math Response using Computer Algebra System R > Here, too, I am having difficulties. > The minimal example is enclosed below. > Typing the correct answer for vector b (ay, -ax) > provokes the response > Unable to understand formula. > > Note : the command delegated to R was tested directly with R. > > Thank you > Itay > > > <problem> > > <script type="loncapa/perl"> > $ax = &random(1.0, 10, 0.1); # Coordinates of \vec{a} > $ay = &random(1.0, 10, 0.1); > @avec = ($ax, $ay); > $answer="Chose b such that the scalar product with a is zero."; > </script> > > > <startouttext /> > Consider a vector <m eval="on">\( \vec{a} = $ax\hat{x} + $ay\hat{y} \)</m>'. > Provide a vector <m>\( \vec{b} \)</m>, orthogonal to <m>\( \vec{a} \)</m>. > <br /> > <endouttext /> > > <mathresponse answerdisplay="$answer" cas="R" args="@avec"> > <answer> > abs(sum(LONCAPALIST * RESPONSE))<0.001 > </answer> > <textline readonly="no" size="20" /> > </mathresponse> > > </problem> > > > > > On Fri, 23 Oct 2020, at 23:36, Justin Gray wrote: >> I'm afraid I do not have an answer to your question, but have you considered >> coding this problem as a mathresponse problem? >> >> Best regards, >> Justin >> -- >> >> *Justin Gray* >> Senior Lecturer | Department of Mathematics >> Simon Fraser University | SCK 10531 >> 8888 University Dr., Burnaby, B.C. V5A 1S6 >> Canada >> >> Simon Fraser University is located on the Unceded Coast Salish Territories >> of the xʷməθkʷəy̓əm (Musqueam), Səl̓ílwətaʔ/Selilwitulh (Tsleil-Waututh), >> Kwikwitlem, and Skwxwú7mesh Úxwumixw (Squamish) Peoples >> >> >> On Fri, Oct 23, 2020 at 1:18 PM Itay <it...@nospammail.net> wrote: >>> __ >>> Hi >>> >>> I am trying to develop a custom response problem in which the student >>> submission is a vector. >>> A minimal example is provided below. >>> Regardless of what I typed in the either of the two input fields I get the >>> response: >>> 'This question expects a numeric answer.' >>> >>> Please advise what am I doing wrong? >>> >>> Thanks in advance. >>> Itay >>> >>> >>> <problem> <!-- begin minimal --> >>> <script type="loncapa/perl"> >>> $ax = &random(1.0, 10, 0.1); # Coordinates of \vec{a} >>> $ay = &random(1.0, 10, 0.1); >>> </script> >>> >>> <startouttext /> >>> Consider a vector <m eval="on">\( \vec{a} = $ax\hat{x} + $ay\hat{y} >>> \)</m>'. >>> Provide a vector <m>\( \vec{b} \)</m>, orthogonal to <m>\( \vec{a} \)</m>. >>> <br /> >>> <endouttext /> >>> >>> <customresponse id="dotProd"> >>> <answer type="loncapa/perl"> >>> for ($i=0; $i<2; $i++) { # Test input sanity. >>> if ($submission[i] =~ /^\d+\s+\w+$/) { return 'UNIT_NOTNEEDED'; } >>> if ($submission[i] !~ /^[\d\.]+$/) { return 'WANTED_NUMERIC'; } >>> } >>> >>> # Is submission correct? >>> $dotProd = $ax * $submission[0] + $ay * $submission[1]; >>> if (abs($dotProd) < 1.0e-3) { return 'APPROX_ANS'; } # Can't expect >>> EXACT_ANS. >>> return 'INCORRECT'; >>> </answer> >>> >>> <startouttext /><m>\( b_x = \)</m><endouttext /> >>> <textline size="10" readonly="no" spellcheck="none" /> >>> <startouttext /><br /><endouttext /> >>> >>> <startouttext /><m>\( b_y = \)</m><endouttext /> >>> <textline size="10" readonly="no" spellcheck="none" /> >>> <startouttext /><br /><endouttext /> >>> </customresponse> >>> </problem> <!-- end minimal --> >>> >>> >> _______________________________________________ >> LON-CAPA-users mailing list >> LON-CAPA-users@mail.lon-capa.org >> http://mail.lon-capa.org/mailman/listinfo/lon-capa-users >> > > _______________________________________________ > LON-CAPA-users mailing list > LON-CAPA-users@mail.lon-capa.org > http://mail.lon-capa.org/mailman/listinfo/lon-capa-users >
_______________________________________________ LON-CAPA-users mailing list LON-CAPA-users@mail.lon-capa.org http://mail.lon-capa.org/mailman/listinfo/lon-capa-users