Main Content

함수 유형 학습자 답안에 대한 평가 작성

함수 유형 문제에 대한 학습자 답안을 테스트하는 평가를 작성하는 것은 스크립트 유형의 문제를 대상으로 이를 작성하는 것보다 더 복잡합니다. 평가 작성에 도움을 주고자 MATLAB® Grader™는 변수의 동등성과 특정 키워드 및 함수의 존재 여부를 평가하기 위한 내장 함수를 제공합니다.

다음 개념과 절차가 평가 작성에 도움이 될 수 있습니다.

예: "정규화된 sinc를 계산하는 함수 작성(Write a function to calculate the normalized sinc)" 코딩 문제에 대한 평가에서 몇 가지 평가 예제를 살펴볼 수 있습니다.

학습자 답안을 평가하는 데 영향을 미치는 요소에 대한 내용을 학습자 답안 테스트하기 항목에서 읽어보십시오.

MATLAB Grader 내장 함수

함수 유형 답안의 경우 변수의 동등성 및 키워드 또는 함수의 존재를 확인하는 내장 함수를 사용하여 확인할 수 있습니다.

  • assessVariableEqual — 학습자 답안의 변수가 허용오차 내에서 지정된 값과 같은지 확인합니다. 허용오차는 숫자 데이터형에만 적용됩니다.

  • assessFunctionPresence — 학습자 답안에 특정 함수나 키워드가 있는지 확인합니다.

    이 옵션은 단일 테스트로도 사용할 수 있습니다. 테스트 유형 메뉴에서 Function or Keyword is Present를 선택하고, 지정된 함수 이름 또는 키워드와 오답에 표시할 추가 피드백을 제공합니다.

  • assessFunctionAbsence — 학습자 답안에 특정 함수나 키워드가 없는지 확인합니다.

    이 옵션은 단일 테스트로도 사용할 수 있습니다. 테스트 유형 메뉴에서 Function or Keyword is Absent를 선택하고, 지정된 함수 이름 또는 키워드와 오답에 표시할 추가 피드백을 제공합니다.

평가 코드를 직접 작성하려는 경우 MATLAB Code 테스트 유형에서 내장 함수를 사용하여 제출 답안을 평가하고 오답에 표시할 추가 피드백을 제공할 수도 있습니다.

실행 모델

실행 모델은 평가가 실행되는 방식과 MATLAB Grader에 평가 결과가 표시되는 방법을 설명합니다.

  • 함수 유형 답안에 대해 작성하는 각 평가에는 일반적으로 학습자 답안에 대한 호출이 포함됩니다. 함수에 대한 입력값을 제공하고 반환된 값을 평가할 수 있습니다. 모범 답안을 호출하여 해당 출력값을 학습자 답안의 출력값과 비교할 수도 있습니다.

  • 각 평가는 순차적으로 그리고 다른 평가와는 독립적으로 실행됩니다. 한 평가를 통과하지 못해도 후속 평가가 계속 실행됩니다.

  • 한 평가에서 만들어진 변수는 다음 평가에서 사용할 수 없습니다. 각 평가에 필요한 모든 변수를 정의합니다.

  • 오류를 반환하지 않는 경우 평가는 정답으로 표시됩니다. 오류가 있는 경우 평가는 오답으로 표시됩니다.

  • 평가 테스트가 사전 테스트인 경우 학습자는 답안 통과 여부에 관계없이 테스트 이름 왼쪽의 화살표를 클릭하여 평가에 대한 정보를 볼 수 있습니다.

참고

assessVariableEqual에 의해 생성된 디폴트 오류 메시지에는 테스트한 변수의 이름이 포함되어 있습니다. 함수 유형 문제의 경우 이 변수는 학습자가 아닌 강사에 의해 평가 스크립트에 생성됩니다. 함수 선언에 정의된 출력 변수와 같이, 학습자가 인식할 수 있는 의미 있는 변수 이름을 사용하십시오.

주어진 코딩 문제에 대한 각 평가는 답안과 평가를 실행하는 데 소요되는 실행 시간에 영향을 미칩니다. 자세한 내용은 제출 시간 제한 항목을 참조하십시오.

평가에서 학습자 답안 호출하기

함수 유형 문제는 특정 입력값을 사용하여 학습자 답안을 호출하고 출력값을 테스트하여 평가합니다. 이 섹션에서는 MATLAB Grader 홈 페이지의 MathWorks® 문제은행 Getting Started with MATLAB Grader에서 찾을 수 있는 My first FUNCTION problem에서 가져온 코드 예제를 사용합니다.

예제 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);

예: "정규화된 sinc를 계산하는 함수 작성(Write a function to calculate the normalized sinc)" 코딩 문제에 대한 평가

MathWorks 문제은행 문제 예제에서 가져온 예제 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 is 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.

예제 함수 문제 만들어 보기

여기에 사용된 첫 번째 예제는 MathWorks 문제은행Getting Started with MATLAB Grader에서 찾을 수 있는 My first FUNCTION problem에서 가져온 것입니다.

여기에 사용된 두 번째 예제는 MathWorks 문제은행의 Getting Started with MATLAB Grader에서 찾을 수 있는 Write a function to calculate the normalized sinc에서 가져온 것입니다.

학습자가 하듯이 문제를 풀어 보려면 문제를 연 다음 학습자 미리보기를 클릭하십시오. 답안 상자에 코드를 입력한 다음 제출을 클릭하여 평가를 실행합니다(제출한 답안이 실제로 기록되지는 않음). 올바른 코드와 잘못된 코드를 모두 넣어서 표시되는 피드백을 확인해 보십시오.

관련 항목