PREP 2013 Question Authoring - Archived

complex math object

complex math object

by Joan Hart -
Number of replies: 2
What's the best way to code complex answers?
The following (hart_ws1 Problem 3) works, but if there is a better approach,
please advise:
Context("Complex");
$a = random(50, 90, 5);
#$f = Formula( "x^4 - ($a^2-1) x^2 - $a^2" ); #problem not accepted with x
$f = Formula( "z^4 - ($a^2-1) z^2 - $a^2" );
$ans0 = Compute( "$a" );
$ans1 = Compute( "-$a" );
$ans2 = Complex("i");
$ans3 = Complex("-1*i");


In reply to Joan Hart

Re: complex math object

by Gavin LaRose -
Hi Joan,

I don't see anything that I would do fundamentally different than what you have there. In the Complex Context, the default variable is z, not x, which is why the Formula in x is rejected. One could do the following in place of what you have.

    Context("Complex");
    $a = random(50, 90, 5);
    $f = Compute( "z^4 - ($a^2-1) z^2 - $a^2" );
    $ans0 = Compute( "$a" );
    $ans1 = Compute( "-$a" );
    $ans2 = Compute( "i" );
    $ans3 = Compute( "-i" );

Compute in each case should correctly determine the type of the object to create for you. A possible advantage of using Compute instead of Formula for the variable $f is that the former preserves the string used to create the formula and displays it as the correct answer when the variable is used to check a student's submission. Thus it is possible to illustrate the structure of the correct answer once students can view the coded correct answer.

Cheers,
Gavin

In reply to Joan Hart

Re: complex math object

by Davide Cervone -
Joan:

Two things to think about. I noticed you comment about the formula using x. The reason that doesn't work is that the Complex context doesn't have a variable x in it (just z). If you want to use x, you need to add it to the context. (I see Gavin has already answered this -- I had to step away for a bit, and he beat me to it.)

Your real question, however, is how to make the list of complex numbers that you want in the end. It is easiest to use

    $answer = Compute("$a,-$a,i,-i");
and later use
    ANS($answer->cmp);
Frequently, it is best to use Compute() with whatever answer you want the students to type, rather than the individual class constructors like List(). This makes sure the students actually can type what you want them to, and makes it easier on you, since you don't have to be concerned with the details of the classes involved.

Finally, note that inside a string used to create a MathObject, you don't have to do -1*i, as -i is sufficient. It is only in perl expressions that there is a problem with -i.

Hope that clears things up.

Davide