- create A using random numbers. This way, the actual values are different every time the code executes, meaning learners have to index A in order to get the correct answer. You can leave the semicolon off so the matrix values display in the output, showing that they change every time. To do this, place the following code in both the reference and learner solutions: A = randi(10,3,3)
- approach 2 is to make A and subMat so large that hardcoding the answer is extremely painful. This won't matter for assessing - computers are great at comparing thousands of numbers. However, to make them sufficiently large, you would likely be generating them using built-in functions like randi, so this may not be necessary.
MATLAB Code Solution Assessment
6 ビュー (過去 30 日間)
古いコメントを表示
I am trying to assess a question below
Given
A = [1 2 3; 4 5 6; 7 8 9]
derive a 2x2 matrix at the bottom right corner of A and store it in variable subMat
I want students to use appropriate MATLAB syntax below
subMat = A(2:3,2:3)
But it seems I can only assess whether the answer is correct but not the syntax. So a student could type
subMat = [5 6; 8 9]
and the assessment will mark it as correct.
How do I assess the syntax?
0 件のコメント
採用された回答
Cris LaPierre
2024 年 12 月 23 日
編集済み: Cris LaPierre
2024 年 12 月 23 日
There is no built-in way to check how learners created subMat. However, there are 2 aproaches you could take that would prevent learners from hard coding a solution.
Note that both the reference and learner solutions contain the same seed so will generate the same random numbers. See this Answer for more.
0 件のコメント
その他の回答 (2 件)
Jayanti
2024 年 12 月 23 日
編集済み: Jayanti
2024 年 12 月 23 日
Hi Kuda,
You can assess if the answers contain a correct syntax by using regular expressions to match the expected pattern.
Please refer to the below function which checks if a pattern is present in the code for generalised n*n matrix.
function checkSyntax(code, n)
pattern = sprintf('A\\(%d:%d,%d:%d\\)', n-1, n, n-1, n);
if ~isempty(regexp(code, pattern, 'once'))
disp('Correct syntax used.');
else
disp('Incorrect syntax.');
end
end
MATLAB's “regexp” function will search for this pattern within the code.
% Here's how you can use it:
n = 3;
code = 'subMat = A(2:3,2:3)';
checkSyntax(code, n);
Hope this will be helpful!
1 件のコメント
Rik
2024 年 12 月 23 日
This gets complicated fast if you want to allow all legal syntax options:
% Here's how you can use it:
n = 3;
code = 'subMat = A(2:3,2:3)';
checkSyntax(code, n);
code = 'subMat = A( 2 : 3 ,2:3)';
checkSyntax(code, n);
function checkSyntax(code, n)
pattern = sprintf('A\\(%d:%d,%d:%d\\)', n-1, n, n-1, n);
if ~isempty(regexp(code, pattern, 'once'))
disp('Correct syntax used.');
else
disp('Incorrect syntax.');
end
end
In this case you can splatter in some \s* (or \S*, I always need to check the doc which case is the space), but for harder problems this get very unwieldy for robust checking. Even minify will not really help much.
Image Analyst
2024 年 12 月 23 日
I recommend that you do not do that (check for exact syntax of their solution). Why not? Because your answer is not the only, or even the best, way to answer that question. In fact, a more robust and general way to solve it would be
A = [1 2 3; 4 5 6; 7 8 9]
subMat = A(end-1:end, end-1:end)
rather than yours, and this could be marked incorrect. If you want you could examine the code for specific ways to hard code the final answer, as you showed, but I don't think you should be examining the source code for a match to your code because there are alternative ways to arrive at the answer, as I have shown. (In fact the Cody feature of this website is based upon that.)
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Script-Based Unit Tests についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!