【发布时间】:2015-07-01 05:36:50
【问题描述】:
我正在为学生做一个程序。他们可以在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
执行代码后,生成的图像将与正确的图像(预定义的图像)进行比较,并且必须相同。如果不是,那么程序必须至少指出可能出现错误的代码行。我不知道我是否让自己明白了=/。
提前谢谢你。
【问题讨论】:
-
您会在这里发布您的一些作品或您尝试过的作品吗?
-
你能举一个这样的练习的例子吗?我无法想象一种合理的方法来识别错误的代码行。
-
我添加了之前忽略的新信息。我的代码现在不工作,但我创建了一个循环,逐行读取学生的代码并使用 eval() 函数执行每一行。
-
我没有看到以简单方式找到确切代码行的方法。如果练习包含多个步骤,您可以将每个步骤之后的结果保存在一个元胞数组中,并以某种方式比较这个结果。元胞数组可以是学生函数的输出,您可以使用评估脚本调用它。然后您可以判断结果开始与您的预期版本不同的子练习。当然,您可以创建预定义的错误图像来识别常见错误。我建议不要使用
eval-function,除非它是绝对需要的。 -
你说你要编码数据,然后你写“程序的输出总是一个或几个图像”。那是另外一回事,验证数据的工作量要少得多,但没有办法将错误追溯到错误的代码行。我建议看看 cody 以获得一些灵感 (mathworks.com/matlabcentral/cody)
标签: matlab save eval metaprogramming