# [LON-CAPA-users] coding a customresponse problem using &cas()

Peter Dencker dencker at math.uni-luebeck.de
Tue May 26 11:46:05 EDT 2015

```Hi Justin,

in my example a diagonal idempotent matrix will be regarded as too trivial.

- Peter

<problem>

<script type="loncapa/perl">

sub is_true_but_diagonal {
my @given = @_;
# is the matrix diagonal?
for my \$i ( 0 .. \$#given ) {
for my \$j ( 0 .. \$#{ \$given[\$i] } ) {
if ( \$i != \$j && \$given[\$i][\$j] != 0 ) {
return 0;
}
}
}
# is the diagonal matrix idempotent?
for my \$i ( 0 .. \$#given ) {
if ( \$given[\$i][\$i] != 0 && \$given[\$i][\$i] != 1 ) {
return 0;
}
}
return 1;
}

\$hint = q{};

</script>

Give a nontrivial example of an idempotent matrix (whose entries are all
integers). <br />

<customresponse id="0r0">

for (\$submission) { s{\s}{}gxms; s{\Amatrix}{}gxms; }

if \$submission !~ /\A[(]\[(.+)\][)]\z/xms;
my @given
= map { [ split /,/xms, \$_ ]; } split /\],\[/xms, \$1;
for (map { @{\$_}; } @given) {
}

my \$n = @{ \$given };
for my \$row (@given) { return 'BAD_FORMULA' if @{\$row} != \$n }
my \$m = @given;
return 'INCORRECT' if \$m != \$n;

my \$matrix      = "matrix\$submission";
my \$maxima_in
= "is(rank(rat(\$matrix.\$matrix-\$matrix))=0)"
. q{;};
my \$maxima_out = cas( 'maxima', \$maxima_in );
return 'EXACT_ANS'
if \$maxima_out eq 'true';
return 'INCORRECT'
if \$maxima_out eq 'false';

<customhint id="0r0h0">

for (\$submission) { s{\s}{}gxms; s{\Amatrix}{}gxms; }
if ( \$submission !~ /\A[(]\[(.+)\][)]\z/xms ) {
\$hint = '<b>Give a matrix in the required form.</b>';
return;
}
my @given
= map { [ split /,/xms, \$_ ]; } split /\],\[/xms, \$1;
for ( map { @{\$_}; } @given ) {
if ( !/\A[-+]?\d+\z/xms ) {
\$hint
= '<b>Use integer entries for this submission.</b>';
return;
}
}
my \$n = @{ \$given };
for my \$row (@given) {
if ( @{\$row} != \$n ) {
\$hint
= '<b>All rows must be the same length.<b>';
return;
}
}
my \$m = @given;
if ( \$m != \$n ) {
\$hint
= '<b>An idempotent matrix must necessarily'
. 'be a square matrix!</b>';
return;
}
if ( is_true_but_diagonal(@given) ) {
\$hint
= '<b>Correct, well, but choose'
. 'a less trivial example.</b>';
return;
}

</customhint>
</customresponse>

<textline /> <br />
\$hint <br />

</problem>

Am 05/26/2015 um 03:49 AM schrieb Justin Gray:
> I would appreciate it if someone could assist me with coding the following
> problem.
>
> Give an example of an idempotent matrix.
>
> Ideally, I would like students to input their answer using the format
> (row_1,...,row_m) using a matrix of any size, so that ([1,1],[0,0]) and
> ([2,-2,-4],[-1,3,4],[1,-2,-3]) would both be acceptable answers.
> (A matrix *A* is *idempotent* if *A*^2=*A*.)
>
> If I understand correctly, using a mathresponse problem is problematic in
> this case because there is some preprocessing of the students submission
> that makes it difficult to use in the answer algorithm, but one way around
> this is to use customresponse combined with the &cas() function.
>
> In order that Maxima understands the students submission, the expression
> 'matrix' needs to be appended to the front. Also, matrix exponentiation is
> denoted by A^^n in Maxima. If it is easier to test a numerical condition,
> one could verify that rank(A^^2 - A) = 0.
>
> Thanks,
> Justin
>
> P.S. Ideally, I would like to stipulate that students provide a nontrivial
> example (excluding the zero matrix and the identity matrix) but that is the
> topic of another discussion.
>
>
>
> Justin Gray | Senior Lecturer
> Department of Mathematics | Simon Fraser University
> 8888 University Drive, Burnaby | V5A 1S6 | Canada
> Tel: +1 778.782.4237
>
>
>
> _______________________________________________
> LON-CAPA-users mailing list
> LON-CAPA-users at mail.lon-capa.org
> http://mail.lon-capa.org/mailman/listinfo/lon-capa-users
>

--
Dr. Peter Dencker
wissenschaftl. Mitarbeiter

UNIVERSITÄT ZU LÜBECK
INSTITUT FÜR MATHEMATIK

Ratzeburger Allee 160
23562 Lübeck

Tel +49 451 500 4254
Fax +49 451 500 3373
dencker at math.uni-luebeck.de

www.math.uni-luebeck.de
```