我正在为学生做一个程序。他们可以在matlab程序中加载他们的matlab代码,程序应该执行学生的代码并检查输出是否正确,如果不是,程序必须指出错误的行代码。所以我认为这是一种元编程。现在我正在尝试使用eval()函数来执行输入文本作为代码,但我不知道这是不是一个好主意。此外,我在维护工作空间中的变量时遇到问题,因为当我从一个方法更改为另一个方法时,工作空间变量被重置,因此我正在考虑解决此问题,将工作空间保存并加载到文件中,但可能是您可以提出其他更好的想法。
目前,我们有预定义的练习,学生必须解决,程序的输出总是一个或几个图像,因为这是图像处理类。这里有一个代码示例:
X=double(LENNA_G);
Y=medfilt2(X,[7 7]);
ps=psnr(Y,X,255);
disp(sprintf('%f[dB]',ps));
subplot(1,3,1);
imagesc(X,[0 255]);
colormap(gray(256))
axis image
subplot(1,3,2);
imagesc(Y,[0 255]);
axis image
subplot(1,3,3);
imagesc(X-Y,[-10 10]);
axis image
执行代码后,将生成的图像与正确的图像(预定义图像)进行比较,并且必须相同。如果不是,那么程序必须至少指出错误所在的代码行。我不知道自己是否理解了= /。
提前谢谢。
答案 0 :(得分:0)
从评论中,我会提出这个解决方案。向学生分发模板:
function solution=exercise1(image1,image2)
%A) extract the r, g and b channel from the imag1e
solution.a.r=nan;
solution.a.g=nan;
solution.a.b=nan;
%B) convert the image2 to greyscale
solution.b=nan;
end
然后你可以调用函数exercise1并逐字段地比较,你需要的是对结构进行递归比较,这些结构输出具有差异的字段名。您还可以提供脚本模板而不是功能模板,但是您的学生必须为其功能创建单独的文件。这样,可以在同一个文件中创建函数,使它们保持私有并避免名称空间冲突。