变量提交给Matlab分级机时具有“不正确”值

时间:2019-10-25 13:21:04

标签: matlab random double

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

编写脚本以执行以下操作:

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

  2. 计算矩阵等级的矩阵行的平均值(mrow,矩阵列的平均值(mcol)和总体平均值(mall)。 / p>

  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')

1 个答案:

答案 0 :(得分:1)

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

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

  

将矩阵grades复制到新变量

相反,您覆盖了grades中的元素。

如果您这样做:

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

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