MATLAB Grader. How to check vectroization in students solution?

6 views (last 30 days)
Hi,
I would like to chck in MATLAB Grader if the students have used vectorization, eg. they write in their solution
x = (1:5).^(5:-1:1)
instead of
x = [1^5 2^4 3^3 4^2 5^1]
Is it possible?
  1 Comment
Martin Rudolph
Martin Rudolph on 2 Jun 2020
Edited: Martin Rudolph on 2 Jun 2020
Hello,
Referring to:
you could try something like that (with sprintf values from the reference solution could also be used):
SolutionFile = fileread('solution.m');
if ~contains(SolutionFile,'(1:5).^(5:-1:1)')
error('You did not vectorized the code as intended, please refer to the following example...')
end
or something less specific to allow alternative solutions:
if ~contains(regexprep(SolutionFile,'\s',''),'.^')
error('You did not used the elementwise power operator')
end
or
MaxNumber = 4;
NumberOfPowerOperators = numel(strfind(SolutionFile,'^'));
if NumberOfPowerOperators>MaxNumber
error('You used the power operator to often, it seems you did not vectorized your code properly')
end
Using splitlines and a loop you could also check each line for the amount of used operators. However, even if you write a complex test you cannot consider all possible solutions by the students. But a few lines of code may help you to identify strange solutions for a manual review.

Sign in to comment.

Answers (1)

Cris LaPierre
Cris LaPierre on 27 Mar 2020
Edited: Cris LaPierre on 10 Oct 2023
There is no built-in way to check that they used element-wise operators (.^).
You can prohibit the use of the keyword for, to avoid their solving it with a for loop.
My suggestion would be to assign the number to use randomly. That way, they can't hardcode their solution.
% provide the following as locked line in the student template
n = randi([4,10]);
% Student provides their solution underneath
x=(1:n).^(n:-1:1);
Because the reference and learner solutions share the same random number seed, the reference solution would just be
n = randi([4,10]);
x=(1:n).^(n:-1:1);
  6 Comments
Cris LaPierre
Cris LaPierre on 27 Mar 2020
Edited: Cris LaPierre on 27 Mar 2020
Let me recommend our Teaching with MATLAB self-paced course. I'd suggest quickly browsing all the chapters, as they all focus on our resources for teaching online. Chapter 6 in particular covers MATLAB Grader.
Also, Grader comes with some pre-built problems. The Getting Started with MATLAB Grader collection was specifically designed to help you get started. The last page of the Teaching with MATLAB course contains a table that helps identify problems to use as a template for common requests (working with files, random numbers, etc). For example, look at the Coordinate transformations Navigating a robot problem to see how you can use random numbers to create variables for your students to use.
Cris LaPierre
Cris LaPierre on 27 Mar 2020
Grader is essentially a variable checker. It is not a good solution for interactive/gui exercises. It should work well for your laboratories provided the code does not cause grader to time out (<1 minute to run and assess code).

Sign in to comment.

Communities

More Answers in the  Distance Learning Community

Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!