[LON-CAPA-users] How to write a custom response problem with vector I/O?

Itay itayf at nospammail.net
Sat Oct 24 07:11:24 EDT 2020


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 <itayf at 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 at mail.lon-capa.org
>> http://mail.lon-capa.org/mailman/listinfo/lon-capa-users
>> 
> 
> _______________________________________________
> LON-CAPA-users mailing list
> LON-CAPA-users at mail.lon-capa.org
> http://mail.lon-capa.org/mailman/listinfo/lon-capa-users
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.lon-capa.org/pipermail/lon-capa-users/attachments/20201024/2c818f02/attachment-0001.html>


More information about the LON-CAPA-users mailing list