首页 > 解决方案 > 提交给 Matlab Grader 时变量的值“不正确”

问题描述

我正在为我的 Matlab 作业而苦苦挣扎:

编写一个脚本来执行以下操作:

  1. 生成一个大小为 8 x 25 的称为等级的矩阵,其中包含 1 到 6 范围内的 double 类型的随机数。

  2. 计算矩阵行的平均值 ( mrow)、矩阵列的平均值 ( ) 和矩阵等级mcol的整体平均值 ( mall)。

  3. 将矩阵复制grades到一个新变量,在其中将第 5 行和第 20 到 23 列中的元素替换为 NaN。再次计算该矩阵的总体均值 ( mall_2),即剩余值的均值。

我完成了任务 2-5,但是,任务 1 不正确。我不确定我做错了什么。我认为它与数字类型(双精度)有关,但我无法转换它。

我们必须将作业提交到在线工具“Matlab Grader”。系统说:

随机数矩阵:变量等级的值不正确。

这是我的代码:

% Generate matrix 'grades' with random numbers in the range 1 to 6

a = 1;
b = 6;
grades = (b-a).*rand(8,25) + a;

% calculate mean values 'mrow', 'mcol', 'mall'
mrow = mean(grades,2)
mcol = mean(grades,1)
mall = mean(grades(:))
% Replace elements with NaN
grades(5,20:23) = NaN
%Calculate mean of elements omitting NaN
mall_2 = mean(grades(:),'omitnan')

标签: matlabrandomdouble

解决方案


我假设您的作业验证系统正在检查变量中的所有内容是否都是grades1 到 6 范围内的(随机)数字,如问题 1 所要求的那样。

但是,在计算结束时,变量中还有 3 个NaNgrades,因为您错过了问题 3 的这一步:

将矩阵复制grades到新变量

相反,您覆盖了grades.

如果你这样做:

grades_mod = grades;
grades_mod(5,20:23) = NaN;
mall_2 = mean(grades_mod(:),'omitnan');

然后grades将保留其原始值(无 NaN),您可以计算mall_2.


推荐阅读