MATLAB Grader. How to check vectroization in students solution?

2 次查看(过去 30 天)
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 个评论
Martin Rudolph
Martin Rudolph 2020-6-2
编辑:Martin Rudolph 2020-6-2
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.

请先登录,再进行评论。

回答(1 个)

Cris LaPierre
Cris LaPierre 2020-3-27
编辑:Cris LaPierre 2023-10-10
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 个评论
Cris LaPierre
Cris LaPierre 2020-3-27
编辑:Cris LaPierre 2020-3-27
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 2020-3-27
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).

请先登录,再进行评论。

社区

类别

Help CenterFile Exchange 中查找有关 Get Started with MATLAB 的更多信息

产品


版本

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by