\label{Creating_Math_Response_Problems}
Math response problems use a cas system to evaluate the student response. Which computer algebra system is to
be used is specified in the cas argument of the mathresponse tag; both Maxima and R are supported. Maxima and R
are also powerful stand-alone programs that can be installed on most operating systems. If you are interested
in writing Maxima or R problems, it is a good idea to install a copy on your operating system to access help,
learn syntax, and test your expected responses outside the LON-CAPA environment.
See \texttt{http://maxima.sourceforge.net/} or \texttt{http://www.r-project.org/} .
LON-CAPA will accept two pre-named arrays inside the answerblock for the computer algebra system: RESPONSE and LONCAPALIST. RESPONSE contains the student input by comman-separated entities, for example, if ``3,42,17'' is entered by the student, RESPONSE[2] would be 42. LONCAPALIST is built from the arguments passed in an array \texttt{args} which is assigned a array value from the script.
The \texttt{answer} tag contains the Maxima command (and syntax) that are passed to Maxima after the RESPONSE and LONCAPALIST values are substituted. (See example below). The \texttt{answerdisplay} variable contains what is displayed when the problem is in ``Show Answer'' mode. You will want to include this field so that the students can see the correct answer after the ``Show Answer Date'' configured when the problem is assigned in the course space. Also note the description in the \texttt{postanswerdate}\index{postanswerdate} tag that is displayed after the answer date.
The following example illustrates this.
\begin{verbatim}
<problem>
<script type="loncapa/perl">
$a1 = random(-6,6,4);
$a2 = random(-6,6,4);
$n1 = random(3,11,2);
$n2 = random(2,10,2);
$function = "$a1*cos($n1*x)+$a2*sin($n2*x)";
# reformat next two lines as single line if you copy/paste into a script
$example=&xmlparse('An example would be
<m eval="on">$(sin($n1\cdot x)+cos($n2\cdot x))/\sqrt{2}$</m>');
</script>
<startouttext />
Give an example of a function
<ol>
<li>
which is orthogonal to <algebra>$function</algebra> with respect to the
scalar product
<m>
\[<g \mid h> =
\frac{1}{\pi} \int_{-\pi}^{\pi}dx g(x) \cdot h(x)\]
</m>
</li>
<li>
whose norm is 1.
</li>
</ol>
<endouttext />
<mathresponse answerdisplay="$example" cas="maxima" args="$function">
<answer>
overlap:integrate((RESPONSE[1])*(LONCAPALIST[1]),x,-%pi,%pi)/%pi;
norm:integrate((RESPONSE[1])*(RESPONSE[1]),x,-%pi,%pi)/%pi;
is(overlap=0 and norm=1);
</answer>
<textline readonly="no" size="50" />
<hintgroup showoncorrect="no">
<mathhint name="ortho" args="$function" cas="maxima">
<answer>
overlap: integrate((LONCAPALIST[1])*(RESPONSE[1]),x,-%pi,%pi)/%pi;
is(not overlap = 0);
</answer>
</mathhint>
<mathhint name="norm" args="$function" cas="maxima">
<answer>
norm: integrate((RESPONSE[1])*(RESPONSE[1]),x,-%pi,%pi)/%pi;
is(not norm = 1);
</answer>
</mathhint>
<hintpart on="norm">
<startouttext />
The function you have provided does not have a norm of one.
<endouttext />
</hintpart>
<hintpart on="ortho">
<startouttext />
The function you have provided is not orthogonal.
<endouttext />
</hintpart>
</hintgroup>
</mathresponse>
<postanswerdate>
<startouttext />
<p>
Note that with respect to the above norm, <m>$\cos(nx)$</m> is perpendicular
to <m>$\sin(nx)$</m> and perpendicular to <m>$\cos(mx)$</m> for
<m>$n\ne m$</m>.
</p>
<endouttext />
</postanswerdate>
</problem>
\end{verbatim}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>