为函数类型的学生答案编写评判
用于测试函数类型的学生习题答案的评判比您为脚本类型的习题编写的评判更复杂。为了帮助编写评判,MATLAB® Grader™ 提供了内置函数,用于评判变量等式以及特定关键字和函数是否存在。
以下概念和过程可以帮助编写评判:
MATLAB Grader 内置函数 - 提供函数来帮助评判变量等式以及特定函数和关键字是否存在。
执行模型 - 说明如何运行评判和标记评判结果。
在评判中调用学生答案 - 描述如何调用学生答案,以便可以评判其代码。
使用参考答案评判学生答案 - 说明如何编写自己的代码来测试学生答案。
您可以查看示例:“Write a function to calculate the normalized sinc”编程习题的评判中提供的一些评判示例。
阅读测试学生答案,了解影响学生答案评判的因素。
MATLAB Grader 内置函数
对于函数类型的答案,您可以使用检查变量等式和关键字或函数是否存在的内置函数:
assessVariableEqual
- 检查学生答案中的变量是否等于容差范围内的指定值。容差仅适用于数值数据类型。assessFunctionPresence
- 检查学生答案中是否存在特定函数或关键字。此选项也可作为单个测试使用:从“测试类型”菜单中,选择函数或关键字存在,并提供指定的函数名称或关键字,以及要针对错误答案显示的任何其他反馈。
assessFunctionAbsence
- 检查学生答案中是否未包含某些函数或关键字。此选项也可作为单个测试使用:从“测试类型”菜单中,选择函数或关键字缺失,并提供指定的函数名称或关键字,以及要针对错误答案显示的任何其他反馈。
如果您希望编写自己的评判代码,则还可以使用“MATLAB 代码”测试类型中的内置函数来评估提交的答案,并提供您要针对错误答案显示的任何其他反馈。
执行模型
执行模型说明了如何在 MATLAB Grader 中运行评判和标记评判结果。
您为函数类型的答案编写的每个评判通常都包含对学生答案的调用。您可以为函数提供输入并计算任何返回值。您还可以调用参考答案,将其输出与学生答案输出进行比较。
每个评判依次独立于其他评判运行。如果一个评判未通过,后续评判仍会运行。
在一个评判中创建的变量在下一个评判中不可用。应在每个评判中定义所有必需的变量。
如果评判未返回错误,则系统会将评判标记为正确。如果存在错误,则系统会将评判标记为错误。
如果评判是自测,则无论答案是否通过评判,学生都可以通过点击测试名称左侧的箭头查看评判代码。
注意
由 assessVariableEqual
生成的默认错误消息包含被测变量的名称。对于函数类型的习题,此变量由教师在评判脚本中创建,而不是由学生创建。请使用学生可识别的有意义的变量名称,例如在函数声明中定义的输出变量。
给定编程习题的每个评判都会影响运行答案和评判的执行时间。有关更多详细信息,请参阅提交的时间限制。
在评判中调用学生答案
函数类型的习题通过调用具有特定输入的学生答案并测试输出来进行评估。本节使用的是 My first FUNCTION problem 中的代码示例,您可以在 MATLAB Grader 主页的 Getting Started with MATLAB Grader 下的 MATLAB Grader 习题目录中找到该习题。
在示例 My first FUNCTION problem 中,学生编写一个将华氏温度转换为摄氏温度的函数。评判首先定义一个正温度,使用该输入调用学生函数,并将输出捕获到新变量中。
以下评判使用 MATLAB 代码来测试学生提供的值对于正温度是否正确。
% Create test input temp = 78; % Run student solution. tempC = tempF2C(temp);
然后,您可以在此评判中添加其他代码,以测试输出变量的值是否正确。
使用参考答案评判学生答案
要将学生答案与参考答案进行比较,请使用相同的输入调用参考函数。
要调用参考答案,请使用语法 reference.
myFunction
。将 myFunction
替换为您在参考答案中创建的函数的名称。
在 My first FUNCTION problem 的示例中,使用相同的输入调用参考答案,并将输出捕获到新变量中。最后,使用 assessVAriableEqual
将学生答案的输出与参考答案的输出进行比较。
参考答案
function tempC = tempF2C(tempF) tempC = (tempF-32)/1.8; end
评判
% Run reference solution. refT = reference.tempF2C(temp); % Compare. assessVariableEqual('tempC', refT);
示例:“Write a function to calculate the normalized sinc”编程习题的评判
在 MATLAB Grader 习题目录的示例 Write a function to calculate the normalized sinc 中,学生需要编写一个函数,该函数在不使用 MATLAB 内置 sinc
函数的情况下返回输入值的 sinc。
评判 1.测试 sinc
的方程是否已正确实现
第一个评判检查 sinc 的方程是否已正确实现。如果学生在其答案中使用了内置 sinc 函数,则教师将以下反馈添加到默认错误消息中:“Implement the sinc function yourself.Do not use the built-in function.”
% Create a random input. % Make sure not to have pi, 2pi, 3pi, etc where sin(pi*x) = 0 x = 0.25*randi([1 3]); % Run learner solution. y = normsinc(x); % Run reference solution yReference = reference.normsinc(x); % Compare. assessVariableEqual('y', yReference); assessFunctionAbsence('sinc', 'FileName', 'normsinc.m', 'Feedback',... 'Implement the sinc function yourself. Do not use the built-in function.')
如果学生答案未通过评判,则此评判会显示以下额外反馈:
Double check the equation for sinc. In particular, pay attention to the order of operations and need for parenthesis.
测试对 0 的处理是否正确
第二个评判检查学生函数在输入为 0 时是否返回正确的输出。
x = 0 % Run learner solution. y = normsinc(x); % Run reference solution. yReference = reference.normsinc(x); % Compare. assessVariableEqual('y', yReference);
如果学生答案未通过此评判,则教师提供以下额外反馈:
Test your function using 0 as input, the result should be 1. Try using an if-else statement or logical indexing to achieve this.
测试答案是否适用于矩阵
第三个评判检查学生函数是否适用于矩阵。
% In this test we'll create a random non-square matrix % Use randi to set the dimensions dim1 = randi([2 5]); dim2 = randi([6 9]); % Create a random matrix with values between [-3 3] x = 6*rand(dim1,dim2) - 3; % Add a 0 to the x to see that 0 students still meet requirement with a matrix x(3) = 0; % Run learner solution. y = normsinc(x); % Run reference solution yReference = reference.normsinc(x); % Compare. assessVariableEqual('y', yReference);
如果学生答案错误,则教师提供以下额外反馈:
What does your error message say: If you receive an error about the wrong size, make sure to use the element-wise operator ./ in your calculation. If you receive a wrong value error, make sure any element of a input matrix that is 0 returns 1 for the corresponding element in your output.
尝试解答示例函数习题
本主题中使用的第一个示例来自 My first FUNCTION problem,您可以在 Getting Started with MATLAB Grader 下的 MATLAB Grader 习题目录中找到该习题。
本主题中使用的第二个示例来自 Write a function to calculate the normalized sinc,您可以在 Getting Started with MATLAB Grader 下的 MATLAB Grader 习题目录中找到该习题。
要尝试像学生一样解答习题,请打开习题,然后点击学生预览。在答案框中输入您的代码,然后点击提交以运行评判(实际上系统不会记录任何提交答案)。请尝试评判正确代码和错误代码,以查看获得的反馈。